1.嵌入式驱动知识梳理(一)

        忙活了几天上网查找各种资料,试图搞清,Linux驱动程序究竟是什么样的存在,在整个嵌入式系统中处于什么位置,搞清这个首先就要宏观上把握整个嵌入式系统是什么。

        网上资料一大堆,废话连篇,越看越晕,这张图讲的还算比较清晰。

        整个嵌入式系统从上到下可以分为应用程序、库、内核、驱动程序以及硬件设备5个部分,为了搞明白各部分之间的关系,在这里要和电脑端的Linux操作系统做个对比,以常用的Ubuntu系统为例。嵌入式系统其实就相当于一个小型电脑,嵌入式的硬件和电脑硬件除了大小和性能之外,没有区别,而嵌入式的内核和Ubuntu的内核一样,都是由初代内核版本发展而来,Ubuntu光靠内核是使用不了电脑的,所以上面就需要继续拓展各种功能和应用软件,构成一个操作系统,就是我们说的Ubuntu系统了,这样电脑就可以正常使用了。而Ubuntu的内核和嵌入式的内核是一样的,只不过版本可能不一样而已,但是内核的本质是软件,为了能够使用好各个丰富多样的底层硬件,满足上层应用程序的需求,比如一些office、vi等软件的操作指令,内核内部就需要有一系列配套机制来应对各种硬件使用交互期间发生的冲突,比如几个硬件同时使用怎么办,就需要进程管理模块来处理,核心是时间片轮转,也就是大家乱流使用CPU,因为CPU只有一个,就像人的大脑一样,一次只能想一件事情。比如每次使用硬件或调用相关函数会有中间数据和返回值,存在哪里,这时就需要内存管理系统来处理这些临时数据。再比如对于硬件中存储空间的每个分区可能有不同的存储数据方式,这就是不同的文件系统,为了兼容各文件系统的数据使用,就需要一个统一的格式来规划这些存储空间,至于硬件层面你们怎么存储,使用什么样的文件系统,虚拟文件系统就不需要知道,只要知道你们交给我的接口就行。还比如嵌入式系统需要和其他系统进行通信的话,就需要有一个网络堆栈系统来负责,使用socket通过TCP/IP协议与其他机器通信。最后一个内核模块也就是设备驱动模块,简单来说就是负责从硬件上读取和写入数据,提供一个借口给内核调配就行,为内核节省了许多资源开销。所以你看,内核基本由5个系统组成,进程管理系统,内存管理系统,虚拟文件系统,网络堆栈以及驱动程序,由于驱动程序更偏和底层硬件打交道,且代码量占内核内码一般以上,其实分离成一个单独的部分也是可以的。最后就是库,也就是系统调用接口,Linux内核的优点是安全,这就和内核的架构有关系,这个系统调用接口起了关键作用,也就是上层应用程序的一切向下层硬件的需要,都只能通过系统调用来下达指令,内核接受指令后,再继续向下派发指令,协同整个底层系统来满足上层需求。

        最后总结一下嵌入式驱动程序在整个系统中的位置,驱动的主要工作就是使用硬件,并向内核提供一个统一的接口,而内核又继续向上提供一个系统调用接口。不同的硬件需要不同的驱动来使用。驱动的具体工作就是向硬件读取和写入数据,一般通过寄存器。而从代码层面,内核其他部分构成代码的一块,驱动则是直接做成模块的形式,一单内核使用中需要驱动硬件,就动态的把相关驱动程序链接入内核代码,所以驱动的主要工作,就是学会使用硬件,写成一个模块,留出一个接口以供内核使用。详细了解查看链接,个人见解,中间简化,帮助理解,有错误还望指正点击打开链接

猜你喜欢

转载自blog.csdn.net/qq_27221271/article/details/80207063