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 menuconfig
General 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
  1. 配置busybox
make menuconfig
Linux 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
  1. 系统启动时
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> :八进制表示的设备属性
  1. 执行脚本格式
<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 devices
full 0:0 0666
null 0:0 0666
ptmx 0:0 0666
random 0:0 0666
tty 0:0 0666
zero 0:0 0666 # console devices
tty[0-9]* 0:5 0660
vc/[0-9]* 0:5 0660 # serial port devices
s3c2410_serial0 0:5 0666 =ttySAC0
s3c2410_serial1 0:5 0666 =ttySAC1
s3c2410_serial2 0:5 0666 =ttySAC2
s3c2410_serial3 0:5 0666 =ttySAC3 # loop devices
loop[0-9]* 0:0 0660 =loop/ # i2c devices
i2c-0 0:0 0666 =i2c/0
i2c-1 0:0 0666 =i2c/1 # frame buffer devices
fb[0-9] 0:0 0666 # input devices
mice 0:0 0660 =input/
mouse.* 0:0 0660 =input/
event.* 0:0 0660 =input/
ts.* 0:0 0660 =input/ # rtc devices
rtc0 0:0 0644 >rtc
rtc[1-9] 0:0 0644 # misc devices
mmcblk0p1 0:0 0600 =sdcard */bin/hotplug.sh
mmcblk0 0:0 0600 =mmcblk0 */bin/hotplug.sh
sda1 0:0 0600 =udisk * /bin/hotplug.sh
/bin/hotplug.sh
#!/bin/sh case $MDEV in
sda1)
DEVNAME=udisk
MOUNTPOINT=/udisk
;;
mmcblk0p1)
DEVNAME=sdcard
MOUNTPOINT=/sdcard
;;
mmcblk0)
DEVNAME=mmcblk0
MOUNTPOINT=/sdcard
;;
*)
exit 0
;;
esac case $ACTION in
remove)
/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
;;
esac exit 0

Busybox下mdev配置说明的更多相关文章

  1. Busybox下tftp命令使用详解

    http://blog.chinaunix.net/uid-375398-id-1991686.html Busybox下的tftp命令可以用来进行单文件传输.使用的时候,是把电脑作为服务器Serve ...

  2. busybox下mount nfs的命令

    busybox下mount nfs的命令 mount -f nfs -o nolock 10.130.30.2:/nfs/nuc970/rootfs /mnt/test

  3. BusyBox下tftp命令的使用

    一.简介 BusyBox下的tftp是一款应用于嵌入式开发系统上的一款小巧tftp工具,为开发者提供一个tftp服务的使用平台. 通常是,PC开发主机作为服务器(Server),开发系统(板)作为客户 ...

  4. Ubuntu和Busybox下用make menuconfig配置出错解决

    http://blog.csdn.net/satiling/article/details/6965985 # make menuconfig In file included from script ...

  5. 简单理解Busybox下halt/poweroff/reboot实现及区别

    关键词:halt/poweroff/reboot.reboot().SIGUSR1/SIGTERM/SIGUSR2等. 1. busybox下的halt/poweroff/reboot实现 通过app ...

  6. busybox下inittab中runlevel解析

    Order of scripts run in /etc/rc?.d ================================== 0. Overview. All scripts execu ...

  7. BusyBox下ftpget的使用方法

    在终端输入ftpget命令,可以得到以下帮助信息: BusyBox v1.17.4 (2010-12-22 10:59:18 CST) multi-call binary. Usage: ftpget ...

  8. CentOS6.9下NFS配置说明(转载)

    NFS是Network File System的缩写,即网络文件系统.它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录.NFS客户端可以通过挂载(mount)的方式将NFS ...

  9. CentOS6.9下NFS配置说明

    NFS是Network File System的缩写,即网络文件系统.它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录.NFS客户端可以通过挂载(mount)的方式将NFS ...

随机推荐

  1. Qt Style Sheet实践(一):按钮及关联菜单

    导读 正如web前端开发中CSS(Cascade Style Sheet)的作用一样,Qt开发中也可以使用修改版的QSS将逻辑业务和用户界面进行隔离.这样,美工设计人员和逻辑实现者可以各司其职而不受干 ...

  2. 在GridView列表中使用图片显示记录是否包含附件

    在我的前面很多文章中,都介绍过通用附件模块的管理,本篇随笔主要介绍在一些应用模块中的列表展示中,包含附件的记录,在GridView列表界面中使用图标来快速显示是否有附件的情况. 1.通用附件模块的应用 ...

  3. 重大发现Discuz DB层跨库映射关系表名前缀BUG

    本文更新:http://www.cnblogs.com/x3d/p/3916198.html 场景: 在Discuz中创建Table模型,但该Table所在库与Discuz不在同一个库. Discuz ...

  4. POJ 3761 Bubble Sort 快速幂取模+组合数学

    转载于:http://www.cnblogs.com/767355675hutaishi/p/3873770.html 题目大意:众所周知冒泡排序算法多数情况下不能只扫描一遍就结束排序,而是要扫描好几 ...

  5. Represent code in math equations

    Introduce The article shows a way to use math equations to represent code's logical. Key ideas logic ...

  6. Java生成公私钥对

    public static synchronized KeyPair generateRSAKeyPair(int keysize, BigInteger publicExponent) { try ...

  7. galera cluster DDL节点间状态不一致的问题

    近期某个系统中的galera cluseter环境发生A DDL操作后,B节点未同步的情况,同时B节点的errorlog中有如下警告信息: 2016-07-23 17:31:32 18920 [War ...

  8. LinQ实战学习笔记(三) 序列,查询操作符,查询表达式,表达式树

    序列 延迟查询执行 查询操作符 查询表达式 表达式树 (一) 序列 先上一段代码, 这段代码使用扩展方法实现下面的要求: 取进程列表,进行过滤(取大于10M的进程) 列表进行排序(按内存占用) 只保留 ...

  9. jQuery实现图片伦播效果(淡入淡出+左右切换)

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  10. SharePoint 2013 新功能探索 之 列表等级设置

    一.列表等级及赞功能 ,在SharePoint 2010 中,对列表的等级设定,需要一定时间才能看到,现在可以实时同步,评分人数也能显示出来 等级分为两类 赞和星级评定