SD 카드 하드웨어, 펌웨어 또는 소프트웨어 (드라이버, OS)의 잠금 메커니즘이 적용됩니까?


16

SD 카드 에서 읽기 전용 모드 잠금은 어디에 적용 됩니까? 이것은 카드 자체에서 물리적으로, 리더의 펌웨어 또는 OS에서 수행됩니까? (다른 곳?)

답변:


20

SD 사양 1 부 물리 계층 단순화 사양 을 읽으면 4.3.6 절 "쓰기 방지 관리"에 나와 있습니다.

SD 메모리 카드에서는 다음과 같은 세 가지 쓰기 방지 방법이 지원됩니다
.-기계적 쓰기 방지 스위치 (호스트 책임 만 해당)
-카드 내부 쓰기 방지 (카드 책임)
-암호 보호 카드 잠금 작동.

기계식 쓰기 방지 스위치

사용자는 카드 측면의 기계식 슬라이딩 태블릿 (1 부 기계식 부록 참조)을 사용하여 지정된 카드가 쓰기 방지되어 있는지 여부를 나타냅니다. 슬라이딩 태블릿이 창이 열리도록 배치 된 경우 카드가 쓰기 방지되어 있음을 의미합니다. 창이 닫히면 카드가 쓰기 방지되어 있지 않은 것입니다. 소켓 쪽의 스위치가 올바르게 일치하면 호스트에 카드가 쓰기 방지되어 있는지 여부가 표시됩니다. 카드를 보호하는 것은 호스트의 책임입니다. 쓰기 방지 스위치의 위치는 카드의 내부 회로에 알려져 있지 않습니다.

(내 강조)

TOSHIBA SD 카드 사양은 말한다

CMD28 SET_WRITE_PROT-내부 쓰기 방지가 구현되지 않았습니다.
CMD29 CLR_WRITE_PROT-내부 쓰기 방지가 구현되지 않았습니다.
CMD30 SEND_WRITE_PROT-내부 쓰기 방지가 구현되지 않았습니다.

2) 지원되지 않는 기능 :
카드의 내부 쓰기 보호 (물리적 계층 사양 4.3.5에서 선택 사항)


그러나 나는 다음과 같이 궁금합니다
tsenapathy

14

우리는 임베디드 시스템에서 SD 카드를 사용합니다. 잠겨있는 카드로 부팅하려고하면 커널 패닉이 발생합니다. 쓰기 스위치가 매우 느슨한 SD 카드를 얻을 때까지 이것은 큰 문제가되지 않았습니다. 카드를 리더에 삽입하는 행위는 때때로 스위치를 움직이고 카드를 잠그기에 충분했습니다. 많은 사람들이 각 SD 카드에 테이프 조각을 붙이는 것과 같이 이것을 막기 위해 기계적 옵션을 고안하려고 시도했지만 결국 Linux 커널에서 한 줄의 소스 코드를 변경 하여이 문제를 해결했습니다. 이제 스위치가 읽기 전용으로 설정된 상태에서 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 ).

다음 hdparm과 같이 카드 와 함께 읽기 전용 플래그를 끄고 다시 마운트하여 Linux에서 쓰기 방지 된 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
$ 

3

독자에 따라 다릅니다. 리더는 쓰기 방지 탭을 무시할 수 있습니다. 리더에는 쓰기 방지 탭이 활성화 된 경우 쓰기를 비활성화하는 펌웨어가있을 수 있습니다. 리더에는 쓰기 방지 탭이 활성화되어 있으면 쓰기를 비활성화하는 소프트웨어 드라이버가있을 수 있습니다. 실제로 대다수의 독자는 펌웨어로이를 수행합니다.


당신이 틀렸다고 생각합니다. 소스를 게시하십시오.
wizlog


@ wizlog : 내가 잘못 생각한 것을 알지 못하면 소스를 게시 할 주장을 모릅니다.
David Schwartz

독자는 쓰기 방지 탭을 무시할 수 있습니다
wizlog

3
"노치가 독자에 의해서만 감지되기 ​​때문에 원하는 경우 (및 독자가 지원하는 경우) 보호 기능을 무시할 수 있습니다." - 위키 백과
데이비드 슈워츠

-3

하드웨어 기반 스위치입니다. 이 기능은 모든 쓰기 작업을 차단합니다.

전환하면 다음을 수행 할 수 없습니다.

  • SD 카드에서 또는 SD 카드로 파일 이동

  • SD 카드에서 파일 제거

  • SD 카드에 파일 복사

  • SD 카드 포맷

편집 자세한 내용은 여기를 참조 하십시오 . 희미한 주황색 원에 주목하십시오 ...


2
왼쪽의 스위치. 연산은 위치를 알고 너무
캐나다 누가 복음

2
자물쇠가 실제로 이것을 강제하고 있습니까? 우연히 이것을 무시하고 카드에 쓸 수있는 카메라가 있다는 것을 읽었습니다.
Jane Panda

인용 한 링크에 "일부 SD 카드에는 쓰기 방지 기능이 내장되어 있습니다"라고 표시되어 있습니다. 일부는 아닙니다. 다른 답변을 비교하면 예외입니다. 상당히 충격적입니다. 보안과 바이러스에 대해서는 전혀 생각하지 않은 것 같습니다. 8- {
Hans-Peter Störr

1
이 답변이 왜 그렇게 많이 투표 되었습니까?
wizlog
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.