文章目录
udev与mdev
配置mdev热插拔
常用接口
class_create函数
class_destroy函数
device_create函数
device_destroy函数
驱动中的修改
点击下方阅读原文可访问文中超链接
在之前的内容中,执行应用程序之前,都要手动使用mknod
命令来创建设备节点,这种方法非常的不方便,实际上现在的内核已经提供了一些接口,加上一个用户空间程序就可以实现自动删除与自动创建。
udev与mdev
引用维基百科的一段描述:
udev 是Linux kernel 2.6系列的设备管理器。它主要的功能是管理/dev目录底下的设备节点。它同时也是用来接替devfs及hotplug的功能,这意味着它要在添加/删除硬件时处理/dev目录以及所有用户空间的行为,包括加载firmware时。
udev
是一个用户空间程序,一般用在PC机上,而在嵌入式系统中常用简化版的mdev
来替代,在使用busybox
制作根文件系统时,里面就有mdev
这个应用程序(需要在配置中勾选),位于/sbin/mdev
。
配置mdev热插拔
在根文件系统中的/etc/init.d/rcS
文件中添加如下的内容:
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
常用接口
位于头文件:include\linux\device.h
class_create函数
此函数用以创建设备类,会在/sys/class/
目录下生成对应的设备类,准确的说它应该是一个宏定义,原型如下:
#define class_create(owner, name) \
({ \
static struct lock_class_key __key; \
__class_create(owner, name, &__key); \
})
class_destroy函数
此函数用以销毁设备类。
void class_destroy(struct class *cls);
device_create函数
此函数用以创建一个设备,也就对应了/dev/
目录下的一个设备节点。
struct device *device_create(struct class *cls, struct device *parent,
dev_t devt, void *drvdata,
const char *fmt, ...);
device_destroy函数
此函数用以销毁对应的设备。
void device_destroy(struct class *cls, dev_t devt);
驱动中的修改
在驱动中还需要使用相应的接口来告知内核此驱动的信息,这样内核才能将信息传递给应用层的mdev
程序来创建和删除设备节点。
static dev_t devno;
static struct class *test_char_dev_class;
static int __init test_init(void)
{
/*省略注册字符设备步骤*/
/*创建设备类*/
test_char_dev_class = class_create(THIS_MODULE,"test_char_dev_class");
/*创建设备*/
device_create(test_char_dev_class,NULL,devno,NULL,"test_char_dev");
return 0;
}
static void __exit test_exit(void)
{
/*销毁设备*/
device_destroy(test_char_dev_class,devno);
/*销毁设备类*/
class_destroy(test_char_dev_class);
/*省略字符设备的注销步骤*/
}
完成以上的操作后,每次装载完驱动就可以不用再手动使用mknod
命令来创建设备节点了,卸载驱动后对应的设备节点也会自动删除。
测试源码获取:点我