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
posted @   我是李校长  阅读(58)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示