Mungkinkah Kartu SD kecil diformat tanpa MBR?

Saya mencoba menerapkan perpustakaan Sistem File FAT16/32 hanya baca untuk sistem tertanam, untuk membaca Kartu SD (menemukan kembali roda untuk tujuan pendidikan).

Sepertinya ada kartu yang diformat tanpa MBR; hanya FAT tanpa tabel partisi apa pun.

Saya telah membaca dokumen FAT dan dokumen MBR serta mempelajari cara membaca Kartu SD yang memiliki MBR dan FAT.

Saya memerlukan perpustakaan C++ saya untuk mendukung membaca Kartu SD tanpa MBR.

Pendekatan saya saat ini adalah sebagai berikut:

  1. Coba baca sektor pertama dengan asumsi mengandung FAT BPB (Boot Parameter Block).
  2. Periksa apakah informasi tersebut valid.
  3. Jika ya, lanjutkan membaca direktori root.
  4. Kalau tidak, asumsikan ia memiliki MBR.
  5. Baca tabel partisi mulai dari 0x1BE.
  6. Jika jenis partisi yang didukung tersedia, coba baca sektor pertamanya sebagai FAT.
  7. Jika informasi yang dibaca valid, lanjutkan membaca direktori root.
  8. Jika tidak, kembalikan ERROR_CODE

Apakah ada pendekatan yang lebih baik? Misalnya, apakah ada angka ajaib atau pola tertentu yang dapat diidentifikasi?


person Farseen    schedule 24.06.2016    source sumber
comment
Anda baru saja membaca dan melihat apakah itu ada?   -  person old_timer    schedule 24.06.2016
comment
apakah ada angka ajaib atau pola khusus untuk diidentifikasi?   -  person Farseen    schedule 24.06.2016
comment
atau adakah cara membedakan FAT sektor pertama dan MBR?   -  person Farseen    schedule 24.06.2016
comment
Saya pikir itu berdasarkan lokasi, halaman wikipedia untuk master boot record tidak membantu di sini?   -  person old_timer    schedule 24.06.2016
comment
Saya melihat banyak dokumen pengantar. Namun saya tidak dapat menemukan perbedaan utamanya.   -  person Farseen    schedule 24.06.2016
comment
tentu saja Anda tidak dapat berasumsi SETIAP kartu akan memiliki X seperti halnya setiap hard drive memiliki X. beberapa mungkin akan dihapus atau dipartisi secara berbeda atau digunakan tanpa sistem file. Yang diperlukan hanyalah seseorang yang tidak bersikap seperti itu dan jawaban atas pertanyaan Anda adalah tidak, Anda tidak dapat mengandalkan fakta itu.   -  person old_timer    schedule 24.06.2016
comment

Anda melakukan awk -f '{x1=$1;...}' atau awk 'foo' '{x1=$1;...}' alih-alih awk '{x1=$1;...}' jadi awk mencoba membuka skrip seolah-olah itu adalah nama file. Yang terakhir ini lebih mungkin terjadi mengingat pesan kesalahan spesifik tersebut. Lihat:

$ 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
Hanya karena floppy FAT FS tidak dapat di-boot bukan berarti floppy tersebut tidak memiliki MBR - hanya saja MBR tersebut tidak memuat sektor boot.   -  person Clifford    schedule 24.06.2016
comment
@Clifford, ya. Maksud saya ada disket yang tidak memiliki MBR.   -  person Farseen    schedule 24.06.2016
comment
@happycoder: Benarkah? Apakah mereka GEMUK? Yang saya ragukan adalah hal-hal seperti itu ada.   -  person Clifford    schedule 24.06.2016
comment
Ini mungkin relevan: avrfreaks.net/forum/sd-card-missing-mbr   -  person Clifford    schedule 24.06.2016


Jawaban (1)


  1. Periksa teks FAT32 pada offset 0x52.
  2. Jika gagal, periksa FAT12 atau FAT16 pada 0x36
  3. Jika gagal juga, asumsikan sektor pertama adalah MBR.

Terima kasih kepada @Clifford

person Farseen    schedule 25.06.2016