查看原文
其他

Linux驱动开发流程四步走

嵌入式ARM 2021-01-31


首先,我们要考虑到作为驱动工程师要做的是摆脱单片机开发的思路,在单板开发(没有OS)过程,设备的驱动接口直接交给了上层,驱动和应用互为平等。在有OS的系统中,驱动独立于硬件平台之外,应用工程师通过虚拟文件系统的read write对具体的IO进行操作。


一般流程分为4步:

1.我们首先要确定硬件平台接线,然后确定该设备接口,比如一般的IIC SPI USB USART 等接口。


2.一般的发行版内核都有通用对应接口的驱动,我们将该文件稍加修改即可,比如内核中带有IIC接口:


AT24C02的存储芯片的驱动,我们现在要做SX8650的驱动(IIC),我们首先可以将该文件复制,然后可以分析,这两款IC无非是读取寄存器的方法不一样,所以我们首先需要修改对应的IIC速率,对应的IO接口配 置方式,对应内存地址分配,对应的寄存器读写方法API等。


3.内核驱动有两种方式加载,一种是以模块的方式动态加载(驱动开发初期推荐),一种是直接编译入内核。


4.修改对应目录下的Kconfig和Makefile

makefile和Kconfig的一般解释:

a、在kconfig中增加(假设对应的驱动为LED)

config LED_ARM9//配置选项,在menconfig时显示tristate(bool二选一) "lfy config the led" //bool和tristate的区别是一个是是否变异如内核,一个是三选一,是否编译入内核,模块编译入内核depends on ARCH_S3C2410|XXX|AAA|BBB //配置有效先决条件是该平台已被选中

 
b、在makefile中增加

obj-$(LED_ARM9)+=led.o //此处注意两点,第一点LED_ARM9一定要与kconfig名称一一对应,//第二点就是 led.o为你编译驱动后的输出文件,此句话的意思就是如果LED_ARM9被配置,则此句简化为obj-y或者obj- m,取决与你配置内核选择的是编译入内核还是已模块方式编译入内核。

对于单驱动文件可以使用上述makefile的规则,如果一个驱动对应多个输出文件则需要适当修改makefile

obj-$(LED_ARM9)+=led.oobj-y :=led.o a.o b.o c.o

-END-


免责声明:整理文章为传播相关技术,版权归原作者所有,如有侵权,请联系删除

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存