下午好,
我有一个项目,SD卡可能会变得暂时断开,因为在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卡的情况下移除SD卡时,总是会出现此错误
我使用的是在Imx6上运行的Yocto发行版。
发布于 2016-02-25 06:24:41
如果SD卡是由C++应用程序写入的,则可以强制将其移除,但在该应用程序关闭文件描述符之前,不能将其卸载。应用程序本身不需要关闭。
此解决方案适用于机械应用,其中SD卡(或其他闪存介质)可能会暂时断开连接,并且需要由应用程序恢复写入:
答案:
检测SD卡已断开连接
最简单的方法是检查SD卡的安装大小
read file "/sys/block/mmcblk1/size" and check it's > 0请注意,在移除卡之前,没有必要关闭这些设备。Linux足够健壮,可以写入不存在的文件。但这需要在卸载SD卡之前完成,否则卸载将失败,这就是导致我的问题的原因。当SD卡已经重新插入时,也不能运行Umount。
system("umount /mnt/storage");'
SD卡
系统(“装载/开发/mmcblk1p1 /mnt/storage")
发布于 2016-02-24 20:01:36
如果您的系统上正在运行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"这对我在armv7平台上使用Yocto "Daisy“很好。
https://stackoverflow.com/questions/35590945
复制相似问题