嵌入式 Linux驱动程序设计之驱动编译进内核
接上篇(二)嵌入式 Linux驱动程序设计之make menuconfig图形化配置及问题解决
例子
source "drivers/redled/kconfig" //它会包含drivers/redled/这个路径下驱动文件,方便对菜单进行管理
config LED_4412 //LED_4412配置选项的名称
tristate "Led Support for GPIO Led"
depends on LEDS_CLASS
help
this option enable support for led
说明:
tristate表示驱动状态,把驱动编译进模块,把驱动编译进内核,不编译
与之对应的还有bool分别是编译到内核与不编译
Led Support for GPIO Led是输入make menuconfig后显示的名字
A depends on B 表示只有在选择B的时候才可以选择A
比如想去掉LED相关的驱动,可以直接改.config文件?
答:可以但是不推荐,因为有的有依赖关系.直接修改.config是不成功的.
select 反向依赖,该选项被选择后后面的定义也会被选中.
help 帮助信息,如上面的"this option enable support for led"
步骤总结:
1.进入到想要编译的对应驱动文件路径下(如hello文件夹下),新建一个kconfig,内容如下:
config HELLO
tristate "hello world"
help
hello hello
2.新建makefile文件,增加语句如下:
obj-$(CONFIG_HELLO)+=hello.o
//.c文件名为hello所以写hello.o,CONFIG_HELLO根据编译状态而改变,-y为编译到内核,-M为编译为模块;因为kconfig中目标为HELLO所以此次为CONFIG_HELLO
3.打开上一级路径下的makefile文件,增加包含此驱动文件的文件夹的语句如下:
obj-y +=hello
4.打开上一级路径下的kconfig文件,增加包含此驱动文件的kconfig的语句如下:
source "drivers/hello/kconfig"
5.返回到内核路径下使用make menuconfig进行查看是否已经添加正确,正确就选中后保存退出.
6.检查内核根路径下编译脚本,查看内核默认编译的配置文件,如果不是我们现在改为的.config,我们需要使用命令:make distclean清除所有的编译文件;然后将默认编译的配置文件拷贝到源码根路径下并命名为.config,然后使用make menuconfig再将新驱动添加保存;此时查看.config中就会有新加的驱动编译命令,如:CONFIG_HELLO=y ;然后进入到内核默认编译的配置文件理解下将默认配置文件重命名,然后再回到源码路径下将自己新的.config命名改为默认配置文件名.
7.运行编译内核脚本,完成后检验是否成功方法1:在开发板运行检验,方法2:进入到新驱动路径下看是否生成了.o文件
开发板运行过程:将编译生成的zImage烧写到开发板,将开发板开机打印信息保存后搜索hello world就可以完成检验是否成功.
下面的hello后面需要加/因为是文件夹,否则无法生成o