一般的,在测试阶段的设备驱动都是先使用ko文件加载到系统,然后生成设备节点,再使用应用调用测试。但当驱动测试ok,至少是不会有大的改动的时候,再使用ko文件加载设备驱动就显得不太合理了。首先,ko文件需要系统启动之后才能加载(即使写在脚本里),而且驱动多了维护也麻烦。
设备驱动本来就是内核的一部分,所以在测试好的驱动可以直接编译到内核里面。这里我就不再写ko文件怎么编译怎么测试了,直接从设备驱动配置到内核中的方法开始。在此之前,我先说一下,linux内核的编译方式,理解了这个,也就明白备驱动配置到内核里面的方法了。
linux内核的编译是使用Kconfig和Makefile管理的,在最顶层的Makefile会一层层的管理到各个子目录下的Makefile,所以打开linux内核你会看到内核根目录下的有Makefile,drivers下也有Makefile,drivers/char也有Makefile,这是linux自上而下的编译结构。那么另一个问题来了,Makefile怎么知道编译哪些文件呢,drivers里面这么多驱动并不是都要编译的,这就是Kconfig的用处了。
Kconfig对每个文件都有一个配置项,只有这个配置项被选中,Makefile才会编译这个文件。
例如我在drivers/char/Kconfig添加了下面一条配置:
config XILINX_XUART2
tristate “Xilinx use uart2 ip”
depends on ARCH_ZYNQ
default y
—help—
this module driver will support GA uart IP
XILINX_XUART2是配置明,Makefile根据他来确定是否要编译某个文件,tristate后的字符串是在配置内核时我们能看到的配置选项,default是默认的选项,y默认编译,n默认不编译。
Makefile中添加此配置:
obj-$(CONFIG_XILINX_XUART2) += xilinx-xuart2-baud.o使用make menuconfig来选择配置:
当xilinx use uart2 ip被配置上,CONFIG_XILINX_XUART2的值就是y,Makefile也就知道xilinx-xuart2-baud.c文件需要被编译到内核中去。
更多内容请关注我的公众号,欢迎转载!