2016-03-15 86 views
3

再次读取WP针,我有以下udev规则挂载SD卡到/ mnt/SD卡的第一个分区。SD卡:如何强制内核不删除SD卡

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 

此代码是否正常工作和分隔安装读写(RW)当SD卡被插入。

但如果SD卡已经出现在开机后,分区挂载只读(RO)。

在这种情况下,我不能而不移除和重新插入手动SD卡挂载分区读写。

我试图卸载,然后重新安装。我试图用装载选项:mount -o remount,rw /dev/mmcblk0p1这似乎是工作,但在运行mount命令时,该分区仍被标记为RO:

/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卡?

+0

你有没有试过,mount_result ='$安装DEVNAME到/ mnt/SD卡-o RW 2>&1' –

回答

2

我能够通过此卡使用这些命令控制器复位再次读取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 
1

有几件事情我会尝试:

  • 运行fsck /dev/mmcblk0p1。在rw模式下未能挂载分区通常是不干净的文件系统状态的标志。这里可能不是这种情况,因为您可以通过重新插卡来安装它,但最好是安全的。

  • 尝试通过/etc/fstab安装/dev/mmcblk0p1以查看是否有效。我知道这不是一个明确的解决方案,但至少你可以从udev的问题中分离出mount的问题。

  • 比较dmesg在开机时输出有关SD卡的信息,dmesg之后重新插入卡时输出。看起来控制器在引导时未能正确初始化,但问题在以后消失。找出那些间歇性问题可能会为你解决。

+1

感谢外,fsck和fstab点没有工作。但问题是:启动后WP引脚更改。现在我需要知道如何在不拔出SD卡的情况下强制内核重新加载sdcard。 –

+0

@ leszek.hanusz嘿,我很高兴你解决了你的问题。并感谢您分享您的解决方案。希望upvotes会尽快退还您的赏金! –