第十一节、自动创建设备节点
本节用于介绍如何自动创建设备节点
在上面的Linux驱动实验中,当我们通过insmod命令加载模块后,还需要通过mknod命令来手动创建设备节点,这样使用起来太麻烦了,并且不可能每个设备都去这样操作,Linux系统的存在就是为了方便使用。所以我们来看一下如何实现自动创建设备节点,当加载模块时,在/dev目录下自动创建相应的设备文件。
1、怎么自动创建一个设备节点?
在嵌入式Linux中使用mdev来实现设备节点文件的自动创建和删除。
2、什么是mdev?
mdev是udev的简化版本,是busybox中所带的程序,最适合用在嵌入式系统。
3、什么是udev?
udev是一种工具,它能够根据系统中的硬件设备的状态动态更新设备文件,包括设备文件的创建,删除等。设备文件通常放在/dev目录下。使用udev后,在/dev目录下就只包含系统中真正存在的设备。udev 一般用在PC上的linux中,相对mdev 来说要复杂些。
4、怎么自动创建设备节点?
自动创建设备节点分为俩个步骤:
步骤一:使用class_create函数创建一个class的类。
步骤二:使用device_create函数在我们创建的类下面创建一个设备。
5、创建和删除类函数
在Linux驱动程序中一般通过两个函数来完成设备节点的创建和删除。
首先要创建一个class 类结构体
文件位置路径:include/linux/device.h
1 | struct class { |
class_create 是类创建函数,class create是个宏定义
文件位置路径:include/linux/device.h
1 |
|
实际上这个函数调用的是__class_create函数
文件位置路径:drivers/base/class.c
1 | struct class *__class_create(struct module *owner, const char *name, |
创建类的成功之后,我们可以在文件系统的/sys/class下面看到叫name名字的类
卸载驱动程序的时候需要删除掉类,类删除函数为class_destroy
文件位置路径:include/linux/device.h
1 | extern void class_destroy(struct class *cls); |
6、创建和删除设备函数
当使用上节的函数创建完成一个类后,使用device_create函数在这个类下创建一个设备。
文件位置路径:include/linux/device.h
1 | struct device *device_create(struct class *cls, struct device *parent, |
同样的,卸载驱动的时候需要删除掉创建的设备,设备删除函数为device_destroy,这个函数要写在类注销函数的上面
文件位置路径:include/linux/device.h
1 | extern void device_destroy(struct class *cls, dev_t devt); |