首页 百科知识 字符设备管理

字符设备管理

时间:2022-10-09 百科知识 版权反馈
【摘要】:字符设备,Linux最简单的设备,像文件一样访问。当字符设备初始化的时候,它的设备驱动程序向Linux内核登记,在chrdevs向量表增加一个device_struct数据结构条目。在系统内核保持着一张字符设备注册表,每种字符设备占用一个表项。在Linux中正是使用主设备号来对注册表数组进行索引,即chrdevs[]数组的下标值就是主设备号。device_struct结构中有指向file_operations结构的指针f_ops。file_operations结构中的函数指针指向设备驱动程序的服务例程,其注册表参见图5-2。

5.3.1 字符设备管理

字符设备,Linux最简单的设备,像文件一样访问。应用程序使用标准系统调用打开、读取、写和关闭,完全好像这个设备是一个普通文件一样。当字符设备初始化的时候,它的设备驱动程序向Linux内核登记,在chrdevs向量表增加一个device_struct数据结构条目。这个设备的主设备标识符,用作这个向量表的索引。一个设备的主设备标识符是固定的。chrdevs向量表中的每一个条目,是一个device_struct数据结构。

在系统内核保持着一张字符设备注册表,每种字符设备占用一个表项。/proc/devices中字符设备的内容来自chrdevs向量表。字符设备注册表是结构数组chrdevs[]:

#define MAX_CHRDEV 128

static struct device_struct chrdevs[MAX_CHRDEV];

注册表的表项是device_struct结构:

struct device_struct {

  const char *name;  /* 指向设备驱动程序的名称的指针 */

  struct file_operations *fops; /* 指向文件操作函数的指针 */

};

在字符设备注册表中,每个表项对应一种字符设备的驱动程序。所以字符设备注册表实质上是驱动程序的注册表。使用同一个驱动程序的每种设备有一个惟一的主设备号。所以注册表的每个表项与一个主设备号对应。在Linux中正是使用主设备号来对注册表数组进行索引,即chrdevs[]数组的下标值就是主设备号。

device_struct结构中有指向file_operations结构的指针f_ops。file_operations结构中的函数指针指向设备驱动程序的服务例程,其注册表参见图5-2。

在打开一个设备文件时,由主设备号就可以找到设备驱动程序。

img27

图5-2 字符设备注册表

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