Linux设备驱动开发-Makefile与Kconfig举例

本文通过一个具体的实例,详细介绍了如何在Linux内核源码中新增目录,并配置Makefile和Kconfig文件来实现功能模块的选择编译。具体涵盖了目录结构、Kconfig配置项设置及依赖关系、Makefile编译规则等核心内容。

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

上一篇文章说了Makefile与Kconfig,那么我们现在就看一个例子让我们对其有更加深刻的理解。(参考驱动开发详解)

假设我们要在内核源码drivers目录下为ARM新增一个my driver树形目录,如下:

my_driver/
|-- cpu
|   `-- cpu.c
|-- test.c
|-- test_client.c
|-- test_ioctl.c
|-- test_proc.c
`-- test_queue.c

如前面所说,在内核里面新增目录,就要在相应的目录中创建Makefile和Kconfig文件,而新增目录的父目录也需要修改,新的Makefile、Kconfig才能被引用。那么我们下来就在my_driver目录下创建Makefile和Kconfig文件。首先我们来看下Kconfig文件的内容:

#
#MY_DRIVER configuration
#
menu "MY_DRIVER"
comment "MY_DRIVER"

config CONFIG_TEST
       bool "TEST support"
config CONFIG_TEST_USER
       tristate "TEST user-space interface"
       depend on CONFIG_TEST

endmenu

 

由于test driver是内核新增的功能,所以首先创建MY_DRIVER菜单,显示TEST support等待用户选择,下来判断是否选择了MY_DRIVER,如果是(CONFIG_TEST=y),则进一步显示子供能:用户接口与cpu功能支持(CONFIG_TEST_USER),由于用户接口功能可以被编译成内核模块,所以用tristate(tristate类型的菜单项多了编译成内核模块的选项)。

为了能使这个Kconfig文件生效,还需要修改arch/arm/Kconfig文件

source "drivers/my_driver/Kconfig"

脚本中使用source说明引用新的Kconfig。

下来我们看下Makefile文件

#
# drivers/my_driver/Makefile
#
obj-$(CONFIG_TEST) += test.o test_queue.o test_client.o
obj-$(CONFIG_TEST_USER) += test_ioctl.o 
obj-$(CONFIG_PROC_FS) += test_proc.o
 
obj-$(CONFIG_TEST_CPU) += cpu/
my_driver目录中的子目录cpu也包含Makefile文件,如下:
#
# drivers/my_driver/cpu/Makefile
#
obj-$(CONFIG_TEST_CPU) += cpu.o 
为了使整个my_driver目录能够被编译,my_driver父目录中的Makefile也应该新增脚本,如下:

obj-$(CONFIG_TEST) += test/
这使得用户进行内核编译时能进入到my_driver目录

增加了Kconfig和Makefile文件之后新的目录树形图为:

my_driver/
|-- cpu
|   |-- cpu.c
|   `-- Makefile
|-- Kconfig
|-- Makefile
|-- test.c
|-- test_client.c
|-- test_ioctl.c
|-- test_proc.c
`-- test_queue.c
上面就是一个Makefile和Kconfig应用的一个例子,可以让我们更加形象的理解这两个文件的意义所在。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值