Linux——设备的分类

来源:互联网 发布:校园网络使用代理软件 编辑:程序博客网 时间:2024/05/22 11:40

        一般来说,Linux把设备驱动程序分为4种:字符设备,块设备,网络设备及其他设备。其中字符设备和块设备可以像文件一样被访问。例如:驱动程序通常会实现open, close, write, read, seek等操作。网络设备在Linux系统中是一类比较特殊的设备,它不像字符设备或者块设备那样对应设备文件节点访问,内核也不再通过read,write等调用去访问网络设备。

驱动程序是内核代码的一部分,其地址空间是内核的地址空间。应用程序通过操作系统的系统调用执行相应的驱动程序函数,中断则直接执行相应的中断程序代码。当设备驱动程序的file_operation结构体的地址被注册到内核的设备链表中之后,块设备和字符设备以设备文件的方式建立在文件系统的/dev目录下,而且每个设备都有一个主设备号和一个次设备号。

关于主设备号与次设备号:

       在传统的设备管理中,除了设备类型外,内核还需要主设备号和从设备号两个参数,才能唯一的确定并标识某个设备。

如图所示,如果第一个字母是c,就代表字符设;如果是b,就代表是块设备;如果是d,就代表是个目录,第五组代表主设备号,第六组代表次设备号。

       在同一个系统中,一类设备的主设备号是唯一的。次设备号只是在驱动程序内部使用,系统内核直接把次设备号传递给应用程序,由驱动程序管理。为了保证驱动程序的通用性,避免驱动程序移植过程中出现主设备号冲突,理想的方式是给每个设备驱动动态的分配主设备号。

设备文件系统(devfs)与udevfs:

       设备类型、主次设备号是内核与驱动程序通信时所使用的,但是对于开发应用程序的用户来说难于理解和记忆,所以linux中使用设备文件的形式来统一对设备的访问接口。在引入设备文件系统(devfs)之前,linux将设备文件放在/dev下,设备的命名一般为“设备名+数字或者字母表示的子类”,例如,/dev/hd0,/dev/hd1等。

       在linux2.4内核版本中引入了设备文件系统(devfs),将所有的设备文件挂载在同一个文件系统下,可以被文件系统统一的管理。同时,命名规则也发生了一些变化,一般为主设备建立一个目录,在讲具体的子设备建立在此目录下。

       值得注意的是,设备文件系统(devfs)在linux2.6.15之前的版本中被标记为舍弃;在2.6.15以后的版本中则取消了对他的支持。Linux2.6内核引入了系统文件系统(sysfs)为每个系统的硬件树进行分级管理,他提供了设备的基本信息。同时使用udev脚本,这是一种Linux2.6内核采用的/dev目录管理系统。它能够在用户态下动态的维护/dev目录下的设备文件。

0 0
原创粉丝点击