驱动框架8——将驱动集成到内核中
以下内容源于朱有鹏《物联网大讲堂》课程的学习整理,如有侵权,请告知删除。
十五、将驱动添加到内核中
1、驱动的存在形式
(1)野生,优势是方便调试开发,所以在开发阶段都是这种;
(2)家养,优势可以在内核配置时make menuconfig决定内核怎么编译,方便集成。比如DM9000已经集成在内核中了,可以在menuconfig时配置。
2、驱动开发的一般步骤
(1)以模块的形式在外部编写、调试;
(2)将调试好的驱动代码集成到kernel中
3、实践
(1)关键点:Kconfig、Makefile、make menuconfig
(2)操作步骤
- 第1步:将写好的驱动源文件放入内核源码中正确的目录下;比如led的驱动,应该放在/drivers/leds/目录下;
- 第2步:/drivers/leds/目录下,在Makefile中添加相应的依赖;
- 第3步:在Kconfig中添加相应的配置项;(因为make menuconfig的原理是读取Kconfig中的信息,这里要显示对应的配置项目,则需要添加相应内容)
- 第4步:make menuconfig;(以y为示例,此时会被编译进去;若以M,则不会被编译进去,而是被编译成单独的模块;若以N,则不被编译。)
第2步:
第3步:
第4步:
选择y之后,保存,然后在.config文件中会有如下的宏
结果如下:
十六、目录和文件结构
mach-s5pv210/gpiolib.c s5pv210_gpiolib_init
mach-s5pv210/include/mach/gpio.h#define S5PV210_GPA0(_nr)(S5PV210_GPIO_A0_START + (_nr))
arch/arm/plat-samsung/gpiolib.c里面是210/6410这种4bit CON寄存器类型的操作方法
arch/arm/plat-samsung/gpio.c里面是24XX这种2bit CON寄存器类型的操作方法
drivers/gpio/gpiolib.c里面是内核开发者提供的gpiolib的驱动框架部分