Create FAT partition/filesystem on the internal microSD flash
of the Dreamplug
Mattia Rossi
mrossi at swin.edu.au
Mon Oct 24 23:15:23 UTC 2011
Hi Ian,
I finally came around to test the attached patch for newfs_msdosfs on
the dreamplug, and I can confirm that it works!
It also still works on i386/x86_64 and the disk formatted on ARM is
recognised properly on all systems.
Is it still possible to commit this patch to 9?
I believe it's a very useful and non problematic commit.
Mat
On 17/10/2011 03:50, Ian Lepore wrote:
> On Thu, 2011-10-13 at 15:32 +1100, Mattia Rossi wrote:
>> On 13/10/11 02:06, Warner Losh wrote:
>>>
>>> On Oct 12, 2011, at 12:38 AM, Mattia Rossi wrote:
>>>
>>>> -snip-
>>>>>>> I've tried to recreate it using gpart and newfs_msdos, but can't
>>>>>>> create any new FAT partition that mount_msdosfs would mount.
>>>>>>> [snip]
>
> This turned out to be a difference in structure packing (it's something
> that happens a lot with ARM). The patch below should get it working for
> you.
>
> Funny aside: I opened newfs_msdos.c and within 90 seconds knew what was
> wrong and how to fix it. It then took me over an hour to prove to
> myself that my fix was right -- the mount was failing because I forgot
> to put "option MSDOSFS" in my kernel config (and we always build our
> systems with no .ko modules at all).
>
> -- Ian
>
> diff -r 0e647646c002 sbin/newfs_msdos/newfs_msdos.c
> --- sbin/newfs_msdos/newfs_msdos.c.orig Thu Sep 29 08:39:38 2011 -0600
> +++ sbin/newfs_msdos/newfs_msdos.c Sun Oct 16 10:40:07 2011 -0600
> @@ -98,7 +98,7 @@ static const char rcsid[] =
> struct bs {
> u_int8_t bsJump[3]; /* bootstrap entry point */
> u_int8_t bsOemName[8]; /* OEM name and version */
> -};
> +} __packed;
>
> struct bsbpb {
> u_int8_t bpbBytesPerSec[2]; /* bytes per sector */
> @@ -113,7 +113,7 @@ struct bsbpb {
> u_int8_t bpbHeads[2]; /* drive heads */
> u_int8_t bpbHiddenSecs[4]; /* hidden sectors */
> u_int8_t bpbHugeSectors[4]; /* big total sectors */
> -};
> +} __packed;
>
> struct bsxbpb {
> u_int8_t bpbBigFATsecs[4]; /* big sectors per FAT */
> @@ -123,7 +123,7 @@ struct bsxbpb {
> u_int8_t bpbFSInfo[2]; /* file system info sector */
> u_int8_t bpbBackup[2]; /* backup boot sector */
> u_int8_t bpbReserved[12]; /* reserved */
> -};
> +} __packed;
>
> struct bsx {
> u_int8_t exDriveNumber; /* drive number */
> @@ -132,7 +132,7 @@ struct bsx {
> u_int8_t exVolumeID[4]; /* volume ID number */
> u_int8_t exVolumeLabel[11]; /* volume label */
> u_int8_t exFileSysType[8]; /* file system type */
> -};
> +} __packed;
>
> struct de {
> u_int8_t deName[11]; /* name and extension */
> @@ -142,7 +142,7 @@ struct de {
> u_int8_t deMDate[2]; /* creation date */
> u_int8_t deStartCluster[2]; /* starting cluster */
> u_int8_t deFileSize[4]; /* size */
> -};
> +} __packed;
>
> struct bpb {
> u_int bpbBytesPerSec; /* bytes per sector */
>
>
>
More information about the freebsd-arm
mailing list