|
楼主 |
发表于 2010-4-5 21:06:14
|
显示全部楼层
Linux OS主体是文件
任何设备也是文件...
当然我们的资料跟设备一样都是文件.
但是我们在系统调用write()等函数的时候,具体的操作产生了区分...
这也是Linux的经典所在----在上层向用户提供了统一的接口,向下给了程序设计人员(内核开发者、驱动开发者)足够的用武之地.
Linux中有3张重要的表--fd文件描述符表、i节点表、struct file表(打开文件才有)
任何存在于Linux文件系统中的文件都有struct inode结构体.
在《现代操作系统原理》这本书里面讲到i节点是一种索引的文件硬盘存储方式.
当用open()函数打开一个文件时候,系统为该文件分配fd,fd是一个整数,用于表示数组元素序列.
之后,申请struct file结构体空间,并保存其地址与fd所表示的数组元素中.
然后关联文件对应的i节点结构体struct inode以及fs(后者是驱动程序编写中必要的一部).
完成open()任务。
当我们使用write()函数时,系统会根据fd号找到对应的struct file文件结构,并使用里面指向的fos.
所以我们write设备文件的时候,会通过用户空间的write调用我们定义的具体的xxx_write当中.
学习了1年的驱动,今天理解了这个,也算一个突破...mark!
希望大家拍砖 |
|