udev模型管理hotplug

udevLinux kernel 2.6系列的设备管理器。它主要的功能是管理/dev目录底下的设备节点。它同时也是用来接替devfs及热插拔的功能,这意味着它要在添加/删除硬件时处理/dev目录以及所有用户空间的行为。

创建/etc/init.d/S01udev文件,内容如下:

#!/bin/sh  

mkdir /dev/pts  
mount -t devpts devpts /dev/pts  
 
udevd --daemon  
udevstart  

配置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=".  

udev_root="/dev/"  
udev_rules="/etc/udev/rules.d"  
udev_log="err"  

配置热插拔规则文件,创建/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"

配置热插拔脚本文件,创建/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消失。

参考文章

脚本实现U盘自动挂载(linux平台)
详解udev
linux下实现U盘和sd卡的自动挂载
udev模型管理hotplug
linux中的热插拔和mdev机制

你可能感兴趣的:(openwrt)