簡體   English   中英

SD卡:如何在不刪除SD卡的情況下強制內核再次讀取WP引腳

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM