字符设备驱动开发之数据结构

来源:互联网 发布:kuka离线编程软件 编辑:程序博客网 时间:2024/06/05 03:13

接下来的几部分,我想通过简单的字符设备程序来了解设备驱动开发的基本原理以及流程。

由于用户程序是通过设备文件来和具体的硬件打交道,而对设备文件的操作无非是通过一系列的系统调用如open,close,read,write等来实现;对具体硬件设备的读写时通过设备驱动程序来完成。但是如何将系统调用和设备驱动程序联系起来呢?这里就涉及到一个非常重要的数据结构:

这个结构的每一个成员的名字都对应着一个系统调用。每个驱动程序注册时都会绑定这样的一个数据结构。当用户进程利用系统调用在对设备文件进行诸如read/write操作时,系统调用通过设备文件的主设备号找到相应的设备驱动程序,然后读取这个数据结构相应的函数指针,接着把控制权交给该函数。这是linux的设备驱动程序工作的基本原理。既然是这样,则编写设备驱动程序的主要工作就是编写子函数,并填充file_operations的各个域。

 

struct file代表一个打开的文件,在执行file_operations中的open操作时被创建,file指针在用户控件定义;

该结构的说明如下:

 

struct inode 结构用来在内核中代表一个文件,同一个文件可能被打开多次,有多个file结构,但是只有一个inode结构。

其中有两个非常重要的成员,

dev_t  i_rdev 保存设备文件的设备号

struct cdev *i_cdev 代表该文件对应的字符设备结构


参考网址:

http://www.embedu.org/Column/Column09.htm

http://space.itpub.net/14805538/viewspace-445624


原创粉丝点击