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、烧写内核并加载

[[email protected] /]# ls /dev/

插入U盘后会发现该目录下多了sda1(对于有的U盘,并不是这个名字,所以在自动加载脚本里要注意区别对待)节点,这个就是我们系统识别到U盘后分配的。

3、手动挂载U盘到指定目录/udisk

[[email protected] /]# mount /dev/sda1 /udisk/
[[email protected] /]#
[[email protected] /]# ls /udisk/
images      images____

完了之后,卸载之:
[[email protected] /]# 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脚本内容及解释:

#!/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

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>]

特殊字符的意义如下:

@ 在创建设备节点后运行命令。

$ 在删除设备节点前运行命令。

* 在创建设备节点后和删除设备节点前都运行命令。

比如:

sd[a-z]*[0-9] 0:0 0660 @(mount /dev/$MDEV /udisk)
sd[a-z]*[0-9] 0:0 0660 *(umount /udisk)

PPS:

Device or resource busy表示设备忙,可能设备已经被用了,比如已经完成了挂载。

时间: 2024-10-20 12:05:07

ARM-Linux支持并自动挂载U盘的相关文章

谢烟客---------Linux之文件系统自动挂载和ext文件系统结构、硬/软链接

/etc/fstab文件的格式 GDT,超级块,Indode,校验码 inode表,inode组成,地址指针结构 创建文件:位图索引 查找文件:目录 硬链接,软链接 删除文件,复制文件,移动文件 开机后,首先挂载的是根,然后手动通过根中的mount命令,关联其他分区至根 自动挂载的实现 1)定义在/etc/fstab文件中 2)挂载的文件系统支持auto选项     /etc/fstab文件为何开机能自动挂载 系统初始化脚本会起用mount命令扫描/etc/fstab文件中的每一行 /etc/f

Linux 磁盘 开机自动挂载 -- 基于 fstab 文件

个人博客首页(点击查看详情) -- https://blog.51cto.com/11495268个人公众号(点击链接 扫码关注哦)-- https://blog.51cto.com/11495268/2401194     1.简介     开机 自动 挂载 很有用,特别是 很多 开启自启 服务 依赖于 某些 数据文件:本文 描述 编辑 /etc/fstab 实现 开机自启     2./etc/fstab # cat /etc/fstab # /etc/fstab: static file

centos7 自动挂载网络盘示例

//192.168.1.168/www     /home/www    cifs        username=administrator,password=0p-0p-0p-,noauto,x-systemd.automount     0     0 加了noauto,x-systemd.automount 后 系统会自动检测网络盘有没有挂载 没有挂载会自动执行mount -a 原文地址:https://www.cnblogs.com/niezhongle/p/11062496.html

linux系统autofs自动挂载服务

自动挂载autofs命令 涉及服务haldaemon和messagebus两个服务有关,保证两个服务是开启. ***现在想在客户端10.10.10.10自动挂载服务器10.10.10.254上的/share/soft和/share/iso两个目录,该如何配置? 在客户端10计算机上配置 1.mkdir /share 2.vim /etc/auto.master /share    /etc/auto.share    --后面的auto.share文件不存在,名字自定义. 3.# vim /et

Linux根据UUID自动挂载磁盘分区

一般服务器都有多个硬盘分区,在重启后,这些分区的逻辑位置加载时可能会发生变动,如果使用传统的设备名称(例如:/dev/sda)方式挂载磁盘,就可能因为磁盘顺序变化而造成混乱. Linux环境中每个Block Device都有一个全局唯一的UUID,可以标识这个设备,我们可以在fstab中使用UUID替换设备名称,这样就不会产生上述混乱的情况了. 1.以sdb1为例,首先使用lsblk命令可以清晰的获取全局的块设备布局 2.然后,使用blkid命令可以获取设备的UUID.复制记下sdb1的UUID

linux cifs开机自动挂载windows共享文件

windows 系统上新建一个共享文件夹share,系统用户:test,密码:12345,ip:172.16.4.118 linux 系统上新建一个目录/home/share vi /etc/fstab在后面添加//172.16.4.118/share  /home/share cifs defaults,username=vqiao,password=vqiao 如下:## /etc/fstab# Created by anaconda on Thu Oct 30 05:52:12 2014#

arm linux 支持 wifi

背景: 公司用的产品主板支持wifi接口,为了加强产品的功能,做wifi的底层支持. 概览 主要的流程如下: 内核配置 + 有关驱动的移植 + 软件的移植 + 软件的配置 内核配置 Networking support <*> RF switch subsystem support ---> [*] Power off on suspend (NEW) <*> Generic rfkill regulator driver (防止使用wpa_supplicant会出现rfki

kali禁止自动挂载U盘(gnome)

翻了好多资料 都说用dconf或者dconf-editor 主要就是为了修改位于/home/{用户名}/.config/dconf/user这个文件 但是我发现无论咋整 这个文件在重启后都会被覆盖掉 也就是说修改不会保存 用root用户update也没用 直接说解决办法 设置这玩意也可以用命令gsettings 所以在直接修改/home/{用户名}/.bashrc 在最后面追加 gsettings set org.gnome.desktop.media-handling automount fa

A20 sugar-standard 版本无法支持U盘自动挂载问题解决

前面硬件工程师在sugar-standard的基础上搞了个什么USB HUB的线路<我不是很明白>,但是这个时候的sugar-standard 依然能自动挂载U盘. 后面他又把USB接口的东西给弄成了 A20 sugar-cubieboard 2 的版本,于是这个时候原来的img烧进去,U口就没有任何反应,只有一个口能使用鼠标. 经过查资料得知:android系统自动挂载U盘,与一个叫 vold.fstab的文件有关. 于是在公司自己的源码  android/ 目录下   find ./ -n