Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6928
  • 博文数量: 7
  • 博客积分: 255
  • 博客等级: 二等列兵
  • 技术积分: 80
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-15 10:16
文章分类
文章存档

2011年(1)

2010年(6)

我的朋友
最近访客

分类: LINUX

2010-03-19 15:20:18

一、驱动程序的注册
1、主设备号是内核使用的,用于将文件和其驱动程序联系起来。
   次设备号是驱动程序内部使用的,内核并不使用。
   一般在驱动程序中对于共用一个主设备号的各个设备会变换操作集合,而次设备号则用于标志这些设
备。
   主设备号和次设备号存放在inode结构的 i_rdev 字段。

2、内核维护一个内部数组,每个元素对应一个驱动程序的操作函数集。2.4.20版本内核中,对字符型驱动,该数组为:
   static struct device_struct chrdevs[MAX_CHRDEV]; 

  调用 register_chrdev 函数注册一个驱动程序时,实际上就是将驱动的名字和操作函数集写入该数组中下标为驱动主设备号的元素中。

3、要使得用户程序可以对设备进行读写,必须首先在系统目录树下建立某个文件节点,这个文件如之前所说被称为设备文件,一般放在/dev目录下

4、Linux 对于每个文件在内核中都有一个inode数据结构相对应。
   Linux 对每个创建文件都会在内存中创建一个对应的 inode 数据结构。创建文件时,该结构下列成员会获得如下的值:
   i_rdev:inode节点所代表的设备的设备号。
   i_dev :inode节点所在的设备的设备号。即inode节点保存于哪个设备上。


5、打开文件时,会通过路径名找dentry,进而找到inode,并建立file结构,然后通过主设备号查找到之前我们注册的驱动程序操作函数集,并更新file结构中函数集字段。
   这就建立起来了,dentry、inode、file结构、操作函数集之间的对应关系。


阅读(1195) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~