SD カードの最初のパーティションを /mnt/sdcard にマウントするための次の udev ルールがあります。
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
私の質問の変更: SD カードを取り外さずに、カーネルに WP ピンを再度読み取らせるにはどうすればよいですか?