一、确定主设备号
(1)可以让内核自己分配
Linux-5.4/include/linux/fs.h
static inline int register_chrdev(unsigned int major, const char *name, const struct file_operations *fop![](/i/l/?n=22&i=blog/2681359/202209/2681359-20220918172102981-761480382.png)
其中将主设备号设置为0,即可让内核自动分配主设备号
二、定义自己的file_operations结构体,并实现里面对应的函数
/home/user3/lifeng/Linux-5.4/include/linux/fs.h
struct file_operations 通常根据,fs.h中的成员来实现.owner、open、read、write![](/i/l/?n=22&i=blog/2681359/202209/2681359-20220918171723519-749731715.png)
三、将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的就是此设备![](/i/l/?n=22&i=blog/2681359/202209/2681359-20220918172901965-294987857.png)