文档章节

Busybox下mdev配置说明

PYChen
 PYChen
发布于 2016/10/28 21:42
字数 1071
阅读 144
收藏 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
1K
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
115
0
android系统启动之后自动执行程序

android启动之后,如何实现insmod一个ko驱动,然后再执行我的一个应用程序? 我在init.rc中做了如下修改,可是不起作用: 1. chmod 777 /data/busybox 2. insmod /data/t.ko 3. exec /data/bu...

yang
2012/05/26
1K
6
跟我一步一步制作一个基本的linux启动盘

原创文章,转载请注明出处,谢谢! 作者:清林,博客名:飞空静渡 这是一篇自己很早写的文章了,当时根据网上的一些教程一步一步制作,本来想把自己做的过程放到网上,可以西一值忙于公司项目...

长平狐
2013/01/11
3.1K
0
Alpine Linux 2.1.0 发布

Alpine Linux 是一个社区开发的面向安全应用的轻量级 Linux 发行版,适合用来做路由器、防火墙、VPNs、VoIP 盒子 以及服务器的操作系统,基于 uClibc 和 Busybox。 Changes: This is a stabl...

红薯
2010/11/03
231
0

没有更多内容

加载失败,请刷新页面

加载更多

mysql-connector-java升级到8.0后保存时间到数据库出现了时差

在一个新项目中用到了新版的mysql jdbc 驱动 <dependency>     <groupId>mysql</groupId>     <artifactId>mysql-connector-java</artifactId>     <version>8.0.18</version> ......

ValSong
23分钟前
4
0
Spring Boot 如何部署到 Linux 中的服务

打包完成后的 Spring Boot 程序如何部署到 Linux 上的服务? 你可以参考官方的有关部署 Spring Boot 为 Linux 服务的文档。 文档链接如下: https://docs.ossez.com/spring-boot-docs/docs/r...

honeymoose
25分钟前
4
0
Spring Boot 2 实战:使用 Spring Boot Admin 监控你的应用

1. 前言 生产上对 Web 应用 的监控是十分必要的。我们可以近乎实时来对应用的健康、性能等其他指标进行监控来及时应对一些突发情况。避免一些故障的发生。对于 Spring Boot 应用来说我们可以...

码农小胖哥
今天
6
0
ZetCode 教程翻译计划正式启动 | ApacheCN

原文:ZetCode 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远。 ApacheCN 学习资源 贡献指南 本项目需要校对,欢迎大家提交 Pull Request。 ...

ApacheCN_飞龙
今天
4
0
CSS定位

CSS定位 relative相对定位 absolute绝对定位 fixed和sticky及zIndex relative相对定位 position特性:css position属性用于指定一个元素在文档中的定位方式。top、right、bottom、left属性则...

studywin
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部