2016-03-15 8 views
3

У меня есть следующие правила udev для монтирования первого раздела SD-карты на/mnt/sdcard.SD-карта: как заставить ядро ​​читать WP-контакт снова без удаления 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 команду:

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

Update:

Проблема является более точным: Это на специализированном оборудовании, где пин WP (write protect) на процессоре ARM подключается к выходу процессора.

При загрузке этот выход устанавливает контроллер sdcard в режиме только для чтения, и после инициализации этот выход инвертируется, чтобы разрешить запись на SD-карту. Проблема в том, что ядро ​​попытается прочитать этот WP-контакт только при загрузке и при вставленной карте.

==> при загрузке контроллер ядра с.о. набор карт карты как Ro:

kernel: [ 1.723728] mmc0: new high speed SD card at address 59b4 
kernel: [ 1.738262] mmcblk0: mmc0:59b4 USD 1.87 GiB (ro) 

И после того, как изменения РГ штифта и карты удаляется/клеммным блоком, контроллер ядра SD-карта будет установить карту в рв:

kernel: [ 527.931457] mmc0: new high speed SD card at address 59b4 
kernel: [ 527.943988] mmcblk0: mmc0:59b4 USD 1.87 GiB 

Мои изменения вопрос: как заставить ядро ​​читать WP булавку снова, не снимая сд карты?

+0

вы пробовали, mount_result = 'Монтирование $ имя_устройства/шоссе/SDCard -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 часто является признаком состояния нечистой файловой системы. Это, вероятно, не так, потому что вы можете установить его в соответствие, перегружая карту, но лучше быть в безопасности.

  • попытайтесь установить /dev/mmcblk0p1 через /etc/fstab, чтобы узнать, работает ли это. Я понимаю, что это не будет окончательное решение, но по крайней мере вы выделили бы проблемы с mount из проблем с udev.

  • сравнение dmesg выход относительно SD-карты при загрузке с dmesg выход при замене карты. Кажется, что контроллер во время загрузки неправильно инициализируется, но проблема исчезнет позже. Выяснение того, что это проблема, может решить ее для вас.

+1

Спасибо, то Fsck и Точки fstab не работают. Но проблема найдена: WP-штырь изменяется после загрузки. Теперь мне нужно знать, как принудительно перезагрузить sdcard ядром, не отсоединяя SD-карту. –

+0

@ leszek.hanusz Эй, я рад, что вы решили свою проблему. И спасибо за то, что поделились своим решением. Надеюсь, upvotes вернут вашу награду достаточно скоро! –