文档章节

Busybox下mdev配置说明

PYChen
 PYChen
发布于 2016/10/28 21:42
字数 1071
阅读 36
收藏 0

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。这两个变量可以在脚本中使用。

脚本实例

本脚本实例实现了 U 盘和 SD 卡的在根目录下的自动挂载功能,脚本来自 FriendlyARM 的 mini2440 开发板附带光盘中的资料。当 mdev 检测到 sda1 或 mmcblk0 时,自动在/dev目录下生成 sda1 和 mmcblk0 设备文件,然后执行/bin/hotplug.sh脚本,自动挂载设备。

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

参考资料

  1. Busybox
  2. FriendlyARM-mini2440开发板资料

© 著作权归作者所有

共有 人打赏支持
PYChen
粉丝 0
博文 14
码字总数 11100
作品 0
哈尔滨
程序员
[2]-使用busybox-1.17.2制作文件系统

使用busybox-1.17.2来制作文件系统 交叉编译工具:arm-linux-gcc-3.4.1 (已经导入到PATH环境变量中) 以下是具体步骤: 1.从busybox官方网站上下载busybox1.17.2 2.配置Busybox 2-1.修改Mak...

中华大吉
2011/09/27
0
0
busybox下mdev的使用以及mdev.conf的规则配置

busybox下mdev的使用以及mdev.conf的规则配置 http://www.phpfans.net/article/htmls/200908/Mjc2OTcx.html 作者: qwdu 时间: 2009-08-12 mdev是busybox下精简版的udev,适合在嵌入式系统下管...

DB_Terrill
2014/05/23
0
0
Docker的save和export命令的区别

我最近在玩Docker,一种应用程序容器和Linux的虚拟技术。它太酷了,创建Docker镜像和容器只需要几分钟。所有的工作都是开箱即用的。 在结束我一天的工作之前,我希望能保存下我的工作。但我在...

翟志军
2014/04/22
0
5
如何使用busybox编译和生成最简linux根文件系统(rootfs)

继前几天对uboot和内核编译进行了初步了解之后,昨天开始研究如何制作rootfs根文件系统。昨晚对busybox这个工具有了初步的了解,今天继续深入研究,终于成功的制作出了一套完整可用的最简lin...

guoyiyan1987
05/08
0
0
【Docker仓库】通过docker的registry镜像创建私有仓库

【前置条件】 docker主机1:ip为192.168.1.101,docker环境已下载镜像registry:latest或连网 docker主机2:ip为192.168.1.102,与docker主机1网络连通 步骤1:docker主机1,创建私有仓库 $s...

51毛豆先生
06/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

记一次winserver2003系统,https无法访问,内存占用持续增加,解决办法

先交代一下环境: win server2003系统,系统装在hyper-v虚拟机里 大概2016年底的镜像,距离今天两年左右 病症:大概9月10号左右用这个镜像还可以访问https,但是今天用这个镜像新装的系统,就...

阳阳露
26分钟前
2
0
jdbc连接orcal数据库

import java.sql.Connection;  import java.sql.DriverManager;  import java.sql.ResultSet;  import java.sql.SQLException;  import java.sql.Statement;    ......

小橙子的曼曼
51分钟前
0
0
Vue学习资料

一直以为Vue是依赖nodejs的。 作为前端也可以耦合性就很低了。 //npm包管理器 进行管理npm install vue//初始化一个项目vue init//本地调试npm run dev//编译完成 ...

大灰狼wow
今天
1
0
fullcalendar重新渲染

uiCalendarConfig.calendars.lesson_calendar.fullCalendar('removeEvents');var ym = uiCalendarConfig.calendars.lesson_calendar.fullCalendar('getView').title;$scope.get_lesson(y......

人来疯啊
今天
1
0
多渠道打包总结

https://www.jianshu.com/p/2130db7584c8 https://blog.csdn.net/u011153817/article/details/50772496...

塔塔米
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部