การล็อคโหมดอ่านอย่างเดียวบังคับใช้กับการ์ด SD อยู่ที่ไหน สิ่งนี้ทำลงในการ์ดของตัวเองในเฟิร์มแวร์ของเครื่องอ่านหรือในระบบปฏิบัติการหรือไม่? (สถานที่อื่น ๆ ?)
การล็อคโหมดอ่านอย่างเดียวบังคับใช้กับการ์ด SD อยู่ที่ไหน สิ่งนี้ทำลงในการ์ดของตัวเองในเฟิร์มแวร์ของเครื่องอ่านหรือในระบบปฏิบัติการหรือไม่? (สถานที่อื่น ๆ ?)
คำตอบ:
หากคุณอ่านข้อมูลจำเพาะ SD แบบย่อส่วนที่ 1 ฟิสิคัลเลเยอร์ที่ง่ายขึ้นส่วน 4.3.6 "การจัดการการป้องกันการเขียน" กล่าว
รองรับวิธีการป้องกันการเขียนสามวิธีในการ์ดหน่วยความจำ SD ดังนี้:
- สวิตช์ป้องกันการเขียนเชิงกล (รับผิดชอบเฉพาะโฮสต์)
- การป้องกันการเขียนภายในการ์ด (ความรับผิดชอบของการ์ด)
- การดำเนินการล็อครหัสผ่านด้วยการ์ดสวิตช์ป้องกันการเขียนเชิงกล
แท็บเล็ตแบบเลื่อนเชิงกลที่ด้านข้างของการ์ด (อ้างอิงถึงส่วนที่ 1 ส่วนเสริมเชิงกล) จะถูกใช้โดยผู้ใช้เพื่อระบุว่าการ์ดที่ระบุนั้นมีการป้องกันการเขียนหรือไม่ หากแท็บเล็ตเลื่อนอยู่ในตำแหน่งที่หน้าต่างเปิดอยู่หมายความว่าการ์ดได้รับการป้องกันการเขียน หากหน้าต่างปิดอยู่การ์ดจะไม่ป้องกันการเขียน สวิตช์ด้านซ็อกเก็ตที่เหมาะสมจับคู่จะบ่งบอกถึงโฮสต์ว่าการ์ดมีการป้องกันการเขียนหรือไม่ มันเป็นความรับผิดชอบของโฮสต์ที่จะปกป้องการ์ด ตำแหน่งของสวิตช์ป้องกันการเขียนไม่เป็นที่รู้จักในวงจรภายในของการ์ด
(ความสำคัญของฉัน)
TOSHIBA SD Card จำเพาะกล่าวว่า
CMD28 SET_WRITE_PROT - ไม่ได้ใช้การป้องกันการเขียนภายใน
CMD29 CLR_WRITE_PROT - ไม่ได้ใช้การป้องกันการเขียนภายใน
CMD30 SEND_WRITE_PROT - ไม่มีการป้องกันการเขียนภายใน
...
2) ฟังก์ชั่นที่ไม่รองรับ:
การป้องกันการเขียนภายในของการ์ด (ตัวเลือกในข้อกำหนดทางกายภาพของเลเยอร์ 4.3.5)
ที่ทำงานของฉันเราใช้การ์ด 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)
หากคุณไม่รู้สึกว่าต้องการแก้ไขและสร้างเคอร์เนลลินุกซ์ แต่คุณมีกล้อง Canon P&S คุณสามารถใช้CHDKเพื่อเขียนไฟล์ (รูปภาพ) ไปยังการ์ด SD ที่ป้องกันการเขียน (เมื่อเปิดกล้อง) OF จะตรวจสอบ สถานะของสวิตช์เมื่อตั้งค่าเป็น RO มันจะโหลดเฟิร์มแวร์อัตโนมัติจากการ์ด SD ซึ่งช่วยให้ผู้ใช้สามารถบูตเข้าสู่ CHDK ได้โดยตรงจากนั้น CHDK จะไม่สนใจสถานะของสวิตช์ดังนั้นจึงยังคงสามารถเขียนรูปภาพลงในการ์ดได้เช่นhttp : //chdk.wikia.com/wiki/Bootable_SD_card )
คุณยังสามารถเขียนไปยังการ์ด SD ที่ป้องกันการเขียนใน Linux โดยการปิดการตั้งค่าสถานะแบบอ่านอย่างเดียวด้วยhdparm
และติดตั้งการ์ดอีกครั้ง:
$ 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