致远电子
#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 为扫描*/
这些语句的添加在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
红 {MOD}部分,是一个脚本,脚本内容可以根据我们的需要定制,可以实现挂载,卸载或其他一些功能。
如下是自动挂载和卸载的脚本:
/etc/sd_card_inserting
#!/bin/sh
mount -t vfat /dev/mmcblk0p1 /mnt/sd
/etc/sd_card_removing
#!/bin/sh
sync
umount /mnt/sd
韦东山例子:
我接上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