zoukankan      html  css  js  c++  java
  • Busybox下mdev配置说明

    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
    
    转载请注明地址:http://www.cnblogs.com/OpenShiFt/ 谢谢!
  • 相关阅读:
    NumPy之:NumPy简介教程
    使用gradle插件发布项目到nexus中央仓库
    【Flutter 面试】main入口函数会被调用几次
    【Flutter 混合开发】与原生通信-BasicMessageChannel
    【Flutter 混合开发】与原生通信-MethodChannel
    震惊!!!Oracle SQL语句中竟然支持中文括号??
    Oracle Merge into中修改表的限制条件位置的区别
    Oracle根据local_listener注册service_name在所有监听的ip端口上
    Oracle如何迁移、管理、清除Audit数据(AUD$和FGA_LOG$表)
    Oracle 颠覆认知的无函数处理限定条件字段也可以用上函数索引
  • 原文地址:https://www.cnblogs.com/OpenShiFt/p/6008562.html
Copyright © 2011-2022 走看看