前言:
参考自:正点原子和百度百科
我们使用新字符设备驱动,可以让内核自动分配主设备号。但是,设备节点依旧需要自己去手动创建 eg:mknod /dev/newled c 249 0
现在,我们使用另外一种方法,实现设备节点的主动创建!
我们要实现的目标是:
当我们在终端输入modprobe以后,就是自动的在/dev/目录下面创建设备节点。
1、历史
udev 是Linux kernel 2.6系列的设备管理器。它主要的功能是管理/dev目录底下的设备节点。udev是硬件平台无关的,属于user space的进程,它脱离驱动层的关联而建立在操作系统之上,基于这种设计实现,我们可以随时修改及删除/dev下的设备文件名称和指向。
Linux 传统上使用静态设备创建方法,因此大量设备节点在 /dev 下创建(有时上千个),而不管相应的硬件设备是否真正存在。通常这由一个MAKEDEV脚本实现,这个脚本包含了通过世界上(有幽默意味,注)每一个可能存在的设备相关的主设备号和次设备号对mknod程序的调用。采用udev的方法,只有被内核检测到的设备才会获取为它们创建的设备节点。因为这些设备节点在每次系统启动时被自动创建,他们会被贮存在ramfs(一个内存中的文件系统,不占用任何磁盘空间).设备节点不需要大量磁盘空间,因此它使用的内存可以忽略。
2 udev 和mdev
udev 是一个用户程序,在 Linux 下通过 udev 来实现设备文件的创建与删除, udev 可以检测系统中硬件设备状态,可以根据系统中硬件设备状态来创建或者删除设备文件。比如使用modprobe 命令成功加载驱动模块以后就自动在/dev 目录下创建对应的设备节点文件,使用rmmod 命令卸载驱动模块以后就删除掉/dev 目录下的设备节点文件。 使用 busybox 构建根文件系统的时候, busybox 会创建一个 udev 的简化版本—mdev,所以在嵌入式 Linux 中我们使用mdev 来实现设备节点文件的自动创建与删除, Linux 系统中的热插拔事件也由 mdev 管理。

本文介绍了Linux系统中如何自动创建设备节点,重点讲解了udev和mdev在设备管理中的作用,以及如何在驱动程序中利用class_create和device_create函数在加载驱动时动态生成设备节点。此外,还提到了在卸载驱动时如何删除相应设备节点的机制。
最低0.47元/天 解锁文章
444

被折叠的 条评论
为什么被折叠?



