新字符设备驱动中自动创建设备节点实现

2024-01-02 07:46:34

一.? 简介

上一篇文章基本完成了新字符设备驱动框架代码。文章地址如下:

向新字符设备驱动代码框架中添加Led功能函数-CSDN博客

本文在此基础上,实现自动创建设备节点的功能。

二.? 自动创建设备节点

在前面的 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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。