• 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 表示设备忙,可能设备已经被用了,比如已经完成了挂载。
  • 相关阅读:
    linux查看CPU和内存信息
    linux yum命令详解
    查看文件中关键字前后几行的内容
    vue.js+web storm安装及第一个vue.js
    android GPS: code should explicitly check to see if permission is available
    ASP.NET MVC Identity 使用自己的SQL Server数据库
    阿里云服务器,tomcat启动,一直卡在At least one JAR was scanned for TLDs yet contained no TLDs就不动了
    ASP.NET MVC4 MVC 当前上下文中不存在名称“Scripts”
    python 将windows字体中的汉字生成图片的方法
    Java android DES+Base64加密解密
  • 原文地址:https://www.cnblogs.com/rockyching2009/p/13467796.html
Copyright © 2020-2023  润新知