O mecanismo de bloqueio em um hardware, firmware ou software de cartão SD (driver, sistema operacional) é aplicado?

15

Onde está o bloqueio para o modo somente leitura imposto com cartões SD? Isso é feito dentro do próprio cartão fisicamente, no firmware dos leitores ou no sistema operacional? (Algum outro lugar?)

    
por Jane Panda 06.11.2011 / 16:18

4 respostas

19

Se você ler as Especificações SD Parte 1 - Especificação Simplificada da Camada Física , seção 4.3.6 "Escrever Proteger a gestão ", diz

Three write protect methods are supported in the SD Memory Card as follows:
- Mechanical write protect switch (Host responsibility only)
- Card internal write protect (Card's responsibility)
- Password protection card lock operation.

Mechanical Write Protect Switch

A mechanical sliding tablet on the side of the card (refer to the Part 1 Mechanical Addenda) will be used by the user to indicate that a given card is write protected or not. If the sliding tablet is positioned in such a way that the window is open it means that the card is write protected. If the window is close the card is not write-protected. A proper, matched, switch on the socket side will indicate to the host that the card is write-protected or not. It is the responsibility of the host to protect the card. The position of the write protect switch is unknown to the internal circuitry of the card.

(minha ênfase)

Uma Especificação do cartão SD da TOSHIBA diz

CMD28 SET_WRITE_PROT - Internal Write Protection is not implemented.
CMD29 CLR_WRITE_PROT - Internal Write Protection is not implemented.
CMD30 SEND_WRITE_PROT - Internal Write Protection is not implemented.

2)Non Supported Functions:
Card ‘s Internal Write Protect (Optional in PHYSICAL LAYER SPECIFICATION 4.3.5.)

    
por 06.11.2011 / 17:31
14

No meu trabalho, usamos cartões SD em um sistema embarcado. Se tentarmos inicializar com uma placa bloqueada, obteremos um kernel panic. Isso não foi grande coisa até termos um lote de cartões SD que tinham interruptores de gravação muito soltos: o ato de inserir o cartão no leitor às vezes era suficiente para mover o interruptor e travar o cartão. Muitas pessoas começaram a tentar criar opções mecânicas para evitar isso, como colocar um pedaço de fita em cada cartão SD, mas no final consertamos isso mudando uma linha de código-fonte no kernel do Linux. Agora, quando um cartão SD é detectado com o switch configurado para somente leitura, simplesmente ignoramos o switch e, felizmente, gravamos dados no cartão sempre que desejamos.

Isto é a partir da nossa louca mistura de backports, então duvido que este patch seja aplicado em qualquer lugar, mas se você quiser experimentar o seu próprio kernel, este é um bom ponto de partida:

--- 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)

Se você não quiser aplicar patches e criar um kernel Linux, mas tiver uma câmera Canon P & S, use CHDK para gravar arquivos (fotos) em um cartão SD protegido contra gravação (quando a câmera é ligada, o OF verifica o estado do comutador; quando definido para RO, ele carregará automaticamente o firmware a partir do cartão SD. permite que os usuários inicializem diretamente no CHDK e, em seguida, o CHDK ignora o estado do comutador para que ele ainda possa gravar imagens no cartão, por exemplo, link ).

Você também pode gravar em um cartão SD protegido contra gravação no Linux desativando o sinalizador somente leitura com hdparm e remontando o cartão:

$ 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
$ 
    
por 07.11.2011 / 21:38
4

Depende do leitor. O leitor pode ignorar a guia de proteção contra gravação. O leitor pode ter um firmware que desativa a gravação se a guia de proteção contra gravação estiver ativada. O leitor pode ter um driver de software que desabilita a gravação se a guia de proteção contra gravação estiver ativada. Na prática, a grande maioria dos leitores faz isso no firmware.

    
por 06.11.2011 / 17:17
-3

É um switch baseado em hardware. Seu recurso apenas bloqueia qualquer operação de gravação.

Se trocou, você não pode:

  • Mova arquivos de ou para o cartão SD

  • Remover arquivos do cartão SD

  • Copie arquivos para o cartão SD

  • Formate o cartão SD

EDITAR Leia mais aqui .

    
por 06.11.2011 / 16:25