Onde a trava para o modo somente leitura é aplicada com cartões SD? Isso é feito dentro do próprio cartão fisicamente, no firmware dos leitores ou no sistema operacional? (Algum outro lugar?)
Onde a trava para o modo somente leitura é aplicada com cartões SD? Isso é feito dentro do próprio cartão fisicamente, no firmware dos leitores ou no sistema operacional? (Algum outro lugar?)
Respostas:
Se você ler a especificação simplificada da camada física das especificações SD, parte 1 , a seção 4.3.6 "Gerenciamento de proteção contra gravação" diz
Três métodos de proteção contra gravação são suportados no cartão de memória SD, como segue:
- Chave mecânica de proteção contra gravação (somente responsabilidade do host
)
- Proteção interna contra gravação do cartão (responsabilidade do cartão) - Operação de bloqueio do cartão de proteção por senha.Interruptor de proteção contra gravação mecânica
Uma mesa deslizante mecânica na lateral do cartão (consulte os Adendos Mecânicos da Parte 1) será usada pelo usuário para indicar que um determinado cartão está protegido contra gravação ou não. Se a mesa deslizante estiver posicionada de forma a abrir a janela, significa que o cartão está protegido contra gravação. Se a janela estiver fechada, o cartão não está protegido contra gravação. Um interruptor adequado e correspondente no lado do soquete indicará ao host que o cartão está protegido contra gravação ou não. É de responsabilidade do host proteger o cartão. A posição do interruptor de proteção contra gravação é desconhecida no circuito interno do cartão.
(minha ênfase)
Uma especificação do cartão SD da TOSHIBA diz
CMD28 SET_WRITE_PROT - A proteção contra gravação interna não está implementada.
CMD29 CLR_WRITE_PROT - A proteção contra gravação interna não está implementada.
CMD30 SEND_WRITE_PROT - A proteção contra gravação interna não está implementada.
...
2) Funções não suportadas:
Proteção interna contra gravação do cartão (opcional em ESPECIFICAÇÃO DE CAMADA FÍSICA 4.3.5.)
No meu trabalho, usamos cartões SD em um sistema incorporado. Se tentarmos inicializar com uma placa que está bloqueada, teremos um pânico no kernel. Isso não foi grande coisa até termos um lote de cartões SD com interruptores de gravação muito frouxos: o ato de inserir o cartão no leitor às vezes era suficiente para mover o comutador e travar o cartão. Muitas pessoas começaram a tentar opções mecânicas para evitar isso, como colar um pedaço de fita em cada cartão SD, mas no final, consertamos isso alterando uma linha de código-fonte no kernel do Linux. Agora, quando um cartão SD é detectado com o comutador configurado como somente leitura, simplesmente ignoramos o comutador e gravamos dados no cartão sempre que desejamos.
Isso é do nosso louco quebra de backports, então duvido que esse patch se aplique de maneira limpa em qualquer lugar, mas se você quiser experimentar 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 deseja aplicar patches e criar um kernel Linux, mas possui uma câmera Canon P&S, pode usar o CHDK para gravar arquivos (fotos) em um cartão SD protegido contra gravação (quando a câmera é ligada, o OF verifica estado do comutador; quando definido como RO, ele carrega automaticamente o firmware do cartão SD. Isso permite que os usuários inicializem diretamente no CHDK; depois, o CHDK ignora o estado do comutador para que ainda possa gravar imagens no cartão; consulte, por exemplo, http : //chdk.wikia.com/wiki/Bootable_SD_card ).
Você também pode gravar em um cartão SD protegido contra gravação no Linux desativando o sinalizador somente leitura 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
$
Depende do leitor. O leitor pode ignorar a guia de proteção contra gravação. O leitor pode ter um firmware que desabilite a gravação se a guia de proteção contra gravação estiver ativada. O leitor pode ter um driver de software que desabilite 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.
É um switch baseado em hardware. É um recurso que apenas bloqueia qualquer operação de gravação.
Se alternado, você não pode:
Mover arquivos de ou para o cartão SD
Remova os arquivos do cartão SD
Copie arquivos para o cartão SD
Formate o cartão SD
EDIT Leia mais aqui .