`
tomhibolu
  • 浏览: 1406939 次
文章分类
社区版块
存档分类
最新评论

Linux设备管理文件系统,mdev,热插拔

 
阅读更多

努力成为linux kernel hacker的人李万鹏原创作品,为梦而战。转载请标明出处

http://blog.csdn.net/woshixingaaa/archive/2011/05/15/6422862.aspx

每次写驱动都要手动创建设备文件过于麻烦,使用设备管理文件系统则方便很多。在2.6的内核以前一直使用的是devfs,但是它存在许多缺陷。它创建了大量的设备文件,其实这些设备更本不存在。而且设备与设备文件的映射具有不确定性,比如U盘即可能对应sda,又可能对应sdb。没有足够的主/辅设备号。2.6之后的内核引入了sysfs文件系统,它挂载在/sys上,配合udev使用,可以很好的完成devfs的功能,并弥补了那些缺点。(这里说一下,当今内核已经使用netlink了,由于我才疏学浅这里暂不介绍)。
udev是用户空间的一个应用程序,在嵌入式中用的是mdev,mdev在busybox中。mdev是udev的精简版。
首先在busybox中添加支持mdev的选项:


最后修改/etc/fstab:

然后修改/etc/init.d/rcS:

执行mdev -s :以‘-s’为参数调用位于 /sbin目录写的mdev(其实是个链接,作用是传递参数给/bin目录下的busybox程序并调用它),mdev扫描 /sys/class 和 /sys/block 中所有的类设备目录,如果在目录中含有名为“dev”的文件,且文件中包含的是设备号,则mdev就利用这些信息为这个设备在/dev 下创建设备节点文件。一般只在启动时才执行一次 “mdev -s”。
热插拔事件:由于启动时运行了命 令:echo /sbin/mdev > /proc/sys/kernel/hotplug ,那么当有热插拔事件产生时,内核就会调用位于 /sbin目录的mdev。这时mdev通过环境变量中的 ACTION 和 DEVPATH,来确定此次热插拔事件的动作以及影响了/sys中的那个目录。接着会看看这个目录中是否“dev”的属性文件,如果有就利用这些信息为 这个设备在/dev 下创建设备节点文件

重新打包文件系统,这样/sys目录,/dev目录就有东西了。

如下是我的PWM驱动程序的初始化函数。调用create_class在/sys目录下创建类,调用device_create在/dev目录下创建设备节点。
下面是create_class的原型:

class_destroy的原型如下:

device_create的原型如下:

device_destroy的原型如下:

现在简单说一下mdev的基本原理:
执行mdev -s
以'-s'为参数调用位于/sbin目录下的mdev(其实是个链接,作用是传递参数给/bin目录下的busybox程序并调用它),mdev扫描/sys/class和/sys/block中所有的类设备目录,如果在目录中含有名为“dev”的文件,且文件中包含的是设备号,则mdev就利用这些为这个设备在/dev下创建设备节点文件。一般只在启动时才执行一次“mdev -s”;
热插拔事件:由于启动运行了命令:echo /sbin/mdev > proc/sys/kernel/hotplug,那么当有热插拔事件产生时,内核就会调用位于/sbin目录的mdev。这时mdev通过环境变量中的ACTION和DEVPATH,(这两个变量是系统自带的)来确定此次热插拔事件的动作以及影响了/sys中的那个目录。接着会看看这个目录中是否有"dev"的属性文件,如果有就利用这些信息为这个设备在/dev下创建设备节点文件。

下边是我写的PWM程序:

用户程序:

分享到:
评论

相关推荐

    Linux设备驱动程序学习(15)-Linux设备模型(热插拔、mdev 与 firmware) - Linux设备驱动程序

    本节我们将深入探讨Linux设备模型中的关键概念:热插拔、mdev(迷你设备)以及firmware(固件)在设备驱动程序中的应用。 热插拔(Hotplug)是指在系统运行时,可以动态添加或移除硬件设备的能力。在Linux中,热插...

    使用mdev来实现arm linux自动识别挂载sd卡,支持热插拔

    "使用mdev实现arm linux自动识别挂载sd卡,支持热插拔" mdev是一个Device Manager for Linux,它可以自动识别和挂载设备,包括SD卡和U盘。下面是使用mdev实现arm linux自动识别和挂载sd卡的详细步骤: 首先,在...

    基于Linux的USB摄像头热插拔状态检测

    总结来说,通过使用udev规则和自定义脚本,我们可以轻松地在Linux系统中实现USB摄像头的热插拔状态检测,这对于监控设备状态、自动化应用或者其他需要实时响应设备变化的场景非常有用。同时,这个方法也适用于其他...

    busybox 中的mdev.txt中文版.pdf

    在使用 mdev 之前,需要挂载 /sys 文件系统,并启用热插拔支持(hotplugging)。在 init 脚本中,需要执行以下命令来启用 mdev: mount -t sysfs sysfs /sys echo /bin/mdev > /proc/sys/kernel/hotplug mdev -s ...

    mdev入门[参考].pdf

    但是,mdev也需要sysfs支持,并且需要在内核中启用热插拔支持。 结论 ---- mdev是Linux系统中的一种设备管理工具,主要用于设备节点的管理。mdev有两个主要的应用:初始化对象和动态更新。mdev的基本使用方法是...

    linux在TQ2440上移植4--yaffs2文件系统制作

    当系统启动或设备热插拔时,mdev会根据`/etc/mdev.conf`的配置自动创建设备文件。配置 BusyBox时,应勾选对mdev的支持,并在该配置文件中定义设备规则。 4. **构建文件系统**: 制作YAFFS2文件系统需要先编译 ...

    根文件系统_rcS

    综上所述,`rcS`脚本在根文件系统的初始化过程中扮演着核心角色,它不仅负责设置基础的运行环境,还通过挂载关键文件系统、创建设备节点以及响应热插拔事件,确保了系统的正常运行和对外部设备的有效管理。...

    busybox 中的mdev的使用说明中文版

    ### Busybox 中的mdev使用说明中文版 ...通过这种方式,可以根据具体的项目需求灵活地调整设备节点的所有权和权限,使得mdev不仅能够在嵌入式Linux环境中高效地管理设备节点,还能满足各种安全性和使用场景的需求。

    迅为44186818开发板实现最小Linux系统自动挂载SDTF卡U盘等存储设备

    迅为4418/6818开发板提供了一种方法来实现这一功能,主要涉及内核配置、Busybox配置以及添加热插拔事件响应脚本。以下是详细步骤: 首先,配置内核是关键。确保内核支持USB大容量存储设备,这包括选择并启用相关的...

    Linux-2[1].6-device-model.rar_linux 设备模型

    7. **热插拔和电源管理**:Linux 2.6内核的设备模型支持热插拔,即设备可以在系统运行时插入或移除。此外,它还集成了电源管理功能,允许系统在不使用设备时节省能源。 8. **设备属性和属性匹配**:设备模型允许...

    jffs2根文件系统

    - 启用mdev支持,以便于构造`/dev`目录,并支持热插拔设备。 - 启用mount、umount命令,并让mount命令支持NFS网络系统。 6. **Networking Utilities**: - 启用ifconfig命令及其所有选项。 完成以上配置后,...

    Devfs在Linux上的架构介绍(二).pdf

    udev现在是大多数现代Linux发行版的标准设备管理系统,它可以处理热插拔设备,并根据设备属性创建和管理设备节点。 总结起来,Devfs是一种在Linux内核中用于设备管理的文件系统,它通过提供设备命名空间来简化设备...

    linux挂载 U 盘

    可以使用文本编辑器打开并修改此文件,添加一行`/sbin/mdev > /proc/sys/kernel/hotplug`,这行命令的作用是通知内核硬件热插拔事件。 2. **编辑/etc/modprobe.d/blacklist.conf**:该文件用于禁止某些模块加载,...

    利用udev处理U盘信息,得到U盘路径等

    udev是Linux下的设备管理器,它取代了早期的devfs和mdev,负责在系统运行时动态管理/dev目录下的设备节点。udev通过监听kernel的热插拔事件,如USB设备的插入和移除,来创建、更新或删除设备节点。当udev接收到USB...

Global site tag (gtag.js) - Google Analytics