是否强制执行SD卡硬件,固件或软件(驱动程序,操作系统)上的锁定机制?


17

使用SD卡强制执行锁定到只读模式?这是在卡本身内部,读卡器固件还是操作系统中完成的?(其他一些地方?)

Answers:


21

如果您阅读SD规范第1部分物理层简化规范,请参见第4.3.6节“写保护管理”

SD存储卡支持三种写保护方法,如下所示:
- 机械写保护开关(仅限主机)
- 卡内部写保护(卡的责任)
- 密码保护卡锁定操作。

机械写保护开关

用户将使用卡侧面的机械滑动平板电脑(参见第1部分机械附录)来指示给定的卡是否受到写保护。如果滑动平板电脑的位置使得窗口打开,则意味着该卡被写保护。如果窗口关闭,则卡不受写保护。插座侧的正确匹配的开关将向主机指示该卡是否被写保护。主机有责任保护卡。写保护开关的位置对于卡的内部电路是未知的。

(我的重点)

一个东芝SD卡规范

CMD28 SET_WRITE_PROT - 未实现内部写保护。
CMD29 CLR_WRITE_PROT - 未实现内部写保护。
CMD30 SEND_WRITE_PROT - 未实现内部写保护。

...

2)不支持的功能:
卡的内部写保护(物理层规范中可选4.3.5。)


但我想知道
tsenapathy 2016年

14

在我的工作中,我们在嵌入式系统中使用SD卡。如果我们尝试使用锁定的卡启动,我们会遇到内核恐慌。在我们得到一批具有非常松散的写入开关的SD卡之前,这不是什么大问题:将卡插入读卡器的行为有时足以移动开关并锁定卡。很多人开始尝试提出机械选项来防止这种情况,比如在每张SD卡上粘贴一块磁带,但最后我们通过更改Linux内核中的一行源代码来解决这个问题。现在当检测到SD卡并将开关设置为只读时,我们只需忽略开关,并随时将数据写入卡中。

这是因为我们对backports的疯狂错误,所以我怀疑这个补丁会干净利落地应用于任何地方,但如果你想试验自己的内核,这是一个很好的起点:

--- 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内核但是您有佳能P&S相机,则可以使用CHDK将文件(图片)写入写保护的SD卡(当相机开启时,OF检查开关状态;当设置为RO时,它将自动从SD卡加载固件。这允许用户直接启动到CHDK;然后CHDK忽略开关的状态,所以它仍然可以将图片写入卡;参见例如http ://chdk.wikia.com/wiki/Bootable_SD_card)。

您还可以通过关闭readonly标志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
$ 

4

这取决于读者。读者可以忽略写保护选项卡。如果使用写保护标签,则阅读器可以具有禁用写入的固件。如果使用写保护标签,则阅读器可以具有禁用写入的软件驱动程序。在实践中,绝大多数读者都是在固件中完成的。


我觉得你错了。请发布消息来源。
wizlog


@wizlog:我不知道你认为我错了什么,我不知道哪个声明发布了。
大卫施瓦茨

读者可以忽略写保护标签
wizlog

3
“因为只有读卡器检测到缺口,所以如果需要,可以覆盖保护(如果读者支持的话)。” - 维基百科
大卫施瓦茨

-3

它是一个基于硬件的开关。它的功能只是阻止任何写操作。

如果切换,你不能:

  • 将文件从SD卡移动到SD卡

  • 从SD卡中删除文件

  • 将文件复制到SD卡

  • 格式化SD卡

编辑在这里 阅读更多。 注意微弱的橙色圆圈......


2
左侧有一个开关。就这样,操作系统知道哪里
加拿大卢克

2
你确定锁实际上是强制执行吗?我读过有些相机可以(有点巧合)忽略这一点,无论如何写入卡片。
Jane Panda

你引用的链接说:“有些SD卡还内置了写保护功能”。一些 - 不是全部。如果你比较其他答案,这似乎是一个例外。我觉得相当令人震惊 - 似乎他们根本没有考虑安全和病毒。8- {
Hans-PeterStörr11年

1
这个答案为何如此低估?
wizlog
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.