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