Chinaunix首页 | 论坛 | 博客
  • 博客访问: 29391
  • 博文数量: 19
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 200
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-19 08:37
文章分类
文章存档

2011年(3)

2010年(16)

我的朋友

分类:

2010-11-19 11:48:16

这是一个通过mdev规则实现可移动设备(U盘,SD卡)自动挂载的例子,它的功能和mini2440文件系统中/sbin/hotplug类似,只是用shell脚本实现。这个脚本来自互联网,借此希望给各位一些设备挂载和hotplug的概念,欢迎各位加入讨论这个话题。
要使用automount.sh脚本,你需要
1. 在/etc/mdev.conf的最后加入下面两行。注意,因为mdev在匹配规则时总是用第一个匹配到的规则,因此新加入的规则不会影响原来对于SD卡和U盘的处理,只是增加了对于原来不支持的情况,比如没有分区表或超过一个分区时候的处理
  1. #automount
  2. mmcblk[0-9]*    0:0    0600    */sbin/automount.sh $MDEV
  3. sd[a-z][0-9]*    0:0    0600    */sbin/automount.sh $MDEV

可以看到,当SD卡或U盘插入/拔出时,mdev都会自动调用/sbin/automount.sh脚本。传入脚本的参数是环境变量MDEV的值,根据busybox源代码目录下docs/mdev.txt中的描述,这个环境变量的值是当前发生变化的设备名称,也就是像"mmcblk0"或者"sda2"这样的设备名称。

2. 在/sbin目录下添加automount.sh脚本,内容如下:

  1. #from http://clc168.blogspot.com/2008/04/arm-embedded-linuxautomount.html
  2. #! /bin/sh
  3. if [ "$1" == "" ]; then
  4.     echo "parameter is none" > /tmp/error.txt
  5.     exit 1
  6. fi
  7. mounted=`mount | grep $1 | wc -l`
  8. # mounted, assume we umount
  9. if [ $mounted -ge 1 ]; then
  10.     echo "R/media/$1" >> /tmp/usbmnt.log
  11.     echo "R/media/$1" > /tmp/fifo.1
  12.     if ! umount "/media/$1"; then
  13.         exit 1
  14.     fi
  15.     if ! rmdir "/media/$1"; then
  16.         exit 1
  17.     fi
  18. # not mounted, lets mount under /media
  19. else
  20.     if ! mkdir -p "/media/$1"; then
  21.         exit 1
  22.     fi
  23.     if ! mount "/dev/$1" "/media/$1" 2>> /tmp/error.txt ; then
  24.     # failed to mount, clean up mountpoint
  25.         if ! rmdir "/media/$1"; then
  26.             exit 1
  27.         fi
  28.         exit 1
  29.     fi
  30.     echo "A/media/$1" >> /tmp/usbmnt.log
  31.     echo "A/media/$1" > /tmp/fifo.1
  32. fi
  33. exit 0

这个脚本非常简单,基本上可以是self explanation的了。

这样,插入不包含分区表或者多于一个分区的U盘或者SD卡后,就可以在/media/目录下找到相应的挂载点.

阅读(668) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~