ARM-Linux支持并自动挂载U盘
笔记性质的文章。
其实,我是想在ARM开发板上实现我的FW150US-USB无线网卡功能,所以测试下USB接口。
1、配置内核
Device Drivers ---> SCSI device support ---> <*> SCSI device support [*] legacy /proc/scsi/ support <*> SCSI disk support <*> SCSI tap support <*> SCSI CDROM support [*] USB support ---> <*> Support for Host-side USB [*] USB device filesystem <*> OHCI HCD support <*> USB Mass Storage support File Systems ---> DOS/FAT/NT Filesystems ---> <*>VFAT (Windows-95) fs support (936) Default codepage for FAT (iso8859-1)Default iocharater for FAT
2、烧写内核并加载
[root@lnx /]# ls /dev/插入U盘后会发现该目录下多了sda1(对于有的U盘,并不是这个名字,所以在自动加载脚本里要注意区别对待)节点,这个就是我们系统识别到U盘后分配的。
3、手动挂载U盘到指定目录/udisk
[root@lnx /]# mount /dev/sda1 /udisk/ [root@lnx /]# [root@lnx /]# ls /udisk/ images images____ 完了之后,卸载之: [root@lnx /]# umount /udisk/
4、自动挂在U盘实现及脚本分析
sda1 0:0 0600 =udisk */bin/hotplug_usb.sh如果无法确认是否是[sda1(默认是这个)],让系统自动判断:
sd[a-z]*[0-9] 0:0 0600 =udisk */bin/hotplug_usb.sh至于为何这么写,参见结尾处关于配置文件mdev.comn
#!/bin/sh # 为了方便,shell 的环境变量 $MDEV 会被设置成设备名。 例如 the device 'hdc' was matched, MDEV would be set to "hdc" case $MDEV in udisk | sda1) DEVNAME=udisk MOUNTPOINT=/udisk ;; sdcard | mmcblk0p1) DEVNAME=sdcard MOUNTPOINT=/sdcard ;; *) exit 0 ;; esac # 若不存在/dev/null节点,创建之 test ! -c /dev/null && mknod -m 0666 /dev/null c 1 3 # 热插拔实现原理及过程: # 在/etc/init.d/rcS文件中有句:echo /sbin/mdev > /proc/sys/kernel/hotplug # 那么当有热插拔事件产生时,内核就会调用位于/sbin目录的mdev # 这时mdev通过环境变量中的 ACTION 和DEVPATH(这两个变量是系统自带的)来确定此次热插拔事件的动作以及影响了/sys中的那个目录 # 接着会看看这个目录中是否有“dev”的属性文件,如果有就利用这些信息为这个设备在/dev 下创建设备节点文件。 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 -t vfat -o codepage=936 -o iocharset=utf8 -o sync -o noatime -o nodiratime /dev/$DEVNAME $MOUNTPOINT > /dev/null 2>&1 || true ;; esac exit 0
sd[a-z]*[0-9] 0:0 0660 @(mount /dev/$MDEV /udisk) sd[a-z]*[0-9] 0:0 0660 *(umount /udisk)
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。