linux驱动开发一般流程

2019-07-13 05:02发布

首先,我们要考虑到作为驱动工程师要做的是拜托单片机开发的思路,在单板开发(没有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        //配置有效先决条件是该平台已被选中 help this is led driver design by lfy b、在makefile中增加      obj-$(LED_ARM9)+=led.o //此处注意两点,第一点LED_ARM9一定要与kconfig名称一一对应,第二点就是     led.o为你编译驱动后的输出文件,此句话的意思就是如果LED_ARM9被配置,则此句简化为obj-y或者obj-     m,取决与你配置内核选择的是编译入内核还是已模块方式编译入内核   对于单驱动文件可以使用上述makefile的规则,如果一个驱动对应多个输出文件则需要适当修改makefile  obj-$(LED_ARM9)+=led.o obj-y :=led.o a.o b.o c.o