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

2019-07-12 14:39发布

致远电子

#zhiyuan_udev.sh #! /bin/bash #yll>> #一般U盘插入之后会在/dev下产生一个sda和一个sda1节点, #但是只有sda1是可以挂载的。sda是设备,sda1是分区 #有的U盘只会产生一个/dev/sda节点,此时就应该挂载sda。 #这个脚本不区分设备节点和分区节点,一律先挂载, #但是挂载失败之后会立即清除建立的挂载点 #-------------------------------------------------# #磁盘种类 设备节点 设备分区节点 #U盘 sd[a-z] sd[a-z][0-9] #SD卡 mmcblk[0-9] mmcblk[0-9]p[0-9] #CF卡 hd[a-z] hd[a-z][0-9] #-------------------------------------------------# #说明:在这个脚本中的可以把udev脚本的ACTION作为环境变量来用, #但是无法使用KERNEL #-------------------------------------------------# if [ $# -ne 2 ] ; then #输入参数必须是两个 exit 1 fi MNT_PATH=/media/ #挂载移动设备的目录 #DEV_PRE=$1 #参数1:挂载点的前缀 DEV_NAME=$2 #参数2:设备在/dev下的名字 FS_TYPE=vfat #设备的文件系统类型 if [ $ACTION == "add" ] ; then #设备插入 # echo "=======add==========" >> /media/udev.txt /bin/mkdir -p $MNT_PATH$DEV_NAME /bin/mount -t $FS_TYPE /dev/$DEV_NAME $MNT_PATH$DEV_NAME if [[ $? -ne 0 ]] ; then #mount失败则清除刚刚建立的目录 # echo "mount $DEV_NAME fialed" >> /media/udev.txt /bin/rmdir $MNT_PATH$DEV_NAME fi # echo "sssss sd card detected" >> /media/udev.txt target_sd_file="" isexit=`cat /proc/partitions |grep sda1 |wc -l` if [ $isexit -eq 0 ]; then # echo "no sd card detected" >> /media/udev.txt exit 1 fi sd_dri=`df -h |awk '//dev/sda1/'|sed -n '1p'|awk '{print $6}'` ## echo "sd_card:" # echo $sd_dri cd $sd_dri isexit=`ls |grep sjdf.tar|wc -l` if [ $isexit -eq 0 ];then # echo "no user data file" >> /media/udev.txt exit 1 fi cd /opt/ # echo "updater user program..." >> /media/udev.txt tar -xvf $sd_dri/sjdf.tar sync # echo "program over!" >> /media/udev.txt elif [ $ACTION == "remove" ] ; then # echo "=======remove==========" >> /media/udev.txt #设备移除 if [[ -e $MNT_PATH$DEV_NAME ]] ; then /bin/umount -l $MNT_PATH$DEV_NAME /bin/rmdir $MNT_PATH$DEV_NAME fi fi exit 0 ##S31Updater #!/bin/sh target_sd_file="" isexit=`cat /proc/partitions |grep sda1 |wc -l` if [ $isexit -eq 0 ]; then echo "no sd card detected" exit 1 fi sd_dri=`df -h |awk '//dev/sda1/'|sed -n '1p'|awk '{print $6}'` echo "sd_card:" echo $sd_dri cd $sd_dri isexit=`ls |grep sjdf.tar|wc -l` if [ $isexit -eq 0 ];then echo "no user data file" exit 1 fi cd /opt/ echo "updater user program..." tar -xvf $sd_dri/sjdf.tar sync echo "program over!"

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
红 {MOD}部分,是一个脚本,脚本内容可以根据我们的需要定制,可以实现挂载,卸载或其他一些功能。 如下是自动挂载和卸载的脚本: /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: 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