时间:2019-06-18 00:00:00 来源:信盈达 作者:
从用户的角度:我们用的鼠标、键盘、无线网卡等都需要安装相对应的驱动程序后才能正常使用这些设备。
从开发者的角度:驱动是直接和硬件打交道的软件,可以使计算机和设备进行通信的特殊程序,相当于硬件的接口,操作系统或应用程序只能通过这个接口才能控制硬件设备进行工作。向下,驱动程序需要控制硬件进行相应的操作;向上,驱动程序需要向应用程序提供操作硬件的接口,所以驱动在整个嵌入式系统中处于一个中间的位置,具有承上(应用程序)启下(底层硬件)的作用。
一、 有了操作系统后,驱动实现起来反而变得更加复杂,那么还要操作系统干什么?
总是有初学者会问,既然驱动能起到承上启下的作用,能串联应用程序和硬件组成一个完整的嵌入式系统,为什么还要有操作系统这样复杂的东西呢,反而让我们的驱动学习起来更加复杂?没有操作系统只有驱动的确能构建一嵌入式系统,那这个系统就是我们通常所说的裸机系统或者单片机系统,只能完成一些简单的操作,如果有了操作系统就能具有以下功能:
a. 一个复杂的软件系统需要处理多个并发任务,如果没有操作系统,想完成多任务并发是很困难的。
b. 操作系统可以给我们提供内存管理机制,一个典型的例子就是,对含有MMU32位处理器而言,操作系统可以让每个进程都可以独立的访问4G的内存空间。
那么操作系统的存在给驱动提供了什么样的好处呢?有些学习过单片机的同学老是抱怨说,我学习裸机驱动感觉很简单,当学习带有操作系统的驱动的时候,十分复杂,感觉太难。事实确实是这个样子,那为什么要这么做呢?其实操作系统就是通过给驱动制造麻烦,从而来达到给上层应用提供便利的目的:操作系统提供给应用程序统一的系统调用接口来访问对应的驱动程序,从而来操作硬件设备,起到了分层的作用,写应用程序的人不用关心底层驱动怎么实现,只需要调用统一的接口就可以,做驱动的人,只需要按照操作系统提供的框架去完成驱动程序就可以了。
二、如何学习Linux驱动开发?
Linux驱动的学习涉及应用层(例如访问字符驱动以文件的形式,所以需要文件IO知识)和硬件(操作硬件需要看原理图,芯片手册,读写寄存器等)等方面的知识,涉及知识面广,架构多而复杂,所以初学者一定要有一定的Linux应用层和单片机开发相关的知识储备,这样上手起来可能会更加容易一点。另外,对于初学者,在学习驱动的时候,不能太纠结于细节(如为弄清某段代码,不断跟源代码),最好从使用的角度,宏观上、框架上去进行把握,等熟悉了之后,再慢慢深入。另外需要多实践,尽量有自己的开发板及外围器件,亲自动手操作,而不是只看视频或者阅读书籍。
三、 初步学习完后,要具备什么样的能力?
a. 熟悉Linux驱动开发流程,能独立开发简单的驱动。
b. 熟悉常用的Linux驱动框架(平台总线模型,I2C、SPI驱动框架,framebuffer驱动框架)。
免费领取试听卡
申请已经提交
老师会马上给您安排试听课程!
申请出错了
您可以加老师QQ:914865590报名咨询!