linux驱动学习笔记(2.2) linux驱动中几个重要的数据结构

大部分的基础性的驱动操作包括 3 个重要的内核数据结构, 称为 file_operations, file, 和 inode. 需要对这些结构的基本了解才能够做大量感兴趣的事情,

到现在, 我们已经保留了一些设备编号给我们使用, 但是我们还没有连接任何我们设备操作到这些
编号上,file_operation 结构是一个字符驱动如何建立这个连接. 这个结构, 定义在 <linux/fs.h>, 是一
个函数指针的集合. 每个打开文件(内部用一个 file 结构来代表, 稍后我们会查看)与它自身的函数集
合相关连( 通过包含一个称为 f_op 的成员, 它指向一个 file_operations 结构). 这些操作大部分负责实
现系统调用, 因此, 命名为 open, read, 等等. 我们可以认为文件是一个"对象"并且其上的函数操作称
为它的"方法", 使用面向对象编程的术语来表示一个对象声明的用来操作对象的动作. 这是我们在
Linux 内核中看到的第一个面向对象编程的现象, 后续章中我们会看到更多.

struct file, 定义于 <linux/fs.h>, 是设备驱动中第二个最重要的数据结构. 注意 file 与用户空间程序的
FILE 指针没有任何关系. 一个 FILE 定义在 C 库中, 从不出现在内核代码中. 一个 struct file, 另一方
面, 是一个内核结构, 从不出现在用户程序中.


文件结构代表一个打开的文件. (它不特定给设备驱动; 系统中每个打开的文件有一个关联的 struct
file 在内核空间). 它由内核在 open 时创建, 并传递给在文件上操作的任何函数, 直到最后的关闭. 在
文件的所有实例都关闭后, 内核释放这个数据结构.

inode 结构由内核在内部用来表示文件. 因此, 它和代表打开文件描述符的文件结构是不同的. 可能
有代表单个文件的多个打开描述符的许多文件结构, 但是它们都指向一个单个 inode 结构.

以下是一个图片定义了,Linux驱动中三大数据结构关系图

 

Linux驱动中三大数据结构关系图

posted @ 2011-08-19 23:39  夏大王  阅读(621)  评论(0编辑  收藏  举报