使用mdev自动mount和umount tf卡

需求很简单,就是在热插拔tf卡时,不需要手动mount和Umount。


先列出网上很多转载的方法,虽然在我这是失效的。

编辑/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
编辑/etc/sd_card_inserting
#!/bin/sh
mount -t vfat /dev/mmcblk0p1 /mnt/sd
编辑/etc/sd_card_removing
#!/bin/sh
sync
umount /mnt/sd

在实际操作中,由于我的系统插入tf卡后产生的是mmcblk0而不是mmcblk0p0,所以对mdev.conf加以修改:

mmcblk[0-9] 0:0 666 @ /etc/sd_card_inserting
        mmcblk 0:0 666 $ /etc/sd_card_removing

结果是插入tf卡时能够mount,拔出时却不能Umount。

查看busybox目录中的mdev.txt,确定第二行的写法是错误的。

mdev.conf每一行的完整格式是:

<device regex> <uid>:<gid> <octal permissions> [=path|>path|!] [<@|$|*> <command>]

第一列为设备的正则匹配表达式,mmcblk[0-9]代表mmcblk0-mmcblk9,所以设备插入时能mount,而第二行的mmcblk只能代表mmcblk,所以拔出tf卡时无法Umount。

继续修改mdev.conf:

mmcblk[0-9] 0:0 666 @ /etc/sd_card_inserting
        mmcblk[0-9] 0:0 666 $ /etc/sd_card_removing

结果仍然是能mount但不能Umount,没有时间去阅读busybox的源码,查阅mdev.txt看到一句话“the config file parsing stops at the first matching line”,意思是解析配置文件时在第一个匹配行就停止了,所以第二行根本就不起作用,于是再次对mdev.conf修改:

mmcblk[0-9] 0:0 666 * /etc/sd_card_automount

编辑sd_card_automount:

if [ "$ACTION" = remove ] ; then
        echo "Umount /mnt/tfcard"
        umount /mnt/tfcard
else if [ "$ACTION" = add] ; then
        echo "Mount /dev/mmcblk0"
        mount -n /dev/$MDEV /mnt/tfcard
fi

结果再次悲催,但也不是没有进步,问题出在系统启动过程中,使用 mdev -s命令创建/dev/mmcblk0时,并没有跟着mount tf卡,但是在后来的系统正常运行中热插拔tf卡时是可以自动mount和Umount的。于是在sd_card_automount加入打印信息,发现使用mdev -s后被调用的sd_card_automount中,$ACTION为空,难怪不能自动mount,于是修改sd_card_automount:

if [ "$ACTION" = remove ] ; then
        echo "Umount /mnt/tfcard"
        umount /mnt/tfcard
else
        echo "Mount /dev/mmcblk0"
        mount -n /dev/$MDEV /mnt/tfcard
fi

于是能够自动mount和Umount了!

使用的内核是版本是3.0.34,也许在之前的2.6版本中,上一种else if [ "$ACTION" = add] ; then的写法是正确的。

<device regex> <uid>:<gid> <octal permissions> [=path|>path|!] [<@|$|*> <command>]的详细解释:

<device regex>:必须有,用来匹配设备。

<uid>:<gid>:必须有,创建的设备节点的所属用户id和组id。

<octal permissions>:必须有, 创建的设备结点的用户权限。

[=path|>path|!]:可选项,其中

[=path]:重命名/移动 设备,如果希望将设备放入子目录,则path应以 / 结尾,例如:hda 0:3 660 =drives/

[>path]:也是重命名/移动 设备,但是会在原位置创建一个指向新设备的符号链接。

[!]:不创建设备。

[<@|$|*> <command>]:可选项

@:表示command在创建设备后运行

$:表示command在删除设备前运行

*:表示command在创建后和删除设备前都运行

其中command可以是简单的命令,如mount、umount,也可以是shell脚本。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值