致远电子

#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
Logo

更多推荐