在嵌入式Linux中,管理硬件设备(包括外围设备和存储设备)的代码没有放置在每个应用程序中,而是由内核统一管理。这些在内核中处理和管理硬件设备的软件就是设备驱动程序。
设备驱动程序在嵌入式Linux 内核里扮演着特殊的角色。嵌入式Linux设备驱动程序对内核来说是一个黑盒子,它们使用一套定义好的内部编程接口来实现不同的硬件功能,嵌入式Linux设备驱动程序完全隐藏了硬件如何工作的细节。在嵌入式Linux中,几乎所有的系统操作最后都会映射到除CPU和内存以外的某个具体硬件的某个具体操作上去,应用程序通过调用一系列与具体硬件设备无关的标准系统调用来访问硬件设备,而设备驱动程序负责把这些系统调用映射到那些实际操作硬件的函数中去。
嵌入式Linux设备驱动程序能独立于内核其他部分,编译为独立的模块,并且在需要时被运行的内核动态加载这些模块。这种模块化设计使得嵌入式Linux设备驱动程序更易于编写。
嵌入式Linux设备驱动程序的一个基本特征是对设备访问的抽象。所有硬件设备都被看成普通文件,可以通过和操纵与普通文件相同的标准系统调用来打开、关闭、读取和写入设备。系统中每个设备都用一种特殊的设备相关文件来表示。例如,系统中第一个硬盘被表示成/dev/had。块设备和字符设备的设备相关文件可以通过mknod来创建,并且使用主、从设备号来描述此设备。网络设备也用设备相关文件来表示,但只有当Linux寻找和初始化网络设备时才建立这种文件。
在嵌入式Linux中,由同一个设备驱动程序控制的所有设备具有相同的主设备号。从设备号被用来区分具有相同主设备号,并且由同一个设备驱动程序控制的不同设备(从设备号的作用不是严格的,其用途由设备驱动程序本身来决定)。例如,主IDE硬盘的每个分区的从设备号都不相同,如/dev/hda2表示主IDE硬盘的第三个分区,其主设备号为3,而从设备号为2。嵌入式Linux通过使用主、从设备号,将含在系统调用中的设备相关文件映射到设备的设备驱动以及大量系统表格中,如字符设备表等。
设备特殊文件的VFS索引节点中包含设备号信息。如果通过系统调用访问设备,则内核通过该VFS索引节点中的设备号信息调用适当的设备驱动程序。
图4-1说明了在嵌入式Linux系统中,应用程序如何通过VFS访问设备特殊文件。(www.xing528.com)
图4-2说明了在嵌入式Linux下,应用程序、设备文件、设备驱动程序、硬件设备之间的访问关系。
图4-1 应用程序通过VFS访问设备特殊文件
图4-2 应用程序、设备文件、设备驱动程序、硬件设备之间的访问关系
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。