天天看點

udev模型管理hotplug

udev的本質就是一個裝置管理器,如果需要詳細了解可以自己去百度百科。該篇日志記錄了自己如何通過UDEV模型來實作SD卡的熱插拔。配置步驟如下文所示。

1、配置RSC啟動項

建立檔案/etc/init.d/S01udev ,内容如下

# cat /etc/init.d/S01udev 

#!/bin/sh

mkdir /dev/pts
mount -t devpts devpts /dev/pts

udevd --daemon
udevstart
           

2、配置udev配置檔案

建立檔案/etc/udev/udev.conf ,内容如下

# udev.conf
# The initial syslog(3) priority: "err", "info", "debug" or its
# state can be changed with: "udevcontrol log_priority=<value>".
udev_root="/dev/"
udev_rules="/etc/udev/rules.d"
udev_log="err"
           

3、配置熱插拔規則檔案

建立檔案/etc/udev/rules.d/11-sdcard-hotplug.rules,内容如下

#
# udev rules file for sdcard hotplug
#
ACTION=="add",KERNEL=="mmcblk[0-9]p[0-9]", RUN+="/etc/udev/sdcard_hotplug.sh add /media %k"
ACTION=="remove",KERNEL=="mmcblk[0-9]p[0-9]", RUN+="/etc/udev/sdcard_hotplug.sh remove /media %k"
           

4、配置熱插拔腳本檔案

建立檔案/etc/udev/sdcard_hotplug.sh,内容如下

#!/bin/sh

case $1 in
        add)
                mkdir -p $2
                mount -t vfat -o iocharset=utf8,rw,sync,umask=0000,dmask=0000,fmask=0000 /dev/$3 $2
#               mount -t vfat /dev/$2 /media
        ;;
        remove)
                umount $2
                rm -rf $2
        ;;
esac
           

按以上步驟配置完,插上SD卡,序列槽列印資訊如下

# card connected!

mmc0: new SDHC card at address 0001

mmcblk0: mmc0:0001 00000 29.8 GiB 

 mmcblk0: p1

FAT-fs (mmcblk0p1): utf8 is not a recommended IO charset for FAT filesystems, filesystem will be case sensitive!

通過df指令檢視到sd卡的挂載目錄為/media

# df -h

Filesystem                Size      Used Available Use% Mounted on

/dev/root                 3.0M      2.7M    308.0K  90% /

tmpfs                    16.6M      4.0K     16.6M   0% /dev

/dev/mtdblock3           10.0M      7.0M      3.0M  70% /mnt/mtd

tmpfs                    16.6M         0     16.6M   0% /mnt/mtd/dvs/mobile/tmpfs

/dev/mmcblk0p1           29.8G     77.2M     29.7G   0% /media

拔掉SD卡後,目錄/media消失。

備注:如果不生效,可能是腳本檔案的權限問題,修改檔案權限可以解決。

繼續閱讀