文档章节

Busybox下mdev配置说明

PYChen
 PYChen
发布于 2016/10/28 21:42
字数 1071
阅读 23
收藏 0
点赞 0
评论 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
哈尔滨
程序员
如何使用busybox编译和生成最简linux根文件系统(rootfs)

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

guoyiyan1987 ⋅ 05/08 ⋅ 0

BusyBox 1.28.4 发布,Unix 常用工具包

BusyBox 1.28.4 已发布,主要修复了 nsenter option 解析和 dpkg symlink 提取的问题。详情 BusyBox 是一个集成了一百多个最常用 linux 命令和工具的软件。BusyBox 包含了一些简单的工具,例...

王练 ⋅ 05/25 ⋅ 0

一步一步制作yaffs/yaffs2根文件系统(八)---总结及怎么样使系统自动启动自己编写的程序

通过前几节的学习制作,我大致地制作了一个比较完整的 yaffs 根文件系统,到这时候将自己移植的uboot、内核、根文件系统移植到自己的开发板中,一个基本的嵌入式 linux 系统也算搭建完成了。...

lxllinux ⋅ 2017/12/21 ⋅ 0

云计算:Docker安装及本地镜像仓库配置

# Docker的安装及如何配置从国内镜像中拖取需要的images到本地使用 实验环境: OS:CentOS7.0 -X64 上网环境:通过代理服务器上网 1.首先下载docker安装包docker-engine-1.7.1-1.el7.centos....

wang6501081 ⋅ 04/18 ⋅ 0

实现udev/mdev自动挂载与卸载

mdev是busybox中的一个udev管理程序的一个精简版,他也可以实现设备节点的自动创建和设备的自动挂载,只是在实现的过程中有点差异,在发生热插拔时间的时候,mdev是被hotplug直接调用,这时m...

michaelcao1980 ⋅ 04/13 ⋅ 0

22、《每天5分钟玩转Docker容器技术》学习--Flannel Network内部结构

一、环境介绍 二、环境搭建 环境搭建这里就不再重复了,请大家参考上一篇文章! http://blog.51cto.com/hostman/2103503 这里我们从配置flannel信息到数据库中开始 创建一个文件flannel-con...

hostman6 ⋅ 04/15 ⋅ 0

Docker持久化 save和export的区别

前记: 1、save&load用于持久化image;export&import用于持久化container; 2、持久化后都生成.tar文件,并且load和import都可以导入和加载,效果一样,最终得到的是一个image而非container...

qq_34409701 ⋅ 04/15 ⋅ 0

嵌入式Linux根文件系统制作和挂载

嵌入式Linux系统由三部分组成: uboot、kernel、根文件系统, 还是这张老图 这里的根文件系统可以说是包含两个部分: 一个是根,一个是文件系统 那么什么是根呢?哈哈 其实根表示的就是第一个...

duidaifen3896 ⋅ 04/14 ⋅ 0

与Ceph RBD关联,实现Kubernetes持久化存储

团队介绍 笔者最近在调研Kubernetes持久化存储,准备写一两篇关于这方面的文章,一是作为记录,二是可以给需要的同学作为一个参考。 Kubernetes中对于存储的使用主要集中在以下几个方面: 服...

360运维开发团队 ⋅ 04/19 ⋅ 0

嵌入式Linux根文件系统和挂载

嵌入式Linux系统由三部分组成: uboot、kernel、根文件系统, 还是这张老图 这里的根文件系统可以说是包含两个部分: 一个是根,一个是文件系统 那么什么是根呢?哈哈 其实根表示的就是第一个...

lxllinux ⋅ 2017/12/21 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring表达式语言(SpEL)

1、SpEL引用 Spring EL在bean创建时执行其中的表达式。此外,所有的Spring表达式都可以通过XML或注解的方式实现。下面将使用Spring表达式语言(SpEL),注入字符串,整数,Bean到属性。 SpEL的...

霍淇滨 ⋅ 29分钟前 ⋅ 0

Gradle使用阿里云镜像

gradle 生命周期中有一个初始化( Initialization )的过程,这个过程运行在 build script 之前,我们可以在这个地方做一点系统全局的设置,如配置仓库地址。 你可以在以下几个位置实现仓库地址...

明MikeWoo ⋅ 37分钟前 ⋅ 0

appium+python3.6

1.安装jdk1.8(不知道为啥只识别1.8,1.10不识别,所以为了少折腾,迁就安装1.8) http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 配置 JAVA_HOME:...

Kampfer ⋅ 55分钟前 ⋅ 0

详解Apache 日志分割教程

一、日志切割 安装cronolog CentOS 5.3中编译安装Apache日志默认是不切割的,需要用用工具Cronnolog进行日志切割。 1.下载及安装 wget http://cronolog.org/download/cronolog-1.6.2.tar.gz ...

dragon_tech ⋅ 58分钟前 ⋅ 0

Keepalived介绍

负载均衡器(Load Balancer, LB )是一组能够将IP数据流以负载均衡形式转发到多台物理服务器的集成软件。有硬件负载均衡器和软件负载均衡器之分,硬件负载均衡器主要是在访问网络和服务器之间...

寰宇01 ⋅ 58分钟前 ⋅ 0

java8-Collections and Streams

stream和集合的区别是什么? 1.在计算的时候处理不同, 2.every element should be computed in the memory and then to be part of collections stream Stream apis filter with a predica......

writeademo ⋅ 今天 ⋅ 0

Confluence 6 重新获得附件指南

每一个文件在恢复上传到 Confluence 的时候必须单独重命名,你可以通过下面说明的 3 个方法中选择一个进行操作: 选择 A - 通过文件名恢复附件 如果你知道你需要恢复的每一个文件名,尤其是你...

honeymose ⋅ 今天 ⋅ 0

【每天一个JQuery特效】根据状态确定是否滑入或滑出被选元素

主要效果: 本文主要采用slideToggle()方法实现以一行代码同时实现以展开或收缩的方式显示或隐藏被选元素。 主要代码如下: <!DOCTYPE html><html><head><meta charset="UTF-8">...

Rhymo-Wu ⋅ 今天 ⋅ 0

度量.net framework 迁移到.net core的工作量

把现有的.net framework程序迁移到.net core上,是一个非常复杂的工作,特别是一些API在两个平台上还不能同时支持。两个类库的差异性,通过人工很难识别全。好在微软的工程师们考虑到了我们顾...

李朝强 ⋅ 今天 ⋅ 0

请不要在“微服务”的狂热中迷失自我!

微服务在过去几年一直是一个非常热门的话题(附录1)。何为“微服务的疯狂”,举个例子: 众所周知,Netflix在DevOps上的表现非常棒。Netfix可以做微服务。因此:如果我做微服务,我也将非常...

harries ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部