最大化利用内核资源进行Linux驱动开发

初看起来linux设备千差万别,各式各样,需要实现的设备驱动也涉及很多内容,但很大程度上内核已经帮我们做完了大部分的工作,开发流程总结起来大体可以归纳为一下几点,三个方面的内容:

<第一个方面>

(1)首先对驱动进行分类,先把设备归纳为哪个类型的驱动,归纳正确后再利用内核提供的子系统进行开发(内核提供的子系统主要包括:Input子系统,RTC子系统,IIC子系统,USB子系统,音频子系统,内核子系统,网络子系统,MTD子系统,SPI子系统,led子系统等),这时往往就会发现很多通用的事情,内核已经帮我们做了。所以一个优秀的驱动工程师应该最大程度上利用内核的资源。毕竟内核已经实现的,稳定性强,可移植性好。

(2)找到内核提供的子系统,接下来就是制作该子系统对该类设备的表征,也就是找到该子系统对该类设备驱动描述的结构体。然后定义这个结构把必要的数据进行初始化,最后调用该内核子系统提供的接口函数提供给内核进行管理。这是大部分驱动程序开发啊大体战略流程。

(3)明确子系统已经做了什么,还有哪些没做,需要我们在驱动中实现哪些内容。通常做法是找一个接近的驱动程序或者找原厂拿到例程进行修改。而不是从头开始一行一行进行编写。到内核中找到接近的驱动例程是个很好的办法。这些例程基本上提供了接口如何使用,接口的调用流程等,借鉴已有的例子进行二次开发,可以有效的避免低级错误。

<第二个方面>

以上第一方面的几点内容基本上都是与内核接口有关,驱动开发第二个方面的内容就是芯片手册。这个方面的内容,对从单片机开发或者其他实时操作系统开发转过来做linux驱动开发的人员来说,这是一个优势。

<第三个方面>

驱动开发的另外一个重要的内容就是协议相关,各类嵌入式总线协议,从简单的SPI到复杂的PCI,USB等。协议的基本内容是需要掌握的。不过一般内核对各类常见协议都是以子系统方式提供,但开发人员一定需要清楚协议的具体内容,以及交互过程。系统已经帮开发人员在子系统中做了大部分共性的工作,已经很大程度上降低了驱动开发的工作量。

<总结>

因此学好驱动开发,一个重要的方面就是对内核的学习,尤其是对各类子系统以及各类总线协议的学习,熟悉内核的组织和思维方式;其次就是对相关CPU芯片手册以及各类外设芯片手册的了解。

根据:最大化利用内核资源进行Linux驱动开发--摘自《嵌入式Linux驱动模板精讲与项目实践》博文理解的改写。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值