mdev/udev使用介绍

介绍

当insmod驱动时,驱动里调用class_create和device_create,最终调用到device_add,device_add会调用到kobject/kset机制,最终会在sysfs下生成节点dev。如/sys/class/tty/ttyS0/dev, 同时会去调用通过 CONFIG_UEVENT_HELPER_PATH="/sbin/mdev" 或者 echo /sbin/mdev > /sys/kernel/uevent_helper 或者 echo /sbin/mdev > /proc/sys/kernel/hotplug 指定的应用。

mdev是busybox提供的一个工具,相当于简化版的udev。通过描述sysfs下的dev节点,在系统启动和热插拔或动态加载驱动程序时,自动创建设备节点。文件系统中的/dev目录下的设备节点都是由mdev创建的。 实际上看Busybox的代码,mdev最终是用mknod函数在/dev下创建设备节点。

用法

编译Busybox需要打开对mdev的支持。 Linux System Utilities ---> mdev
Support /etc/mdev.conf Support command execution at device addition/removal 使用mdev之前要满足下面的条件: mount -t proc proc /proc mount -t sysfs sysfs /sys (必要) mount -t tmpfs -o size=64k,mode=0755 tmpfs /dev (必要)//有些地方看到是:mount -t tmpfs mdev /dev mkdir /dev/pts
mount -t devpts devpts /dev/pts 实际操作: echo /sbin/mdev > /proc/sys/kernel/hotplug /sbin/mdev -s //扫描/sys/class目录下的所有文件,如果发现dev文件,将按照/etc/mdev.conf文件进行相应的配置。如果没有配置文件,那么直接创建设备节点。

mdev.conf

: [@|$|* ]

特殊字符的意义如下: @ 在创建设备节点后运行命令。 $ 在删除设备节点前运行命令。 * 在创建设备节点后和删除设备节点前都运行命令。

udev的使用方法:

下载编译udev

http://www.us.kernel.org/pub/linux/utils/kernel/hotplug/udev-100.tar.bz2 tar xjf udev-100.tar.bz2 ,cd udev-100 编辑Makefile,查找CROSS_COMPILE,修改CROSS_COMPILE ?= arm-linux- ,然后make。 只需要udevd和udevstart。

用法:

在/etc/init.d/rcS增加: /sbin/udevd --daemon (同理,udev也依赖sysfs和devpts,需要先mount这两个。) /sbin/udevstart 在rootfs/etc/udev下建立一个rules.d目录,生成一个空的配置文件touch etc/udev/rules.d/udev.conf。udevd和udevstart会自动分析这个文件。