结构体的每个域都对应着驱动模块用来处理某个被请求的事务的 函数的地址。
struct file_operations { struct module *owner; ssize_t(*read) (struct file *, char __user *, size_t, loff_t *); ssize_t(*write) (struct file *, const char __user *, size_t, loff_t *); 。。。
Linux设备驱动
Linux下设备的属性
设备的类型:字符设备、块设备、网络设备 主设备号:标识设备对应的驱动程序。一般“一个
主设备号对应一个驱动程序” 次设备号:每个驱动程序负责管理它所驱动的几个
硬件实例,这些硬件实例则由次设备号来表示。同 一驱动下的实例编号,用于确定设备文件所指的设 备。 可通过ls –l “设备文件名”命令查看设备的主次设 备号,以及设备的类型。
Gcc的语法扩展,使得可以定义该结构体: struct file_operations fops = {
read: device_read, write: device_write, open: device_open, release: device_release };
没有显示声明的结构体成员都被gcc初始化为NULL。
设备驱动概述
设备由两部分组成,一个是被称为控制器的电器部分, 另一个是机械部分。
一组寄存器组被赋予到各个控制器。I/O端口包含4组寄 存器,即状态寄存器,控制寄存器,数据输入寄存器, 数据输出寄存器。
状态寄存器拥有可以被CPU读取的(状态)位,用来 指示当前命 令是否执行完毕,或者字节是否可以被读出或写入,以及任何 错误提示。