嵌入式Linux 实现U盘自动挂载

Linux上用udev自动识别并挂载U盘

http://blog.sina.com.cn/s/blog_7880d3350102wcko.html

最近想在U盘中放置一个配置文件,当U盘插入时自动读取配置文件。发现插上U盘后,在/dev下产生sda1、adb1、sdc1等不定设备,需要手动挂载才行。根据网上了解,可以通过udev来实现U盘的自动识别和挂载,操作方法如下:

 

1. 在/etc/udev/rules目录下新建11-add-usb.rules和11-add-remove.rules,负责设备监测。

root@am335x-evm:/etc/udev/rules.d# vi 11-add-usb.rules

ACTION!="add",GOTO="farsight"

KERNEL=="sd[a-z][0-9]",RUN+="/opt/usb/mountusb.sh %k"

KERNEL=="sd[a-z]",RUN+="/opt/usb/mountusb.sh %k"

LABEL="farsight"

root@am335x-evm:/etc/udev/rules.d# vi 11- remove -usb.rules

ACTION !="remove",GOTO="farsight"

SUBSYSTEM!="block",GOTO="farsight"

KERNEL=="sd[a-z][0-9]",RUN+="/opt/usb/umountusb.sh"

LABEL="farsight"

2. 在/opt/usb下建立执行脚本,负责挂载和卸载。

root@am335x-evm:/opt/usb# vi mountusb.sh

#!/bin/sh

mount  -t vfat /dev/$1 /mnt/usb

sync

root@am335x-evm:/opt/usb# vi umountusb.sh

#!/bin/sh

sync

umount /mnt/usb

3. 完成操作,可实现自动挂载。如要读写U盘文件,则可以在执行脚本中添加其他操作即可。

注意: 经实际测试,以上方法需要U盘是FAT32格式的,若是NTFS则无效!!!

 

参考文章:

http://blog.chinaunix.net/uid-26119896-id-5211736.html (u盘挂载)

http://www.cnblogs.com/sopost/archive/2013/01/09/2853200.html (udev简介)

 

 

嵌入式Linux用mdev实现U盘自动挂载

转载:https://blog.csdn.net/dragon101788/article/details/8757204

在ARM嵌入式Linux下,要让U盘自动挂载,可以用到mdev方式实现(mdev是busybox中的一个udev管理程


序的一个精简版,它可以实现设备节点的自动创建和设备的自动挂载),下面是实现的步骤:
     1、确认Busybox做的根文件系统如下选项有选中:
        Linux System Utilities  --->   
             [*] mdev      
             [*]   Support /etc/mdev.conf
             [*]     Support command execution at device addition/removal
        2、由于是利用到Linux内核的hotplug功能,要确定CONFIG_HOTPLUG=y。
        3、修改根文件系统里面的etc/init.d/rcS文件,添加如下内容:
              mount -t tmpfs mdev /dev
        mount -t sysfs sysfs /sys
        mkdir /dev/pts
        mount -t devpts devpts /dev/pts


        # mdev for /dev
        echo /sbin/mdev > /proc/sys/kernel/hotplug
        mdev -s
        echo "***************Starting mdev.........[OK]"
     4、添加对热插拔事件的相应,支持U盘自动挂载:
        修改根文件系统中的etc/mdev.conf文件,内容如下:
        sd[a-z][0-9]      0:0 666        @/etc/mdev/udisk_insert                        
        sd[a-z]           0:0 666        $/etc/mdev/udisk_remove
        注:@表示是在插入(创建设备结点)后执行后面的脚本,$表示在拔出(删除设备结点)前执


