系统相关
首页 > 系统相关> > linux-SD卡:如何在不移除sdcard的情况下强制内核再次读取WP引脚

linux-SD卡:如何在不移除sdcard的情况下强制内核再次读取WP引脚

作者:互联网

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

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

更新:

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

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

标签:embedded-linux,mount,udev,automount,linux
来源: https://codeday.me/bug/20191118/2032009.html