新字符设备驱动中自动创建设备节点实现
2024-01-02 07:46:34
一.? 简介
上一篇文章基本完成了新字符设备驱动框架代码。文章地址如下:
本文在此基础上,实现自动创建设备节点的功能。
二.? 自动创建设备节点
在前面的
Linux
驱动实验中,当我们使用
modprobe
加载驱动模块以后,还需要使用命令
“
mknod
”手动创建设备节点。
本节就来讲解一下,如何实现自动创建设备节点,在驱动中实现
自动创建设备节点的功能以后,使用
modprobe
命令加载驱动模块后,就会自动在
/dev
目录下
创建对应的设备文件。
1. mdev 机制
udev
是一个用户程序,在
Linux
下通过
udev
来实现设备文件的创建与删除,
udev
可以检测系统中硬件设备状态,可以根据系统中硬件设备状态来创建或者删除设备文件。
例如,使用
modprobe
命令成功加载驱动模块以后,就自动在
/dev
目录下创建对应的设备节点文件。
使用
rmmod
命令卸载驱动模块以后,就删除掉
/dev
目录下的设备节点文件。
使用
busybox
构建根文件
系统的时候,
busybox
会创建一个
udev
的简化版本—
mdev
,所以,在嵌入式
Linux 中我们使用
mdev
来实现设备节点文件的自动创建与删除,
Linux
系统中的热插拔事件也由
mdev
管理。
在
/etc/init.d/rcS
文件中如下语句:
echo /sbin/mdev > /proc/sys/kernel/hotplug
开发板上电后,可以通过 "cat /etc/init.d/rcS" 命令进行查看。
上述命令设置热插拔事件由
mdev
来管理,关于
udev
或
mdev
更加详细的工作原理这里就不详细探讨了,我们重点来学习一下如何通过
mdev
来实现设备文件节点的自动创建与删除。
2.? 自动创建设备节点方法:创建和删除类
自动创建设备节点的工作是在驱动程序的入口函数中完成的,一般在
cdev_add()
函数后面添加自动创建设备节点相关代码。
首先要创建一个
class
类,
class
是个结构体,定义在文件 include/linux/device.h
里面。
class_create
是类创建函数,
class_create
是个宏定义,内容如下:
#define class_create(owner, name) \
({ \
static struct lock_class_key __key; \
__class_create(owner, name, &__key); \
})
extern struct class * __must_check __class_create(struct module *owner,
const char *name,
struct lock_class_key *key);
三.? 代码实现
文章来源:https://blog.csdn.net/wojiaxiaohuang2014/article/details/135330697
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!