行后面的             脚本。
     5、添加对应的脚本文件:
        根文件系统中的etc/mdev/udisk_insert文件内容:
        #!/bin/sh
        if [ -d /sys/block/*/$MDEV ] ; then
         mkdir -p /media/$MDEV
         mount /dev/$MDEV /media/$MDEV -t vfat -o utf8=1
        fi
        根文件系统中的etc/mdev/udisk_remove文件内容:
        #!/bin/sh
        umount -l /media/$MDEV
        rm -rf /media/$MDEV
     至此,就可以实现自动的插拔挂载,仅供参考。

mdev机制(四)————mdev实现U盘或SD卡自动挂载

转载:https://blog.csdn.net/yangguoyu8023/article/details/70768800

前面我们说了udev实现U盘或SD卡的自动挂载,在这里我们再说一下怎样用mdev实现这个功能。

mdev是busybox中的一个udev管理程序的一个精简版,他也可以实现设备节点的自动创建和设备的自动挂载,只是在实现的过程中有点差异,在发生热插拔时间的时候,mdev是被hotplug直接调用,这时mdev通过环境变量中的 ACTION 和 DEVPATH,来确定此次热插拔事件的动作以及影响了/sys中的那个目录。接着会看看这个目录中是否有“dev”的属性文件,如果有就利用这些信息为这个设备在/dev 下创建设备节点文件。

下面是如何让我们的系统支持mdev。

1.在使用busybox制作根文件系统的时候,选择支持mdev

Linux System Utilities —> 
[*] mdev 
[*] Support /etc/mdev.conf 
[*] Support command execution at device addition/removal

2.在文件系统添加如下内容

vim /etc/init.d/rcS
mount -t tmpfs mdev /dev 
mount -t sysfs sysfs /sys
mkdir /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev>/proc/sys/kernel/hotplug
mdev –s /*s 为扫描*/
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

这些语句的添加在mdev的手册中可以找到。

3.添加对热插拔事件的响应,实现U盘和SD卡的自动挂载。

vim /etc/mdev.conf
mmcblk[0-9]p[0-9] 0:0 666 @ /etc/sd_card_inserting
mmcblk[0-9] 0:0 666 $ /etc/sd_card_removing
sd[a-z] [0-9] 0:0 666 @ /etc/usb/usb_inserting
sd[a-z] 0:0 666 $ /etc/usb/usb_removing
  • 1
  • 2
  • 3
  • 4
  • 5

红色部分,是一个脚本,脚本内容可以根据我们的需要定制,可以实现挂载,卸载或其他一些功能。

如下是自动挂载和卸载的脚本:

/etc/sd_card_inserting
        #!/bin/sh
        mount -t vfat /dev/mmcblk0p1 /mnt/sd

/etc/sd_card_removing
        #!/bin/sh
        sync
        umount /mnt/sd
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

韦东山例子:

我接上U盘,想自动挂载,怎么办?
mdev.conf的格式:
<device regex> <uid>:<gid> <octal permissions> [<@|$|*> <command>]

device regex:正则表达式,表示哪一个设备
uid: owner
gid: 组ID
octal permissions:以八进制表示的属性
@:创建设备节点之后执行命令
$:删除设备节点之前执行命令
*: 创建设备节点之后 和 删除设备节点之前 执行命令
command:要执行的命令

写mdev.conf
1.
leds 0:0 777
led1 0:0 777
led2 0:0 777
led3 0:0 777

2.
leds?[123]? 0:0 777

3.
leds?[123]? 0:0 777 @ echo create /dev/$MDEV > /dev/console

4.
leds?[123]? 0:0 777 * if [ $ACTION = "add" ]; then echo create /dev/$MDEV > /dev/console; else echo remove /dev/$MDEV > /dev/console; fi

5. 
leds?[123]? 0:0 777 * /bin/add_remove_led.sh

把命令写入一个脚本:
add_remove_led.sh

#!/bin/sh
if [ $ACTION = "add" ]; 
then 
    echo create /dev/$MDEV > /dev/console; 
else 
    echo remove /dev/$MDEV > /dev/console; 
fi

6. U盘自动加载
sda[1-9]+ 0:0 777 * if [ $ACTION = "add" ]; then mount /dev/$MDEV /mnt; else umount /mnt; fi

7.
sda[1-9]+ 0:0 777 * /bin/add_remove_udisk.sh

add_remove_udisk.sh
#!/bin/sh
if [ $ACTION = "add" ]; 
then 
    mount /dev/$MDEV /mnt; 
else 
    umount /mnt; 
fi

猜你喜欢

转载自blog.csdn.net/zjy900507/article/details/86666041