1、编写自己的写的驱动
1.1 前言:驱动框架处理一些算法,数据结构,它是内核人员写的,内核并不知道你到底是什么样的硬件,所以无法进行硬件操作,真的对硬件操作的是我们驱动人员写的驱动,区分驱动和驱动框架。
1.2 makefile、kconfig、xxx.c (这3个文件需要我们自己创建)
1.2.1 kconfig:这个文件里面定义模块最后在menuconfig中通过Y(添加),N(不添加),M(模块形式加载)配置,如下:LEDS_CLASS,最后会被linux背后的一套机制加上CONFIG_,kconfig中核心代码如下:
config LEDS_CLASS
tristate "LED Class Support"
1.2.2 makefile:最后make会生成一个配置文件config,里面记录着menuconfig配置后,所有的类似CONFIG_LEDS_CLASS的值,然后在makefile中通过menuconfig配置的值,看是否会被编译成o文件链接到内核中。
obj-$(CONFIG_LEDS_CLASS) += xxx.o 相当于 obj-m/y += xxx.o
(1)如果是很大的工程,自己需要编写并添加很多模块,当前makefile中不需要编写如何生成.KO的步骤,最后统一在顶层makefile中写,一次性编译成ko,而不用在各自makefile中一个个make去生成:相关代码如下:
$(MAKE) -C $(KENREL_DIR) M=$(PWD) modules
(2)单个模块生成ko就在自己的ma