作为初学者自己总结了一下一个简单的linux字符设备驱动程序中需要学习的内容
一.字符设备驱动程序的组成:
1.头文件:头文件部分包含进数据结构及内核函数需要用到的头文件。
2.file_operations结构体变量:声明了驱动程序的所有接口函数。
3.接口函数:包含字符设备驱动程序与内核及应用程序交互的read()函数,write()函数,open()函数,ioctl()函数,release()函数的实现。
4.加载函数:用于加载驱动程序至内核。
5.卸载函数:用于从内核卸载驱动程序。
二.字符设备驱动三个需要用到的结构体
1.struct cdev 描述字符设备
struct cdev{
struct kobject kobj; //内嵌的kobject对象
struct module *owener; //所属模块指针
const struct file_operations *ops; //指向 file_operation 结构体的指针
struct list_head list;
dev_t dev; //设备号
unsigned int count; //设备号范围
}
2.struct file_operation 虚拟文件系统与硬件驱动的接口
struct file_operations {
struct module *owner;
loff_t(*llseek) (struct file *, loff_t, int);
ssize_t(*read) (struct file *, char __user *, size_t, loff_t *);
ssize_t(*aio_read) (struct kiocb *, char __user *, size_t, loff_t);
ssize_t(*write) (struct file *, const char __user *, size_t, loff_t *);
ssize_t(*aio_write) (struct kiocb *, const char __user *, size_t,