回答:
SD仕様パート1物理層簡易仕様を読むと、セクション4.3.6「書き込み保護管理」に記載されています
SDメモリカードでは、次の3つの書き込み保護方法がサポートされています
。-機械的書き込み保護スイッチ(ホスト側のみ)
-カード内部書き込み保護(カード側)
-パスワード保護カードロック操作。機械的書き込み保護スイッチ
カードの側面にある機械的なスライド式タブレット(パート1の機械的補遺を参照)は、特定のカードが書き込み保護されているかどうかを示すために使用されます。スライディングタブレットがウィンドウが開くように配置されている場合、カードは書き込み保護されています。ウィンドウが閉じている場合、カードは書き込み保護されていません。ソケット側の適切で一致したスイッチは、カードが書き込み保護されているかどうかをホストに示します。カードを保護するのはホストの責任です。書き込み保護スイッチの位置は、カードの内部回路に認識されていません。
(私の強調)
A TOSHIBA SDカードの仕様は言います
CMD28 SET_WRITE_PROT-内部書き込み保護は実装されていません。
CMD29 CLR_WRITE_PROT-内部書き込み保護は実装されていません。
CMD30 SEND_WRITE_PROT-内部書き込み保護は実装されていません。
…
2)サポートされていない機能:
カードの内部書き込み保護(PHYSICAL LAYER SPECIFICATION 4.3.5のオプション)
私の仕事では、組み込みシステムでSDカードを使用しています。ロックされているカードで起動しようとすると、カーネルパニックが発生します。これは、書き込みスイッチが非常にゆるいSDカードのバッチを入手するまで、大したことではありませんでした。カードをリーダーに挿入するだけで、スイッチを動かしてカードをロックすることができました。多くの人々は、各SDカードにテープを貼り付けるなど、これを防ぐための機械的なオプションを考え出そうとしましたが、最終的にはLinuxカーネルのソースコードの1行を変更することでこれを修正しました。スイッチが読み取り専用に設定された状態で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)。
Linuxで読み取り専用フラグをオフにしhdparm
てカードを再マウントすることで、書き込み保護されたSDカードに書き込むこともできます。
$ 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カードをフォーマットする
編集 詳細はこちら。