接前面第一章的第二个编译驱动方法
先分析一下下面的代码
source "drivers/redled/Kconfig"
config LED_4412
tristate "Led Support for GPIO Led"
depends on LEDS_CLASS
help
This Option enable support for led
- 第一行代码,他会包含这个路径下的驱动文件,方便我们界面配置选项管理
- 第二行代码,配置选项的名称,他前面隐藏了,全民为CONFIG_LED_4412
- 第三行代码,tristate表示驱动在界面上有3种状态,第三章有写
- 与之对应的有bool,表示在界面上只有2种状态,少了一种编译成模块
- 后面双引号的是选项的名字,显示在界面上的
- 第四行代码,例如 A depends on B 表示只有在选择B后才能选A,表示依赖于B
- 与之对应的有select,反向依赖,A选中时B也会同时选中
- 第五行和第六行代码,帮助信息
仿写一个helloworld驱动
步骤
- 进入linux源码根目录下的drivers目录下的char目录
- 新建一个helloworld文件夹,把第一章写的驱动文件放进来
- 新建一个Kconfig文件
- 仿照例子修改Kconfig文件
config HELLOWORLD tristate "helloworld" help hello hello
- 新建一个Makefile文件, 下面的CONFIG_HELLO是由Kconfig中的第一行代码所决定
obj-$(CONFIG_HELLOWORLD)+=helloworld.o
- 在char目录下,找到并修改Makefile文件,加入下面一行代码
obj-y += helloworld/
- 在char目录下,找到并修改Kconfig文件,加入下面一行代码
source “drivers/char/helloworld/Kconfig”
- 返回根目录输入命令make menuconfig
- 进入Character devices目录里就可以找到helloworld了,可以用空格修改三种状态
- 如果选中后,然后在.config里搜索HELLOWORLD,就会找到CONFIG_HELLOWORLD=y
- 如果想直接修改相关的驱动,可以直接改.config,但不推荐,如果直接修改.config,但该驱动有依赖,就会修改不成功
- 进入内核根目录底下的编译脚本create.sh,可以看到前面有make xxx_defconfig,表示会自动寻找arch/arm/conflags中的xxx_defconfig配置文件编译的
- 根目录输入命令make distclean,清除所有的编译文件
- 把根目录下的.config删掉,把arch/arm/conflags中的xxx_defconfig配置文件替换为.config
- 然后进入make menuconfig界面选择helloworld,如果选中后,然后在.config里搜索HELLOWORLD,就会找到CONFIG_HELLOWORLD=y
- 把arch/arm/conflags中的xxx_defconfig配置文件修改名字为xxx_defconfig_nohello
- 再将根目录底下的.config复制为xxx_defconfig作为修改后的配置文件,以后直接运行脚本就会把拥有helloworld的配置文件进行编译
- 运行create.sh脚本进行编译
- 如果编译成功就去到drivers/char/helloworld看看有没有将helloworld.c编译成.o
- 再确定arch/arm/boot/下面有没有生成zImage镜像
- 将zImage烧录到板子上
- 在开机的时候查看开机启动信息有没有打印helloworld