Linux驱动开发,看起来是一份很高大上的职业,毕竟从事上层应用开发人员太多,而且门槛又不是特别高,而内核级开发从业人员要少得多,而且资料又较少。

有许多刚刚接触到Linux驱动开发的同学会感觉非常困惑,面对复杂的Linux内核有一种无从下手的感觉。今天就和大家分享一下,让刚刚步入驱动开发的同学少走一些弯路。

一、要知道将来要做什么?

学习,都是有目的性的,要么是兴趣使然,要么就是刚性需求,为了找一份好的工作。在这里先和大家聊聊做设备驱动将来可以做哪些方面。

我把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级代码的开发,也能做外设驱动的开发的。

二、用面向对象的思想去思考

面向对象,即OO思想,大家应该非常熟悉。linux的内核虽然用面向过程的C语言实现,但是仍然是通过面向对象的思想去设计的。

如果从单片机转行做linux设备驱动,会发现和单片机的或者裸机的驱动设计有很大区别。设计linux设备驱动不单单是对硬件设备的操作,更多需要考虑的是扩展性和代码的复用。

所以就出现了platform device/driver,i2c device/driver,spi device/driver,抽象出了设备和驱动两部分,使设备细节和驱动分离。另外还出现了一些框架,提供了底层接口的封装,做开发时要习惯用OO思想去设计。当然要记住条条大路通罗马,不使用这些device/driver也可以实现设备驱动,只是不太推荐这样做。

三、从各驱动框架入手

Linux提供了各种框架(子系统),对底层进行封装,抽象出相同操作的接口,这样可以更好的实现复用。想入门linux驱动开发,可以先从框架入手,掌握API的使用,再逐渐深入研究,从上到下去学习。不要把驱动开发想象的太复杂,实际和英语的完型填空差不多,框架有了,只需要自己去填写操作具体硬件的细节代码而已。

几个比较重要和常用的框架有:

文末有学习路线参考!

更多linux内核视频教程文档资料免费领取后台私信【内核】自行获取.

学linux驱动开发(小白该如何学习Linux驱动开发)(1)

学linux驱动开发(小白该如何学习Linux驱动开发)(2)

Linux内核源码/内存调优/文件系统/进程管理/设备驱动/网络协议栈-学习视频教程-腾讯课堂

给大家推荐一下驱动开发转内核大神的学习路线

全方面系统全面的讲解底层原理开发技术:

1、五大专题,共计150 个课时

2、20个实战操作模块,2w 代码;

主要从

全方面系统全面的讲解底层原理开发技术:

最新Linux内核大纲

进程管理专题

学linux驱动开发(小白该如何学习Linux驱动开发)(3)

内存管理专题

学linux驱动开发(小白该如何学习Linux驱动开发)(4)

网络协议栈专题

学linux驱动开发(小白该如何学习Linux驱动开发)(5)

设备驱动管理专题

学linux驱动开发(小白该如何学习Linux驱动开发)(6)

文件系统及内核组件专题

学linux驱动开发(小白该如何学习Linux驱动开发)(7)

项目实战

学linux驱动开发(小白该如何学习Linux驱动开发)(8)

适合于

学linux驱动开发(小白该如何学习Linux驱动开发)(9)

学linux驱动开发(小白该如何学习Linux驱动开发)(10)

学linux驱动开发(小白该如何学习Linux驱动开发)(11)

学linux驱动开发(小白该如何学习Linux驱动开发)(12)

学linux驱动开发(小白该如何学习Linux驱动开发)(13)

学linux驱动开发(小白该如何学习Linux驱动开发)(14)

等等

,