Busybox下mdev配置说明

来源:互联网 发布:上网监管软件 编辑:程序博客网 时间:2024/05/23 23:31

转载地址:https://www.cnblogs.com/OpenShiFt/p/6008562.html

mdev说明

mdev是busybox自带的一个简化版的udev,适合嵌入式应用场合。其具有使用简单的特点。它的作用就是在系统启动热插拔动态加载驱动程序时,自动产生驱动程序所需要的节点文件。在以busybox为基础构建嵌入式linux根文件系统时,使用它时最优的选择。

mdev原理

  1. mdev不加参数时就是利用hotplug机制来决定创建什么样的设备文件。
  2. mdev -s程序通过扫描/sys/class/sys/block中所有的类设备目录,利用这些信息在/dev下创建设备节点。

mdev使用

mdev在使用过程中分为两部分,由于系统启动时mdev需要根据/sys目录下的信息来生成设备节点,因此在使用前需要对系统进行一些配置。mdev同过hotplug机制来创建设备节点是根据/etc/mdev.conf文件来生成设备节点的。

系统设置

在系统执行mdev -s前需要执行如下操作:

  1. 配置内核

    make menuconfigGeneral setup ---->Configure standard kernel features (for small systems) ---->   [*] load all symbols for debugging/ksymoops   [*] Include all symbols in kallsyms   [*] Support for hot-pluggable devices   [*] Enable support for printk
  2. 配置busybox

    make menuconfigLinux System Utilities ---->[*] mdev[*] Support /etc/mdev.conf[*] Support subdirs/symlinks[*] Support regular expressions substitutions when renaming device[*] Support command execution at device addition/removal[*] Support loading of firmwares
  3. 系统启动时

    Vi  /etc/init.d/rcS    mount -t tmpfs tmpfs /dev     mkdir /dev/pts    mount -t devpts devpts /dev/pts    mount -t proc proc /proc     mount -t sysfs sysfs /sys    echo /sbin/mdev>/proc/sys/kernel/hotplug//启动热插拔事件;    mdev –s

    首先挂载/dev/dev/pts/proc/sys文件系统,mdev需要用到这些文件系统。然后告诉系统当有设备热插拔时,使用mdev来处理。最后执行mdev -s来扫描系统中的设备和驱动等。

配置文件/etc/mdev.conf

系统中的hotplug是通过mdev.conf文件来生成设备节点的,该配置文件格式如下:

  1. 基本格式

    <device regex>   <uid>:<gid>  <octal permissions><device regex>       :设备名称,支持正则表达式如hd[a-z][0-9]*等<uid>:<gid>          :用户ID和组ID<octal permissions>  :八进制表示的设备属性
  2. 执行脚本格式

    <device regex>   <uid>:<gid>  <octal permissions> [=|>path] [@|$|*][=|>path]:这个选项可以更改设备节点的命名和路径,如:      <1> =/driver: 可以将设备节点移动到driver目录下      <2> =newname: 可以讲设备节点改为newname命名      <3> >/driver/newname: 可以在/driver目录下创建一个设备节点的链接,并命名为newname[@|$|*]:这个选项当设备匹配成功时,执行指令,这个指令可以是自己编写的脚本。前面的符号含义如下:      <1>@:在设备节点创建完执行      <2>$:在设备节点删除前执行      <3>*:在设备节点创建完和删除前执行此外在mdev成功匹配设备后会设置两个系统变量$MDEV和$ACTION。其中$MDEV用来存放匹配到的设备名,$ACTION用来存放设备插拔状态其值为add和remove。这两个变量可以在脚本中使用。

脚本实例

mdev.conf# system all-writable devicesfull    0:0 0666null    0:0 0666ptmx    0:0 0666random  0:0 0666tty 0:0 0666zero    0:0 0666# console devicestty[0-9]*   0:5 0660vc/[0-9]*   0:5 0660# serial port devicess3c2410_serial0 0:5 0666    =ttySAC0s3c2410_serial1 0:5 0666    =ttySAC1s3c2410_serial2 0:5 0666    =ttySAC2s3c2410_serial3 0:5 0666    =ttySAC3# loop devices loop[0-9]*  0:0 0660    =loop/# i2c devicesi2c-0   0:0 0666    =i2c/0i2c-1   0:0 0666    =i2c/1# frame buffer devicesfb[0-9] 0:0 0666# input devicesmice    0:0 0660    =input/mouse.* 0:0 0660    =input/event.* 0:0 0660    =input/ts.*    0:0 0660    =input/# rtc devicesrtc0    0:0 0644    >rtcrtc[1-9]    0:0 0644# misc devicesmmcblk0p1   0:0 0600    =sdcard */bin/hotplug.shmmcblk0 0:0 0600    =mmcblk0 */bin/hotplug.shsda1    0:0 0600    =udisk * /bin/hotplug.sh
/bin/hotplug.sh#!/bin/shcase $MDEV insda1)    DEVNAME=udisk    MOUNTPOINT=/udisk    ;;mmcblk0p1)    DEVNAME=sdcard    MOUNTPOINT=/sdcard    ;;mmcblk0)    DEVNAME=mmcblk0    MOUNTPOINT=/sdcard     ;;  *)    exit 0    ;;esaccase $ACTION inremove)    /bin/umount $MOUNTPOINT || true    rmdir $MOUNTPOINT >/dev/null 2>&1 || true    ;;*)    /bin/mkdir $MOUNTPOINT > /dev/null 2>&1 || true    /bin/mount -o sync -o noatime -o nodiratime -t vfat /dev/$DEVNAME $MOUNTPOINT > /dev/null 2>&1 || true    ;;esacexit 0