01-字符设备驱动基本框架
一、确定主设备号
(1)可以让内核自己分配
Linux-5.4/include/linux/fs.h
static inline int register_chrdev(unsigned int major,  const char *name,  const struct file_operations *fop
 
 其中将主设备号设置为0,即可让内核自动分配主设备号
二、定义自己的file_operations结构体,并实现里面对应的函数
/home/user3/lifeng/Linux-5.4/include/linux/fs.h
struct file_operations
通常根据,fs.h中的成员来实现.owner、open、read、write
 
三、将file_operation结构体注册到内核
Linux-5.4/include/linux/fs.h
static inline int register_chrdev(unsigned int major, const char *name,  const struct file_operations *fops)

四、实现驱动入口
1、module_init(xxx);
其中xxx代表,真正的函数
2、static int __init xxx(void)
其他:查看内核sound.c还看到一个函数,没有使用module_init(xxx)后续补充什么意思
subsys_initcall(alsa_sound_init);
五、实现驱动出口
1、module_exit(xxx);
其中xxx代表,真正的函数
2、 static void __exit xxx(void)
需要注意入口函数和出口函数的返回值有所不同
六、完善提供的信息
1、GPL开源声明
MODULE_LICENSE("GPL");
2、class_create、device_create
初步理解:
(1)class_create:会创建一个设备类的集合,在/sys/class目录中
(2)device_create:用于创建设备,在/dev目录下。app open的就是此设备

写的比较清楚的一个文档:
https://blog.csdn.net/hwx1546/article/details/123053496
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号