/*********************************************************************
* 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. ubuntu18.04 64bit如何安装docker

    注:参考自https://docs.docker.com/install/linux/docker-ce/ubuntu/ 1.卸载旧版本docker(如果之前安装了) sudo apt-get rem ...

  2. git基础常用维护命令

    开发模式介绍 master为生产环境分支 trunk为测试环境分支 开发分支由程序员自己取名 比如来一个新项目之后,下面步骤都是在本地操作 1.从本地获取远程master最新代码,保证本地master ...

  3. 【error】git clone: SSL certificate problem: unable to get local issuer certificate

    报错: $ git clone https://github.XXX.git Cloning into 'XXX'... fatal: unable to access 'https://github ...

  4. CSS布局框架 960GS 表单排版示例

  5. Android6.0------权限申请RxPermissions

    前面写了Android6.0权限介绍和权限单个,多个申请,用的是纯Java代码,本文主要说的是借助第三方库来实现权限申请. 借助第三方库 RxPermissions来申请6.0权限. RxPermis ...

  6. FastDFS图片服务器

    首先要转一个FastDFS,这个很难装.一般由运维人员安装. git项目fastdfs-client-java由happy fish开发的,down下来后import到项目中maven install ...

  7. 使用Idea工具nodeJS+mysql开发项目

    一.MySQL Server的安装 1.mysql官网下载文件包:[我使用的版本是:mysql_5.7.17] 2.解压Zip压缩包: 3.安装:命令行:D:\soft\mysql-5.7.17-wi ...

  8. jQuery-瀑布流的取巧做法分享

      分析:瀑布流,做法有2种 (1)绝对定位方案:每个单元格设置为绝对定位,通过计算,分别设置 top , left 即可实现 (2)浮动方案:弄N列布局(浮动),然后图片数据,按顺序依次插入,如N为 ...

  9. js Math对象的常用方法

    1,基本方法: Math.round();向上四舍五入. Math.ceil();向上取整,有小数就整数部分加1 Math.floor(5/2) ;向下取整 Math.abs();返回绝对值: Mat ...

  10. HDU 4734 F(x) ★(数位DP)

    题意 一个整数 (AnAn-1An-2 ... A2A1), 定义 F(x) = An * 2n-1 + An-1 * 2n-2 + ... + A2 * 2 + A1 * 1,求[0..B]内有多少 ...