下午好,
我有一个项目,由于SD Detect引脚上的接触不良,SD卡可能会暂时断开连接。我希望能够检查它是否已卸载并在软件中重新安装。
我的SD卡分区为/dev/mmcblk1p1
它最初是在Linux启动时自动挂载的
如果我执行umount /mnt/storage
命令,然后移除SD卡,我可以重新插入它,并执行mount /dev/mmcblk1p1 /mnt/storage
无问题
但是,如果我先删除SD卡,而不是umount
,则执行mount /dev/mmcblk1p1 /mnt/storage
会导致
mounting /dev/mmcblk1p1 on /mnt/storage failed: No such device or address
我试过了
umount /mnt/storage
rmdir /mnt/storage
mkdir /mnt/storage
在未卸载的情况下移除SD卡时,始终会出现此错误
我正在使用在Imx6上运行的Yocto发行版。
答案 0 :(得分:2)
如果SD卡是由C ++应用程序写入的,则可以强行删除它,但在该应用程序关闭文件描述符之前无法卸载(ed)。应用程序本身不需要关闭。
此解决方案适用于机械应用,其中SD卡(或其他闪存介质)可能会暂时断开连接,并且需要由应用程序恢复写入:
答案:
强行取出SD卡
检测到SD卡已断开连接
最简单的方法是检查SD卡'装载尺寸
read file "/sys/block/mmcblk1/size" and check it's > 0
请注意,在移除卡之前无需关闭这些内容。 Linux足够强大,可以写入不存在的文件。但这需要在SD卡卸载之前完成,否则umount将失败,这就是造成我的问题的原因。当SD卡已经重新插入时,也无法运行Umount。
卸载SD卡
系统(" umount / mnt / storage");'
现在重新插入SD卡
检测到卡已重新插入
重新安装卡
系统(" mount / dev / mmcblk1p1 / mnt / storage")
答案 1 :(得分:0)
如果你的系统上运行了udev,你可以让udev的安装脚本自动卸载你的设备。
因此,请在/etc/udev/scripts/mount.sh
中添加以下内容:
UMOUNT="/bin/umount"
if [ "$ACTION" = "remove" ] && [ -x "$UMOUNT" ] && [ -n "$DEVNAME" ]; then
for mnt in `cat /proc/mounts | grep "$DEVNAME" | cut -f 2 -d " " `; do
$UMOUNT $mnt
done
fi
此外,您必须告诉udev在添加和删除的设备上运行该安装脚本。因此,我创建了/etc/udev/rules.d/autounmount.rules
:
SUBSYSTEM=="block", ACTION=="remove" RUN+="/etc/udev/scripts/mount.sh"
使用Yocto" Daisy"这对我来说很好。在armv7平台上。