设备类型分类

来源:互联网 发布:sql的使用 编辑:程序博客网 时间:2024/05/16 11:18

《深入浅出XScale嵌入式系统》读书笔记

1、字符设备是Linux最简单的设备,可以像文件一样访问。初始化字符设备时,它的设备驱动程序向Linux登记,并在字符设备向量表中增加一个device_struct数据结构条目,这个设备的主设备号用来做这个向量表的索引。向量表中的每一个条目,一个device_struct数据结构包括两个元素:登记设备驱动程序名称的指针和指向一组文件的操作的指针。

设备注册机构,内核提供一个字符设备注册表,用于登记字符设备的相关信息。该数据结构在文件fs/device.C中定义,定义形式如下:

struct decice_struct{

  const char *name  设备名称

  struct file_operation * fops  设备相关文件操作

字符设备登记表,负责登记各种字符设备的名字和对应的操作

static struct device_struct chrdevs[MAX_CHRDEV]={{NULL,NULL},}

2、快设备

块设备是文件系统的基础,它也可以像文件一样被访问。Linux用blkdevs向量表维护已经登记的块设备文件。它像chrdevs向量表一样,使用设备的主设备号作为索引。它的条目也是数据结构。与字符设备不同的是,块设备分为SCSI和IDE类;向Linux内核登记并向核心提供文件操作。

3、块设备与字符设备的主要区别:

对字符设备发出读、写请求时,实际的硬件I/O一般紧接着就发生了。块设备则不然,它利用一块系统内存作为缓冲区,当用户进程对设备的请求能满足用户的要求时,就返回请求的数据,如果不能,就调用请求函数来进行实际的I/O操作。

4、Linux将设备看成文件,系统支持的所有设备都必须以特殊文件的形式出现在文件系统中。说是“特殊文件”,是因为这些文件只有文件名而没有正文。这是因为,这种“文件”所要运载和提供的信息只有三项,即目标设备所属的类(块设备和字符设备)及其主设备号和次设备号,而这些信息完全可以放在文件的“目录项”中。

打开文件的过程就可以大致描述如下:

1、根据约定的设备文件名,在文件系统中找到目录文件的目录项,从中取得目标设备的主/次设备号。

2、在本进程的file结构数组中分配一个空闲的file结构数组,其下标即为“打开文件号”。如前所述,打开文件号只对本进程有意义。

3、根据目标设备的类别和主设备号找到相应的file_operations结构,并将其地址记录在file结构中。同时,把与目录项有关的数据结构的地址也记录在file结构中,以便获得其次设备号。

原创粉丝点击