Wo ist die Sperre für den Nur-Lese-Modus bei SD-Karten durchgesetzt ? Wird dies physisch in der Karte selbst, in der Firmware der Lesegeräte oder im Betriebssystem durchgeführt? (Ein anderer Ort?)
Wo ist die Sperre für den Nur-Lese-Modus bei SD-Karten durchgesetzt ? Wird dies physisch in der Karte selbst, in der Firmware der Lesegeräte oder im Betriebssystem durchgeführt? (Ein anderer Ort?)
Antworten:
Wenn Sie die SD-Spezifikationen Teil 1 Physical Layer Simplified Specification lesen , heißt es in Abschnitt 4.3.6 "Write Protect Management"
Auf der SD-Speicherkarte werden drei Schreibschutzmethoden unterstützt:
- Mechanischer Schreibschutzschalter (nur Hostverantwortung)
- Interner Schreibschutz der Karte (Verantwortung der Karte)
- Kennwortschutz-Kartensperrvorgang.Mechanischer Schreibschutzschalter
Ein mechanisches Schiebetablett an der Seite der Karte (siehe Teil 1 Mechanische Ergänzungen) wird vom Benutzer verwendet, um anzuzeigen, dass eine bestimmte Karte schreibgeschützt ist oder nicht. Wenn das Schiebetablett so positioniert ist, dass das Fenster geöffnet ist, bedeutet dies, dass die Karte schreibgeschützt ist. Wenn das Fenster geschlossen ist, ist die Karte nicht schreibgeschützt. Ein passender Schalter auf der Sockelseite zeigt dem Host an, dass die Karte schreibgeschützt ist oder nicht. Es liegt in der Verantwortung des Hosts, die Karte zu schützen. Die Position des Schreibschutzschalters ist der internen Schaltung der Karte nicht bekannt.
(meine Betonung)
Eine TOSHIBA SD-Kartenspezifikation besagt
CMD28 SET_WRITE_PROT - Interner Schreibschutz ist nicht implementiert.
CMD29 CLR_WRITE_PROT - Interner Schreibschutz ist nicht implementiert.
CMD30 SEND_WRITE_PROT - Interner Schreibschutz ist nicht implementiert.
…
2) Nicht unterstützte Funktionen:
Interner Schreibschutz der Karte (optional in PHYSICAL LAYER SPECIFICATION 4.3.5.)
Bei meiner Arbeit verwenden wir SD-Karten in einem eingebetteten System. Wenn wir versuchen, mit einer gesperrten Karte hochzufahren, kommt es zu einer Kernel-Panik. Dies war keine große Sache, bis wir einen Stapel SD-Karten mit sehr losen Schreibschaltern bekamen: Das Einsetzen der Karte in das Lesegerät reichte manchmal aus, um den Schalter zu bewegen und die Karte zu sperren. Viele Leute versuchten, mechanische Möglichkeiten zu finden, um dies zu verhindern, wie etwa ein Stück Klebeband auf jede SD-Karte zu kleben, aber am Ende haben wir dies durch Ändern einer Quellcodezeile im Linux-Kernel behoben. Wenn nun eine SD-Karte erkannt wird, deren Schalter auf Nur Lesen eingestellt ist, ignorieren wir den Schalter einfach und schreiben glücklich Daten auf die Karte, wann immer wir wollen.
Das liegt an unserer verrückten Verwechslung von Backports, daher bezweifle ich, dass dieser Patch überall sauber angewendet werden kann. Wenn Sie jedoch mit Ihrem eigenen Kernel experimentieren möchten, ist dies ein guter Ausgangspunkt:
--- 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)
Wenn Sie keine Lust haben, einen Linux-Kernel zu patchen und zu erstellen, aber eine Canon P & S-Kamera haben, können Sie mit CHDK Dateien (Bilder) auf eine schreibgeschützte SD-Karte schreiben (beim Einschalten der Kamera überprüft die OF die Status des Switches: Wenn RO eingestellt ist, wird die Firmware automatisch von der SD-Karte geladen, sodass Benutzer direkt in CHDK booten können. Dann ignoriert CHDK den Status des Switches, sodass weiterhin Bilder auf die Karte geschrieben werden können (siehe z. B. http) : //chdk.wikia.com/wiki/Bootable_SD_card ).
Sie können auch unter Linux auf eine schreibgeschützte SD-Karte schreiben, indem Sie das Readonly-Flag deaktivieren hdparm
und die Karte erneut einbinden :
$ 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
$
Es kommt auf den Leser an. Der Leser kann die Schreibschutzlasche ignorieren. Das Lesegerät verfügt möglicherweise über eine Firmware, die das Schreiben deaktiviert, wenn die Schreibschutzlasche aktiviert ist. Das Lesegerät verfügt möglicherweise über einen Softwaretreiber, der das Schreiben deaktiviert, wenn die Schreibschutzlasche aktiviert ist. In der Praxis macht die überwiegende Mehrheit der Leser dies in Firmware.
Es ist ein Hardware-basierter Switch. Es ist eine Funktion, die nur Schreibvorgänge blockiert.
Wenn geschaltet, können Sie nicht:
Verschieben Sie Dateien von oder auf die SD-Karte
Entfernen Sie Dateien von der SD-Karte
Kopieren Sie die Dateien auf die SD-Karte
Formatieren Sie die SD-Karte
EDIT Lesen Sie hier mehr .