From mboxrd@z Thu Jan 1 00:00:00 1970 From: Joey Oravec Date: Wed, 13 Jun 2007 11:54:46 -0400 Subject: [U-Boot-Users] FAT mbr on MMC or SD cards Message-ID: List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de 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