/*********************************************************************
* mdev USB disk auto mount demo
* 说明:
* 之前有分析过mdev,这次富林写了一个demo,跟一下,不过呢,在看过之后
* 觉得,需要优化,后面提供了一种兼容eMMC、SD、U盘、SATA自动挂载的方式,
* 在功能上可以进步的进行优化,其中的eMMC、SD卡功能需要加强区分,这份脚本
* 中没有进一步识别区分,这份参考来自参考文档第二点链接。
*
* 2017-8-21 深圳 龙华樟坑村 曾剑锋
********************************************************************/ 一、参考文档:
. MDEV Primer
http://www.cnblogs.com/zengjfgit/p/5133307.html
. [Linux] Auto mount 自動掛載 usb disk & SD card
http://www.awaysu.acsite.org/linux/linux-auto-mount-usb-disk-sd-card/
. SD card automount for Embedded Linux
http://infosoure.blogspot.com/2011/04/sd-card-automount-for-embedded-linux.html
. How to mount removable media in /media/<LABEL> automatically when inserted, without any desktop environment?
https://unix.stackexchange.com/questions/44454/how-to-mount-removable-media-in-media-label-automatically-when-inserted-with 二、代码阅读:
. /etc/mdev.conf
...
sda1 : @/etc/usb_disk1_insert
sda : $/etc/usb_disk1_remove
sdb1 : @/etc/usb_disk2_insert
sdb : $/etc/usb_disk2_remove
...
. /etc/usb_disk1_insert
#!/bin/sh if [ ! -e /media/sda1 ]; then
mkdir /media/sda1 -p
fi mount -t vfat /dev/sda1 /media/sda1
. /etc/usb_disk1_remove
#!/bin/sh umount /media/sda1 if [ -d /media/sda1 ]; then
rm /media/sda1 -rf
fi
. /etc/usb_disk2_insert
#!/bin/sh if [ ! -e /media/sdb1 ]; then
mkdir /media/sdb1 -p
fi mount -t vfat /dev/sdb1 /media/sdb1
. /etc/usb_disk2_remove
#!/bin/sh umount /media/sdb1 if [ -d /media/sdb1 ]; then
rm /media/sdb1 -rf
fi 三、更好的处理方式:
. /etc/mdev.conf
...
sd[a-z][-] : *(/etc/init.d/automount.sh $MDEV &)
mmcblk0p[-] : *(/etc/init.d/automount.sh $MDEV &)
...
. /etc/init.d/automount.sh
#!/bin/sh # 挂载路径
MOUNT_PATH=""
# 信息输出串口
MSG_PATH="/dev/ttyS0" # 设备节点为空检查,退出
if [ $ == "" ]; then
echo "[AutoMount] automount.sh parameter is none" > $MSG_PATH
exit
# eMMC或者SD卡挂载
elif [ $ == "mmcblk0p1" ]; then
MOUNT_PATH="/mnt/sdcard"
# 其他类型的盘挂载
else
name=$
check=${name%[-]}
vendor=`cat /sys/block/$check/device/vendor`
# SATA挂载
if [ $vendor == "ATA" ]; then
MOUNT_PATH="/mnt/hdd/"$name
# U盘挂载
else
MOUNT_PATH="/mnt/usb/"$name
fi
fi
# 将挂载点信息输出到串口
echo "[AutoMount] mount path : $MOUNT_PATH" >> $MSG_PATH # 获取当前需要挂载、卸载的分区格式
FORMAT=`/sbin/fdisk -l | grep $`
# 查看是否已经有挂载设备了,如果已经挂载,那当前次就要卸载
OLD_MOUNT_PATH=`mount | grep $MOUNT_PATH` # 未挂载,那么当前次就是需要进行挂载
if [ "$OLD_MOUNT_PATH" == "" ]; then # 如果挂载点不存在,那么就自动创建挂载点
if [ ! -x $MOUNT_PATH ]; then
mkdir -p $MOUNT_PATH
fi # 针对格式进行挂载
for token in $FORMAT
do
if [ $token == "FAT32" ]; then
mount -t vfat /dev/$ $MOUNT_PATH
echo "[AutoMount] mount -t vfat /dev/$1 $MOUNT_PATH" > $MSG_PATH
elif [ $token == "FAT16" ]; then
mount -t vfat /dev/$ $MOUNT_PATH
echo "[AutoMount] mount -t vfat /dev/$1 $MOUNT_PATH" > $MSG_PATH
elif [ $token == "HPFS/NTFS" ]; then
if [ -f /usr/app/ntfs-3g ]; then
echo "[AutoMount] /usr/app/ntfs-3g /dev/"$" "$MOUNT_PATH > /var/log/automount/mount.log
export LD_LIBRARY_PATH=/lib/:${LD_LIBRARY_PATH}
/usr/app/ntfs-3g /dev/$ $MOUNT_PATH
echo "[AutoMount] /usr/app/ntfs-3g /dev/$1 $MOUNT_PATH" > $MSG_PATH
else
mount -t ntfs /dev/$ $MOUNT_PATH
echo "[AutoMount] mount -t ntfs /dev/$1 $MOUNT_PATH" > $MSG_PATH
fi
# 没有针对的格式,直接进行挂载
elif [ $token == "Linux" ]; then
mount /dev/$ $MOUNT_PATH
echo "[AutoMount] mount /dev/$1 $MOUNT_PATH" > $MSG_PATH
fi
done
# 自动卸载
else
umount $MOUNT_PATH
echo "[AutoMount] umount "$MOUNT_PATH > $MSG_PATH
fi
. 插入U盘,输出信息:
[rootzengjf init.d]# [ 1233.252058] usb -1.2: new high-speed USB device number using musb-hdrc
[ 1233.372824] usb -1.2: New USB device found, idVendor=, idProduct=556b
[ 1233.380358] usb -1.2: New USB device strings: Mfr=, Product=, SerialNumber=
[ 1233.388402] usb -1.2: Product: Cruzer Edge
[ 1233.393128] usb -1.2: Manufacturer: SanDisk
[ 1233.397922] usb -1.2: SerialNumber: 2005395413192CA2C0DB
[ 1233.411004] usb-storage -1.2:1.0: USB Mass Storage device detected
[ 1233.450259] scsi host2: usb-storage -1.2:1.0
[ 1234.455868] scsi :::: Direct-Access SanDisk Cruzer Edge 1.27 PQ: ANSI:
[ 1234.476271] sd :::: [sdc] -byte logical blocks: (7.90 GB/7.36 GiB)
[ 1234.523098] sd :::: [sdc] Write Protect is off
[ 1234.548813] sd :::: [sdc] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
[ 1234.603919] sdc: sdc1
[ 1234.625862] sd :::: [sdc] Attached SCSI removable disk
[AutoMount] mount path : /mnt/usb/sdc1
[ 1234.922506] FAT-fs (sdc1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.
[AutoMount] mount -t vfat /dev/sdc1 /mnt/usb/sdc1

mdev USB disk auto mount demo的更多相关文章

  1. How to create a "BOOT USB DISK" for EXSI6.0

    1 准备工作 opensuse 13.2ESXi ISO文件  //vmware 官网下载 VMware-VMvisor-Installer-5.1.0-799733.x86_64.iso,XXXXX ...

  2. how to auto open demo and create it in a new codesandbox

    how to auto open demo and create it in a new codesandbox markdown & iframe https://ant.design/do ...

  3. Openwrt TF Card Auto Mount&Check (4)

    1      Scope of Document This document describes tf card bootup auto do file system check when mount ...

  4. ubuntu auto mount自动挂载硬盘

    Ubuntu 挂载的文章在网上也不少,推荐一个: http://wenku.baidu.com/link?url=N2c7axijp_KYaYkt2CrZFNZPzzS8xBHLQSTUcI2F85I ...

  5. VC++ 6.0 C8051F340 USB PC侧通信 Demo

    // HelloWorld.cpp : Defines the entry point for the console application. // /*********************** ...

  6. 将ISO镜像文件制作成USB disk

    制作USB Live盘有Universal USB Installer.UNetbootin.WinSetupFromUSB.LinuxLive USB Creator.YUMI(Your Unive ...

  7. OpenWrt中开启usb存储和samba服务

    在从官网安装的WNDR3800 15.05.1版本OpenWrt中, 不带usb存储支持以及samba, 需要另外安装 1. 启用usb支持 USB Basic Support https://wik ...

  8. mount命令汇总(转载)

    (一)挂接命令(mount) 首先,介绍一下挂接(mount)命令的使用方法,mount命令参数非常多,这里主要讲一下今天我们要用到的. 命令格式: mount [-t vfstype] [-o op ...

  9. 在GNU/Linux下使用命令行自动挂载与卸载USB磁盘

    在命令行环境下如果每次都是靠手动敲入mount与umount命令来挂载与卸载USB磁盘是件很麻烦的事情.尤其是mount命令的参数非常多.比如,磁盘的分区类型(vfat.ntfs等),挂载的目录节点, ...

随机推荐

  1. CentOS7系统安装及环境初始化

    操作系统安装:    将网卡名称设置为eth*,不使用CentOS 7默认的网卡命名规则.所以需要在安装的时候,增加内核参数.1. 光标选择“Install CentOS 7” 2. 点击Tab,打开 ...

  2. brpc编译运行

    自百度开源brpc后就一直在关注,看了下brpc都源码,感觉大牛写的果然不一样,由于之前我做c++游戏服务器开发,所以主要看了下网络底层代码,收益颇多,果然一天不学习就要落伍. 现在主要和大家说下我编 ...

  3. Python学习札记(五) Basic2 字符串和编码

    参考:字符串和编码 Note A.字符编码 1.计算机处理文本 == 将文本转换为二进制 => 处理 2.8 bit(比特) = 1 byte(字节) 一个字节所能表示的最大的十进制整数是255 ...

  4. 修改input的placeholder颜色

    1.CSS选择器 因为每个浏览器的CSS选择器有所差异,所以需要针对每个浏览器做单独的设定. ::-webkit-input-placeholder { /* WebKit browsers */ c ...

  5. CountDownLatch详解

    功能描述 一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待. 常见用法 多个人等一个信号后继续执行操作.例如5个运动员,等一个发令员的枪响. 一个人等多个人的信号. ...

  6. MySQL表类型MyISAM/InnoDB的区别(解决事务不回滚的问题)

    MyISAM:这个是默认类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的顺序访问方法) 的缩写,它是存储记录和文件的标准方法.与 ...

  7. 分享海量 iOS 及 Mac 开源项目和学习资料

    UI 下拉刷新 EGOTableViewPullRefresh - 最早的下拉刷新控件. SVPullToRefresh - 下拉刷新控件. MJRefresh - 仅需一行代码就可以为UITable ...

  8. wget下载指定目录下的文件

    wget -r -np -k -P  ~/tmp/    http://xxx.com/download -P 表示下载到哪个目录-r 表示递归下载-np 表示不下载旁站连接.-k 表示将下载的网页里 ...

  9. String写时拷贝实现

    头文件部分 1 /* 版权信息:狼 文件名称:String.h 文件标识: 摘 要:对于上版本简易的String进行优化跟进. 改进 1.(将小块内存问题与大块分别对待)小内存块每个对象都有,当内存需 ...

  10. 初次安装git配置用户名和邮箱及密钥

    在Windows上安装Git: 在Windows上使用Git,可以从Git官网直接下载安装程序,(网速慢的同学请移步国内镜像),然后按默认选项安装即可. 安装完成后 键盘敲上:windows+r你会看 ...