引子:前面的文章实现了可加载的内核模块,通过这个内核模块实现对PWM定时器的控制和中断处理程序的注册。这里讨论一下将内核模块直接编译进内核的过程,首先声明来源于国嵌的视频教学。
其实很简单,第一步把冰箱门打开...(此处略去200字)
正经的第一步:将源文件代码 mytimer.c(不知道这么说规范不,反正就是 .c 文件)拷到Linux源代码目录下的 drivers 下的某个目录下 如:drivers/char
第二步:修改drivers/char 中的 Kconfig,Kconfig文件维护着内核模块配置的菜单(Linux源代码根目录下 make menuconfig 出来的东西)
打开Kconfig,看到:
menu "Charecter devices" (drivers/char 中的Kconfig维护着菜单中字符驱动的选项)
(依照其他驱动的格式添加)
config MY_TIMER
(Tab)bool "my_timer" (在make menuconfig 打开的菜单中,my_timer 将出现在Charecter devices 的下一层)
(保存关闭)
如果在make menuconfig 中选择了my_timer,配置结果将体现在Linux源代码根目录下 .config 文件中,在该文件中将会自动添加 CONFIG_MY_TIMER=y 的配置项。
第三步:打开drivers/char 中的 Makefile
(依照其他驱动的格式添加)
obj-$(CONFIG_MY_TIMER) += mytimer.o
(保存关闭)
编译就可以了
同颜色的部分是相关联的,即肝胆相照,荣辱与共,同生共死,互为因果
注意:
编译可加载的内核模块的代码 mytimer.c 同拷到直接编译到内核所使用的 mytimer.c 稍有不同,加载的内核模块的代码 mytimer.c 中开始部分需要有
#ifndef MODULE
#define MODULE
#endif
在直接编译到内核时应当去掉
否则会报错(该部分源自网民阿南的《ARMLinux入门与实践》)