เป็นไปได้ไหมที่การ์ด SD ขนาดเล็กถูกฟอร์แมตโดยไม่มี MBR

ฉันกำลังพยายามใช้ไลบรารีระบบไฟล์ FAT16/32 แบบอ่านอย่างเดียวสำหรับระบบฝังตัวเพื่ออ่านการ์ด SD (การสร้างวงล้อใหม่เพื่อการศึกษา)

ดูเหมือนว่ามีการ์ดที่ฟอร์แมตโดยไม่มี MBR; แค่ FAT โดยไม่มีตารางพาร์ติชั่น

ฉันได้อ่านเอกสาร FAT และเอกสาร MBR แล้ว และได้เรียนรู้วิธีอ่านการ์ด SD ซึ่งมีทั้ง MBR และ FAT

ฉันต้องการไลบรารี C++ เพื่อรองรับการอ่านการ์ด SD โดยไม่ต้องใช้ MBR

แนวทางปัจจุบันของฉันมีดังต่อไปนี้:

  1. ลองอ่านเซกเตอร์แรกโดยสมมติว่ามี FAT BPB (Boot parameter Block)
  2. ตรวจสอบว่าข้อมูลถูกต้องหรือไม่
  3. ถ้าใช่ ให้อ่านไดเรกทอรีรากต่อไป
  4. มิฉะนั้นถือว่ามี MBR
  5. อ่านตารางพาร์ติชันเริ่มต้นที่ 0x1BE
  6. หากมีประเภทพาร์ติชันที่รองรับ ให้ลองอ่านเซกเตอร์แรกเป็น FAT
  7. หากข้อมูลที่อ่านถูกต้อง ให้อ่านไดเร็กทอรีรากต่อไป
  8. มิฉะนั้นส่งคืน ERROR_CODE

มีแนวทางที่ดีกว่านี้ไหม? เช่น มีเลขอาถรรพ์หรือมีรูปแบบเฉพาะที่สามารถระบุได้หรือไม่?


person Farseen    schedule 24.06.2016    source แหล่งที่มา
comment
คุณแค่อ่านและดูว่ามีอยู่หรือไม่?   -  person old_timer    schedule 24.06.2016
comment
มีเลขอาถรรพ์หรือรูปแบบเฉพาะให้ระบุหรือไม่?   -  person Farseen    schedule 24.06.2016
comment
หรือมีวิธีแยกแยะระหว่างภาคแรกของ FAT และ MBR หรือไม่?   -  person Farseen    schedule 24.06.2016
comment
ฉันคิดว่านั่นเป็นไปตามที่ตั้ง หน้าวิกิพีเดียสำหรับมาสเตอร์บูตเรคคอร์ดไม่ได้ช่วยอะไรที่นี่   -  person old_timer    schedule 24.06.2016
comment
ฉันดูเอกสารเบื้องต้นมากมาย แต่ฉันไม่พบความแตกต่างที่สำคัญ   -  person Farseen    schedule 24.06.2016
comment
แน่นอนคุณไม่สามารถสรุปได้ว่าการ์ดทุกใบจะมี X มากกว่าที่ฮาร์ดไดรฟ์ทุกตัวจะมี X บางส่วนอาจถูกล้างข้อมูลหรือแบ่งพาร์ติชันต่างกันหรือใช้โดยไม่มีระบบไฟล์ สิ่งที่ต้องทำคือคนบนโลกนี้ไม่ได้เป็นแบบนั้น และคำตอบสำหรับคำถามของคุณคือไม่ คุณไม่สามารถนับข้อเท็จจริงนั้นได้   -  person old_timer    schedule 24.06.2016
comment

คุณทำ awk -f '{x1=$1;...}' หรือ awk 'foo' '{x1=$1;...}' แทนที่จะเป็น awk '{x1=$1;...}' ดังนั้น awk จึงพยายามเปิดสคริปต์เหมือนกับว่าเป็นชื่อของไฟล์ อย่างหลังมีแนวโน้มที่จะได้รับข้อความแสดงข้อผิดพลาดเฉพาะนั้นมากกว่า ดู:

$ awk -f '{x1=$1;y1=$2;z1=$3} {x2=$4;y2=$5;z2=$6} END{print sqrt((x1-x2)^2 + (y1-y2)^2 + (z1-z2)^2)}' inp.txt >> out.txt
awk: fatal: cannot open source file `{x1=$1;y1=$2;z1=$3} {x2=$4;y2=$5;z2=$6} END{print sqrt((x1-x2)^2 + (y1-y2)^2 + (z1-z2)^2)}' for reading: No such file or directory

$ awk '7' '{x1=$1;y1=$2;z1=$3} {x2=$4;y2=$5;z2=$6} END{print sqrt((x1-x2)^2 + (y1-y2)^2 + (z1-z2)^2)}' inp.txt >> out.txt
awk: fatal: cannot open file `{x1=$1;y1=$2;z1=$3} {x2=$4;y2=$5;z2=$6} END{print sqrt((x1-x2)^2 + (y1-y2)^2 + (z1-z2)^2)}' for reading: No such file or directory
  -  person Farseen    schedule 24.06.2016
comment
เพียงเพราะฟล็อปปี้ FAT FS ไม่สามารถบู๊ตได้ไม่ได้หมายความว่าไม่มี MBR - เพียงแต่ว่า MBR ไม่โหลดเซกเตอร์สำหรับบู๊ต   -  person Clifford    schedule 24.06.2016
comment
@คลิฟฟอร์ดใช่ ฉันหมายถึงมีแผ่นฟลอปปีที่ไม่มี MBR   -  person Farseen    schedule 24.06.2016
comment
@happycoder : จริงเหรอ? พวกเขาอ้วนหรือเปล่า? สิ่งที่ฉันสงสัยก็คือว่ามีสิ่งเหล่านี้อยู่   -  person Clifford    schedule 24.06.2016
comment


คำตอบ (1)


  1. ตรวจสอบข้อความ FAT32 ที่ออฟเซ็ต 0x52
  2. หากล้มเหลว ให้ตรวจสอบ FAT12 หรือ FAT16 ที่ 0x36
  3. หากยังล้มเหลว ให้ถือว่าเซกเตอร์แรกคือ MBR

ขอบคุณ @คลิฟฟอร์ด

person Farseen    schedule 25.06.2016