zoukankan      html  css  js  c++  java
  • ARM-Linux支持并自动挂载U盘

    受不了xxxx恶心人的行为,遂搬迁至博客园。
    始发:2015-04-07 19:10:42
    

      

    其实,我是想在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盘实现及脚本分析

    /etc/mdev.conf 文件中添加如下语句:

    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
    hotplug_usb.sh脚本内容及解释:
     1 #!/bin/sh
     2  
     3 # 为了方便,shell 的环境变量 $MDEV 会被设置成设备名。 例如 the device 'hdc' was matched, MDEV would be set to "hdc"
     4 case $MDEV in
     5     udisk | sda1)
     6             DEVNAME=udisk
     7             MOUNTPOINT=/udisk
     8             ;;
     9     sdcard | mmcblk0p1)
    10             DEVNAME=sdcard
    11             MOUNTPOINT=/sdcard
    12             ;;
    13     *)
    14             exit 0
    15             ;;
    16 esac
    17 
    18 # 若不存在/dev/null节点,创建之
    19 test ! -c /dev/null && mknod -m 0666 /dev/null c 1 3
    20 
    21 # 热插拔实现原理及过程:
    22 #  在/etc/init.d/rcS文件中有句:echo /sbin/mdev > /proc/sys/kernel/hotplug
    23 #  那么当有热插拔事件产生时,内核就会调用位于/sbin目录的mdev
    24 #  这时mdev通过环境变量中的 ACTION 和 DEVPATH(这两个变量是系统自带的)来确定此次热插拔事件的动作以及影响了/sys 中的哪个目录
    25 #  接着会看看这个目录中是否有“dev”的属性文件,如果有就利用这些信息为这个设备在/dev 下创建设备节点文件。
    26 case $ACTION in
    27     remove)
    28             /bin/umount $MOUNTPOINT || true
    29             rmdir $MOUNTPOINT >/dev/null 2>&1 || true
    30             ;;
    31     *)
    32             /bin/mkdir $MOUNTPOINT > /dev/null 2>&1 || true
    33             /bin/mount -t vfat -o codepage=936 -o iocharset=utf8 -o sync -o noatime -o nodiratime /dev/$DEVNAME $MOUNTPOINT > /dev/null 2>&1 || true
    34             ;;
    35 esac
    36  
    37 exit 0
    PS:关于 mdev.conf 文件
    /etc/mdev.conf 是mdev 的配置文件,用来控制设备节点的 ownership/permissions。如果不使用该文件,系统默认 root/root 660 权限。
    该文件的格式为:
    [-]<device regex> <uid>:<gid> <permissions>
    或者
    @<maj[,min1[-min2]]> <uid>:<gid> <permissions>
    或者
    $envvar=<regex> <uid>:<gid> <permissions>
    比如:
    hd[a-z][0-9]*     0:3     660
     
    如果我们想把节点移动到另一个目录或者重命名该节点,则配置格式:
    <device regex> <uid>:<gid> <permissions> [=path/new_name]
    比如:
    hda 0:3 660 =drives/
    这样“ hda ”就被移动到drives/子目录里面
    而:
    hdb 0:3 660 =cdrom
    就把“ hdb ”重命名成“ cdrom”
     
    如果你想 mdev 在找到匹配行时可以执行自定义的命令,那么文件格式如下:
        <device regex> <uid>:<gid> <octal permissions> [<@|$|*> <command>]
     
    特殊字符的意义如下:
        @ 在创建设备节点后运行命令。
        $ 在删除设备节点前运行命令。
        * 在创建设备节点后和删除设备节点前都运行命令。

    比如:

    1 sd[a-z]*[0-9] 0:0 0660 @(mount /dev/$MDEV /udisk)
    2 sd[a-z]*[0-9] 0:0 0660 *(umount /udisk)
    PPS:
    Device or resource busy 表示设备忙,可能设备已经被用了,比如已经完成了挂载。
  • 相关阅读:
    nginx限制某个IP同一时间段的访问次数
    在64位机器上使用yum install特定指定安装32位的库
    pl sql developer连接oracle数据库提示:ORA12541: TNS: no listener
    [转]Eclipse中几种加入包方式的区别
    Oracle安装出现Can't connect to X11 window
    [转]ORACLE10GR2,dbca时ora27125错误解决方法
    [转]教你如何进入google国际版 不跳转g.cn 及 opendns
    安装oracle遇到的故障
    [转]宝文!Apple Push Notification Service (APNS)原理与实现方案
    [转]关于安卓与ios的推送系统,我说说自己的看法。
  • 原文地址:https://www.cnblogs.com/rockyching2009/p/13467796.html
Copyright © 2011-2022 走看看