学习linux驱动开发的方法

 01要知道将来要做什么

  linux设备驱动开发作业分为两大类,一类是做BSP级的开发,别的一类是做外设驱动的开发。

  BSP的开发指的是板级代码的开发,和CPU是密切相关的,例如I2C/SPI Adapter的驱动。假如运用通用的芯片,比方三星的Exynos,飞思卡尔的I.MX系列,TI的OMAP或许DaVinci系列,根本都会有现成的BSP包,这部分代码通常是芯片厂商供给和大型公司贡献。大家能够看看linux内核源码中/arch/arm/mach-omap,内部很多代码都是诺基亚贡献。做BSP级的开发需求有较深的功底,首先要十分了解CPU特性,别的要使代码有良好的扩展性和复用性,方便后续移植。有这样需求的往往是芯片商或运用专用芯片的设备商。

  外设驱动开发就相对简略一些,都是和特定的外设硬件打交道。经过利用BSP级代码供给的API或许linux供给的更高层的笼统接口来操作硬件。实践上和应用层的开发大同小异。例如操作I2C总线上的EEPROM,实践上的读和写操作都有现已封装好的API来完成.而开发者需求做的是了解外设的特性,经过封装好的API对外设进行操作。新入门的开发者主张从外设驱动开发下手,按部就班。当然,一个优秀的开发者是即能够做BSP级代码的开发,也能做外设驱动的开发的。例如操作I2C总线上的EEPROM,实践上的读和写操作都有现已封装好的API来完成.而开发者需求做的是了解外设的特性,经过封装好的API对外设进行操作。新入门的开发者主张从外设驱动开发下手,按部就班。当然,一个优秀的开发者是即能够做BSP级代码的开发,也能做外设驱动的开发的。

   02用面向对象的思维去考虑

面向对象,即OO思维,大家应该非常了解。linux的内核尽管用面向过程的C言语完成,可是仍然是经过面向对象的思维去规划的。

假如从单片机转行做linux设备驱动,会发现和单片机的或许裸机的驱动规划有很大区别。规划linux设备驱动不单单是对硬件设备的操作,更多需求考虑的是扩展性和代码的复用。 所以就呈现了platform device/driver,i2c device/driver,spi device/driver,笼统出了设备和驱动两部分,使设备细节和驱动别离。别的还呈现了一些结构,供给了底层接口的封装,做开发时要习惯用OO思维去规划。当然要记住条条大路通罗马,不运用这些device/driver也能够完成设备驱动,仅仅不太引荐这样做。

    03从各驱动结构下手

Linux供给了各种结构(子系统),对底层进行封装,笼统出相同操作的接口,这样能够更好的完成复用。想入门linux驱动开发,能够先从结构下手,把握API的运用,再逐步深入研究,从上到下去学习。不要把驱动开发幻想的太杂乱,实践和英语的完型填空差不多,结构有了,只需求自己去填写操作具体硬件的细节代码罢了。

几个比较重要和常用的结构有:

GPIO:这个就不必多说了,刚开始触摸驱动的根本会操练经过GPIO点亮LED的操作,linux封装了相关的gpio操作接口。

SPI:学会spi device/driver的用法,以及收发音讯API,能够参阅一些代码,根本都是相同的套路。

I2C:学会i2c device/driver的用法,和学习SPI的套路相同。

PINCTRL:非常重要的一个结构,担任CPU引脚复用,由于现在的CPU都很杂乱,一个引脚支撑多种复用。

V4L2:一个非常杂乱的视频收集结构,具体能够参阅相关的文档。驱动里边有很多比如可供参阅,同时供给了模板vivi.c

Framebuffer:显现相关的结构,了解其中API,并且有模板skeletonfb.c。

DMA Engine: 把DMA操作进行封装,目前驱动代码中关于DMA的操作很多是运用私有的BSP包中的DMA接口,假如支撑DMA Engine的话,主张运用DMA Engine。

中断:比较常用的了,接口不多,很少把握。

USB结构:USB结构比较杂乱,API较多,能够经过读已有的代码进行学习。

MTD结构:存储相关比较重要的结构,网上相关的文档很多。

设备树:设备树是在新的内核里边引进来的,能够把板级代码中的各种device经过设备树文件去描述,动态创立,这样更灵敏。其实不要把设备树幻想的太杂乱,实践和解析JSON,XML相同,各个节点中记载设备相关的信息,供给给驱动运用。


作者:云叔
链接:https://www.zhihu.com/question/21192856/answer/2874445135
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值