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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)