驱动中相关结构与函数的含义:

1,模块所有者指针,一般初始化为 THIS_MODULES 。

2,用来修改文件当前的读写位置,返回新位置。Loff_t 为一个“长偏移量”。

3,同步读取函数:读取成功返回读取的字节数。设置为 NULL, 调用时返回 -EINVAL 。

  • 参1:要读的文件。
  • 参2:是将文件读到哪里去。
  • 参3:要读文件多少内容。Size_t 是 unsigned int .
  • 参4:用来修改文件当前的读写位置,返回新位置。Loff_t 为一个“长偏移量”。(是指这次对文件进行操作的起
    始位置。)
    struct file 中的f_pos是最后一次文件操作以后的当前读写位置.

4,异步读取操作,为 NULL 时全部通过 read 处理。

5,同步写入函数。

6,异步写入操作。

7,仅用于读取目录,对于设备文件,该字段为 NULL 。

8,判断目前是否可以对设备进行读写操作。字段为空时,设备会被认为既可读也可写。

9,向设备发送 IO 控制命令的函数,不设置入口点。返回 -ENOTTY。

10,不使用 BLK 的文件系统,将使用此种函数指针代替 ioctl 。

11,在64位系统上,32位的 ioctl 调用,将使用此函数指针代替。

12,用于请求将设备内存映射到进程地址空间。如果无此方法,将访问 -ENODEV

注册 file_operations 结构体到内核:

参1:设备文件的主设备号,为“0”时让系统自动分配。这时“register_chrdev()”返回一个int类型的主设备号。
这个返回值要接收,因为在“出口函数”中,要注销这个注册到内核中的设备的操作结构时,要提供两个参数:一个
主设备号,一个为设备名。

参2:设备名字,可以在“/dev”目录下看到这个设备节点名。
参3:要注册到内核的 file_operations 结构体。

注销注册到内核中的设备:

参1:这个设备的主设备号。(主设备号代表着这类设备。)
参2:这个设备在系统中的名字。如 /dev/ttyUSB* .

struct class
设备类struct class是一个设备的高级视图,它抽象出低级的实现细节。例如,驱动可以见到一个SCSI磁盘或者一个ATA磁盘,在类的级别,他们都是磁盘,类允许用户空间基于它们作什么来使用设备,而不是它们如何被连接或者它们如何工作。
struct class{
const char *name; //类名称
struct module *owner; //对应模块
struct subsystem subsys; //对应的subsystem;
struct list_head children; //class_device链表
struct list_head interfaces; //class_interface链表
struct semaphore sem; //用于同步的信号锁
struct class_attribute *class_attrs; //类属性
int (*uevent)(struct class_device *dev,char **envp,int num_envp,
char *buffer,int buffer_size); //事件
void (*release)(struct class_device *dev); //释放类设备
void (*class_release)(struct class *class); //释放类
}

在/sys/class/下创建类目录:

参1:
参2:

在设备类下创建具体的设备:

参1:设备类。
参2:父设备。没有时,直接为NULL。
参3:主设备号。
参4:LINUX 中的任一设备在设备模型中都由一个 device 对象描述。可以直接用 NULL。
参5:在/dev目录中的设备节点名字。Mdev 应用程序会根据 class 和 类下的设备创建 /dev 下相应的设备节点。

参1:要注册的设备类。
返回值:

参1:要注销的设备类。
返回值:无

用“request_irq()”注册了中断后,当设备关闭时,要释放这些中断,则要在 file_operations结构中定义一个注销的操作函数。