虫虫首页|资源下载|资源专辑|精品软件
登录|注册

您现在的位置是:首页 > 技术阅读 >  linux驱动开发(3、自动创建设备节点)

linux驱动开发(3、自动创建设备节点)

时间:2024-06-01

文章目录

  • 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命令来创建设备节点了,卸载驱动后对应的设备节点也会自动删除。

测试源码获取:点我