Где замокли только для чтения режима принудительного с SD карт? Делается ли это внутри самой карты физически, в прошивке ридеров или в ОС? (Какое-то другое место?)
4 ответа
Если вы читаете спецификацию SD, часть 1, Упрощенная спецификация физического уровня, в разделе 4.3.6 "Управление защитой от записи" говорится
На карте памяти SD поддерживаются три метода защиты от записи:
- Механический переключатель защиты от записи (только для хозяина)
- Внутренняя защита от записи (ответственность за карту)
- Операция блокировки карты защиты паролем.Механический переключатель защиты от записи
Пользователь будет использовать механическую скользящую табличку на боковой стороне карты (см. Механические дополнения части 1), чтобы указать, что данная карта защищена от записи или нет. Если скользящий планшет расположен таким образом, что окно открыто, это означает, что карта защищена от записи. Если окно закрыто, карта не защищена от записи. Правильный, согласованный переключатель на стороне сокета будет указывать хосту, что карта защищена от записи или нет. Хозяин несет ответственность за защиту карты. Положение переключателя защиты от записи неизвестно внутренней схеме платы.
(мой акцент)
Спецификация карты памяти TOSHIBA SD гласит:
CMD28 SET_WRITE_PROT - Внутренняя защита от записи не реализована.
CMD29 CLR_WRITE_PROT - Внутренняя защита от записи не реализована.
CMD30 SEND_WRITE_PROT - Внутренняя защита от записи не реализована.
...
2) Неподдерживаемые функции:
Внутренняя защита карты от записи (Необязательно в ФИЗИЧЕСКОМ УРОВНЕ СПЕЦИФИКАЦИИ 4.3.5.)
На моей работе мы используем SD-карты во встроенной системе. Если мы попытаемся загрузиться с карты, которая заблокирована, мы получим панику ядра. Это не имело большого значения, пока мы не получили партию SD-карт, у которых были очень свободные переключатели записи: иногда достаточно было вставить карту в считыватель, чтобы переместить переключатель и заблокировать карту. Многие люди начали пытаться придумать механические опции, чтобы предотвратить это, например приклеить кусок ленты на каждую SD-карту, но в итоге мы исправили это, изменив одну строку исходного кода в ядре Linux. Теперь, когда SD-карта обнаружена с переключателем, установленным только для чтения, мы просто игнорируем переключатель и с радостью записываем данные на карту, когда захотим.
Это из-за нашей безумной ошибки в бэкпорте, поэтому я сомневаюсь, что этот патч будет применяться везде, но если вы хотите поэкспериментировать с собственным ядром, это хорошая отправная точка:
--- include/linux/mmc/card.h (revision 1423)
+++ include/linux/mmc/card.h (revision 1424)
@@ -125,7 +125,7 @@
#define mmc_card_blockaddr(c) ((c)->state & MMC_STATE_BLOCKADDR)
#define mmc_card_set_present(c) ((c)->state |= MMC_STATE_PRESENT)
-#define mmc_card_set_readonly(c) ((c)->state |= MMC_STATE_READONLY)
+#define mmc_card_set_readonly(c) {printk("Ignoring MMC read-only switch\n");}
#define mmc_card_set_highspeed(c) ((c)->state |= MMC_STATE_HIGHSPEED)
#define mmc_card_set_blockaddr(c) ((c)->state |= MMC_STATE_BLOCKADDR)
Если вам не нужно вносить исправления и создавать ядро Linux, но у вас есть камера Canon P & S, вы можете использовать CHDK для записи файлов (изображений) на SD-карту с защитой от записи (когда камера включается, OF проверяет состояние переключателя, при установке на RO он автоматически загрузит прошивку с SD-карты. Это позволяет пользователям загружаться непосредственно в CHDK; затем CHDK игнорирует состояние коммутатора, поэтому он все еще может записывать изображения на карту; см., например, http://chdk.wikia.com/wiki/Bootable_SD_card).
Вы также можете выполнить запись на SD-карту с защитой от записи в Linux, отключив флаг readonly с помощью hdparm
и повторно подключив карту:
$ mount | grep mmc
/dev/mmcblk0p1 on /media/hello type ext3 (ro,nosuid,nodev,relatime,errors=continue,user_xattr,acl,barrier=1,data=ordered,uhelper=udisks)
$ touch /media/hello/test
touch: cannot touch `/media/hello/test': Read-only file system
$ sudo hdparm -r /dev/mmcblk0p1
/dev/mmcblk0p1:
readonly = 1 (on)
$ sudo hdparm -r0 /dev/mmcblk0p1
/dev/mmcblk0p1:
setting readonly to 0 (off)
readonly = 0 (off)
$ touch /media/hello/test
touch: cannot touch `/media/hello/test': Read-only file system
$ sudo mount -t ext3 -o rw,remount /dev/mmcblk0p1 /media/hello
$ touch /media/hello/test
$ echo goodbye > /media/hello/test
$ cat /media/hello/test
goodbye
$ sudo umount /dev/mmcblk0p1
$ sudo mount /dev/mmcblk0p1 /mnt
mount: block device /dev/mmcblk0p1 is write-protected, mounting read-only
$ cat /mnt/test
goodbye
$ touch /mnt/test
touch: cannot touch `/mnt/test': Read-only file system
$
Это зависит от читателя. Читатель может игнорировать вкладку защиты от записи. Считыватель может иметь встроенное ПО, которое отключает запись, если активирована вкладка защиты от записи. Считыватель может иметь программный драйвер, который отключает запись, если активирована вкладка защиты от записи. На практике подавляющее большинство читателей делают это в прошивках.
Это аппаратный переключатель. Его функция просто блокирует любые операции записи.
Если переключено, вы не можете:
Переместить файлы с или на SD-карту
Удалить файлы с SD-карты
Скопируйте файлы на SD-карту
Отформатируйте SD-карту
РЕДАКТИРОВАТЬ Подробнее здесь.