
Hi all,
I've been testing a wide variety of MMC/SD cards straight out of the package. Some cards have a MBR at sector 0 (like a hard drive) while others are unpartitioned with a volume boot sector at sector 0 (like a floppy). And it might change if you reformat the card.
I'm still on 1.1.5, but I didn't see any major changes in 1.1.6. Within fs/fat/fat.c one of the first functions file_fat_detectfs() calls read_bootsectandvi(). I think I need to make, and then submit patches for, a few changes:
1. This code assumes that sector 0 contains a VBR. Instead I think it should decide if 0 is an MBR or VBR, or even better utilize the dev:part command line. Can I make this determination that from the first three bytes, or is there a better way?
2. The decision of fat12, fat16, and fat32 is made upon fat_length and an ascii field. The Microsoft document claims that the determination shall be made only by the count of clusters. Any disputes on that fix?
3. Structure boot_sector may need a packed attribute. As far as I can tell there are no makefile flags so gcc is free to add padding to align members inside structures. This would be a problem for the memcpy from block to boot_sector within read_bootsectandvi(). What is the coding standard for specifying 1-byte packing where necessary? Just add the gcc attribute?
Thanks!
-joey