SD卡:如何强制内核再次读取WP引脚而不移除SD卡

我有以下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卡。

我试图卸载,然后再次登上。 我试图使用重新安装选项: mount -o remount,rw /dev/mmcblk0p1这似乎工作,但分区仍然标记为ro时运行mount命令:

 /dev/mmcblk0p1 on /mnt/sdcard type ext4 (ro,relatime,data=ordered) 

更新:

问题更为确切:这是在定制硬件上,ARM处理器上的WP(写保护)引脚连接到处理器的输出。

在启动时,这个输出将SD卡控制器设置为只读模式,在初始化之后,这个输出被反转以允许写入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 

我的问题发生了变化:如何强制内核再次读取WP引脚而不移除SD卡?

我可以通过使用以下命令重新设置此卡的控制器来读取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问题。

  • 比较开机时SD卡的dmesg输出和dmesg输出,之后再重新插入卡。 看来控制器在启动时无法正确初始化,但是稍后会消失。 找出这个间歇性的问题可能会为你解决。