Kconfig原理与示例

本文详细解析了Linux内核中USB驱动的编译配置过程,包括如何通过.config文件和Kconfig设置来控制USB驱动的编译方式,以及CONFIG_USB参数的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.举例讲,linux-3.10\drivers\usb\Makefile截取一段:

#
# Makefile for the kernel USB device drivers.
#

# Object files in subdirectories

obj-$(CONFIG_USB)		+= core/

obj-$(CONFIG_USB_DWC3)		+= dwc3/

obj-$(CONFIG_USB_MON)		+= mon/

我们知道obj-y就是编译进内核,obj-m就是编译成模组生成.ko文件,在需要的时候insmod这个ko。

2.那么,obj-$(CONFIG_USB) 是哪里设置的呢?这个就是在linux-3.10\.config里面定义的,linux-3.10\.config:

#
# CONFIG_I2C_HID is not set
CONFIG_USB_SUPPORT=y
CONFIG_USB_COMMON=y
CONFIG_USB_ARCH_HAS_HCD=y
CONFIG_USB=y

因此,带入CONFIG_USB的值y,obj-$(CONFIG_USB) += core/ 便是等于:obj-y += core/。

3.那么,CONFIG_USB=y 又是哪里确定的呢?那就是linux-3.10\drivers\usb\Kconfig,里面的一句config USB

# ARM SA1111 chips have a non-PCI based "OHCI-compatible" USB host interface.
config USB
	tristate "Support for Host-side USB"
	depends on USB_ARCH_HAS_HCD
	select NLS  # for UTF-8 strings
	---help---
	  Universal Serial Bus (USB) is a specification for a serial bus
	  subsystem which offers higher speeds and more features than the
	  traditional PC serial port.  The bus supplies power to peripherals
	  and allows for hot swapping.  Up to 127 USB peripherals can be
	  connected to a single USB host in a tree structure.

这里表示有一个定义是CONFIG_USB,它是tristate 类型,在菜单中的名字是Support for Host-side USB。对Support for Host-side USB的配置值就是CONFIG_USB的值:
在这里插入图片描述
当我们在menuconfig里面,设置config USB的值之后,系统提示保存.config文件。这时我们设置的值就保存在.config之中,等待编译时读取这个设置了。

4.现在我们关闭这个选项并保存:
在这里插入图片描述
再次查看linux-3.10.config,CONFIG_USB=y就变成了# CONFIG_USB is not set:

# CONFIG_I2C_HID is not set
CONFIG_USB_SUPPORT=y
CONFIG_USB_ARCH_HAS_HCD=y
# CONFIG_USB is not set

这时,编译时就不会链接obj-$(CONFIG_USB) += core/这部分代码了。

5.tristate 有三种取值,还有一种是M,就是编译成模块,需要的时候动态链接:
在这里插入图片描述
这时候我们可以看到CONFIG_USB=m了:

# CONFIG_I2C_HID is not set
CONFIG_USB_SUPPORT=y
CONFIG_USB_COMMON=m
CONFIG_USB_ARCH_HAS_HCD=y
CONFIG_USB=m
CONFIG_USB_DEBUG=y
CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值