Où le verrouillage en mode lecture seule est-il appliqué avec les cartes SD? Est-ce que cela se fait physiquement à l'intérieur de la carte, dans le firmware des lecteurs ou dans le système d'exploitation? (Un autre endroit?)
Où le verrouillage en mode lecture seule est-il appliqué avec les cartes SD? Est-ce que cela se fait physiquement à l'intérieur de la carte, dans le firmware des lecteurs ou dans le système d'exploitation? (Un autre endroit?)
Réponses:
Si vous lisez le spécifications SD, partie 1 , spécification simplifiée de la couche physique , la section 4.3.6 «Gestion de la protection en écriture» indique
Trois méthodes de protection en écriture sont prises en charge dans la carte mémoire SD comme suit:
- Commutateur de protection en écriture mécanique (responsabilité de l'hôte uniquement)
-
Protection en écriture interne de la carte (responsabilité de la carte) - Opération de verrouillage de la carte de protection par mot de passe.Commutateur de protection en écriture mécanique
Une tablette coulissante mécanique sur le côté de la carte (reportez-vous à la partie 1 Addenda mécanique) sera utilisée par l'utilisateur pour indiquer qu'une carte donnée est protégée en écriture ou non. Si la tablette coulissante est positionnée de manière à ce que la fenêtre soit ouverte, cela signifie que la carte est protégée en écriture. Si la fenêtre est fermée, la carte n'est pas protégée en écriture. Un interrupteur approprié et adapté du côté du socket indiquera à l'hôte que la carte est protégée en écriture ou non. Il est de la responsabilité de l'hôte de protéger la carte. La position du commutateur de protection en écriture est inconnue des circuits internes de la carte.
(mon accent)
Une spécification de carte SD TOSHIBA dit
CMD28 SET_WRITE_PROT - La protection en écriture interne n'est pas implémentée.
CMD29 CLR_WRITE_PROT - La protection en écriture interne n'est pas implémentée.
CMD30 SEND_WRITE_PROT - La protection en écriture interne n'est pas implémentée.
…
2) Fonctions non prises en charge:
protection interne en écriture de la carte (en option dans la SPÉCIFICATION DE LA COUCHE PHYSIQUE 4.3.5.)
Dans mon travail, nous utilisons des cartes SD dans un système embarqué. Si nous essayons de démarrer avec une carte verrouillée, nous aurons une panique du noyau. Ce n'était pas un gros problème jusqu'à ce que nous obtenions un lot de cartes SD qui avaient des commutateurs d'écriture très lâches: le fait d'insérer la carte dans le lecteur était parfois suffisant pour déplacer le commutateur et verrouiller la carte. Beaucoup de gens ont commencé à essayer de proposer des options mécaniques pour empêcher cela, comme coller un morceau de bande sur chaque carte SD, mais à la fin nous avons corrigé cela en changeant une ligne de code source dans le noyau Linux. Maintenant, lorsqu'une carte SD est détectée avec le commutateur réglé en lecture seule, nous ignorons simplement le commutateur et écrivons volontiers des données sur la carte quand nous le voulons.
Cela vient de notre fausse confusion de backports, donc je doute que ce patch s'applique correctement n'importe où, mais si vous voulez expérimenter avec votre propre noyau, c'est un bon point de départ:
--- 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)
Si vous n'avez pas envie de patcher et de construire un noyau Linux mais que vous avez un appareil photo Canon P&S, vous pouvez utiliser CHDK pour écrire des fichiers (images) sur une carte SD protégée en écriture (lorsque l'appareil photo s'allume, l'OF vérifie la état du commutateur; lorsqu'il est réglé sur RO, il charge automatiquement le micrologiciel à partir de la carte SD. Cela permet aux utilisateurs de démarrer directement dans CHDK; puis CHDK ignore l'état du commutateur afin qu'il puisse toujours écrire des images sur la carte; voir par exemple http : //chdk.wikia.com/wiki/Bootable_SD_card ).
Vous pouvez également écrire sur une carte SD protégée en écriture sous Linux en désactivant le drapeau de lecture seule avec hdparm
et en remontant la carte:
$ 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
$
Cela dépend du lecteur. Le lecteur peut ignorer l'onglet de protection en écriture. Le lecteur peut avoir un micrologiciel qui désactive l'écriture si l'onglet de protection en écriture est engagé. Le lecteur peut avoir un pilote logiciel qui désactive l'écriture si l'onglet de protection en écriture est engagé. En pratique, la grande majorité des lecteurs le font en firmware.
C'est un commutateur basé sur le matériel. C'est une fonctionnalité qui bloque simplement toutes les opérations d'écriture.
Si vous changez, vous ne pouvez pas:
Déplacer des fichiers depuis ou vers la carte SD
Supprimer des fichiers de la carte SD
Copiez des fichiers sur la carte SD
Formatez la carte SD
EDIT Lire la suite ici .