需要udev、还有内核选项配置里的automount
Linux里有个项目叫hotplug的
如果内核支持hotplug,那么在系统中应该有这么一个文件/proc/sys/kernel/hotplug,这是一个链接,指向/sbin/hotplug,这是一个shell脚本文件,对该脚本文件作相应的修改就可以支持热插拔,包括U盘、SD/MMC卡等等。
- #!/bin/sh
- #
- # What to do with this USB hotplug event?
- #
- # code by T-bagwell
- case $ACTION in
- add)
- #echo $ACTION>/dev/tts/1
- DIR="/dev/mmc"
- for I in "$DIR/"*;do
- #echo $I>/dev/tts/1
- if [ -d $I -a -e $I/part1 ];then
- #echo "found&mount $I/part1">/dev/tts/1
- mount -t vfat -o sync $I/part1 /tmp/sdcard 2>/dev/tts/1
- else
- #echo "$I/part1 not found">/dev/tts/1
- sleep 1;
- if [ -d $I -a -e $I/part1 ];then
- #echo "found&mount $I/part1">/dev/tts/1
- mount -t vfat -o sync $I/part1 /tmp/sdcard 2>/dev/tts/1
- fi
- fi
- done
- ;;
- remove)
- #echo $ACTION>/dev/tts/1
- #echo "umount /tmp/sdcard">/dev/tts/1
- umount /tmp/sdcard 2>/dev/tts/1
- ;;
- *)
- exit 1
- ;;
- esac
如果在嵌入式系统里做USB热插拔/自动挂载的话,稍微麻烦一些,我自己做的方法是使用NETLINK SOCKET来获得内核的设备热插拔信息,然后解析buf里以及df输出的信息,并执行相应的挂载/卸载的脚本。可以做到自动侦测挂载的usb设备名,设备数量,分区类型等,并自动建立对应的设备名的目录,将该设备挂载到对应的目录下。比如说我的手机插上时识别到两个分区,/dev/sda, /dev/sdb1,自动挂载到/mnt/sda, /mnt/sdb1。前提是内核里在热插拔的时候自动加载USB的驱动。
阅读(1410) | 评论(0) | 转发(1) |