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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM