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

致远电子

#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

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

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

/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
  • 2
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
嵌入式Linux系统中,自动挂载U盘的过程与普通Linux系统类似。您可以按照以下步骤进行操作: 1. 确定是否支持自动挂载:首先,确保您的嵌入式Linux系统支持自动挂载U盘。这通常涉及到在内核配置中启用相关的功能选项,如USB支持、USB存储设备支持、自动挂载支持等。 2. 配置udev规则:在嵌入式Linux系统中,通常会使用udev来管理设备的插拔事件。您可以在udev规则中定义自动挂载U盘的操作。以下是一个简单的示例udev规则: ``` ACTION=="add", SUBSYSTEM=="block", KERNEL=="sd[a-z]*", RUN+="/path/to/mount_script %k" ``` 上述规则会在U盘插入时执行`/path/to/mount_script`脚本,并将设备节点作为参数传递给脚本。 3. 编写挂载脚本:根据上述udev规则,您需要编写一个挂载脚本(`/path/to/mount_script`),用于实际挂载U盘。该脚本通常会使用mount命令将U盘挂载到指定的挂载点。 ``` #!/bin/sh DEV=$1 MOUNT_POINT="/mnt/usb" mkdir -p $MOUNT_POINT mount /dev/$DEV $MOUNT_POINT ``` 上述脚本会将设备节点参数(`%k`)作为输入,并将U盘挂载到`/mnt/usb`目录下。 4. 重启udev服务:在应用了udev规则和挂载脚本后,您需要重启udev服务,以使更改生效。 ``` /etc/init.d/udev restart ``` 完成上述步骤后,当您插入U盘时,udev将会识别到设备插拔事件,并执行指定的挂载脚本来自动挂载U盘。 请注意,在嵌入式Linux系统中,具体的配置和操作步骤可能因系统和发行版而有所不同。您可能需要根据自己的系统进行相应的调整。 希望这可以帮助您在嵌入式Linux系统中实现自动挂载U盘!如果还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值