关闭

linux驱动开发一般流程

标签: linux驱动
437人阅读 评论(0) 收藏 举报
分类:

首先,我们要考虑到作为驱动工程师要做的是拜托单片机开发的思路,在单板开发(没有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



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:5782次
    • 积分:116
    • 等级:
    • 排名:千里之外
    • 原创:4篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类