[英]SD card: how to force the kernel to read the WP pin again without removing the sdcard
我有以下udev规则将SD卡的第一个分区挂载到/ mnt / sdcard。
KERNEL=="mmcblk0p1", SUBSYSTEMS=="mmc", ATTRS{name}=="?*", ATTRS{serial}=="?*", ENV{ID_NAME}="$attr{name}", ENV{ID_SERIAL}="$attr{serial}", SYMLINK+="sdcard", RUN+="/usr/bin/mount_sdcard"
KERNEL=="mmcblk0", ACTION=="remove", RUN+="/usr/bin/unmount_sdcard"
我的/usr/bin/mount_sdcard
可执行文件是:
#!/bin/sh
# log event
logger -t mount_sdcard -p user.warn "New SD Card detected"
# mount to /mnt/sdcard
mount_result=`mount $DEVNAME /mnt/sdcard 2>&1`
# On errors, send error to log
echo $mount_result | logger -t mount_sdcard -p user.error
if [ "x$mount_result" = "x" ]
then
# print filesystem type
stat -f /mnt/sdcard | grep Type | cut -d: -f4 | logger -t mount_sdcard -p user.warn
# print space left on device
df -h /dev/sdcard | logger -t mount_sdcard -p user.warn
fi
此代码工作正常,插入SD卡时分区挂载读写(rw)。
但是如果sd卡在启动时已经存在,则分区以只读方式挂载(ro)。
在这种情况下,我无法挂载分区读写而无需手动删除和重新插入SD卡。
我试图卸载然后重新安装。 我尝试使用remount选项: mount -o remount,rw /dev/mmcblk0p1
这似乎可以工作但是在运行mount
命令时分区仍然标记为ro:
/dev/mmcblk0p1 on /mnt/sdcard type ext4 (ro,relatime,data=ordered)
更新:
问题更加精确:这是在自定义硬件上,其中ARM处理器上的WP(写保护)引脚连接到处理器的输出。
在引导时,此输出将sdcard控制器设置为只读模式,在init之后,此输出被反转以允许写入SD卡。 问题是内核只会在启动时和插入卡时尝试读取此WP引脚。
==>启动内核SD卡控制器将卡设置为ro:
kernel: [ 1.723728] mmc0: new high speed SD card at address 59b4
kernel: [ 1.738262] mmcblk0: mmc0:59b4 USD 1.87 GiB (ro)
在WP引脚更改并且卡被移除/重新插入后,内核SD卡控制器将卡设置为rw:
kernel: [ 527.931457] mmc0: new high speed SD card at address 59b4
kernel: [ 527.943988] mmcblk0: mmc0:59b4 USD 1.87 GiB
我的问题发生了变化:如何在不删除SD卡的情况下强制内核再次读取WP引脚?
通过使用以下命令重置此卡的控制器,我能够再次读取WP引脚:
首先得到控制器:
$ readlink /sys/block/mmcblk0
../devices/soc0/soc/2100000.aips-bus/2194000.usdhc/mmc_host/mmc0/mmc0:59b4/block
然后取消绑定并绑定卡:
$ echo 2194000.usdhc > /sys/bus/platform/drivers/sdhci-esdhc-imx/unbind
$ echo 2194000.usdhc > /sys/bus/platform/drivers/sdhci-esdhc-imx/bind
我会尝试一些事情:
运行fsck /dev/mmcblk0p1
。 无法在rw
模式下挂载分区通常是不清洁文件系统状态的标志。 这可能不是这里的情况,因为您可以通过重新插入卡来安装它,但最好是安全的。
尝试通过/etc/fstab
挂载/dev/mmcblk0p1
以查看是否有效。 我知道它不会是一个明确的解决方案,但至少你可以通过udev
解决mount
问题。
比较dmesg
关于在开机时与SD卡输出dmesg
输出,当你以后重新插入卡。 似乎控制器在启动时未能正确初始化,但问题随后会消失。 找出那个间歇性问题可能会为您解决。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.