From owner-freebsd-arm@FreeBSD.ORG Sun Oct 16 17:03:17 2011 Return-Path: Delivered-To: freebsd-arm@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 6020F1065670 for ; Sun, 16 Oct 2011 17:03:15 +0000 (UTC) (envelope-from freebsd@damnhippie.dyndns.org) Received: from qmta02.emeryville.ca.mail.comcast.net (qmta02.emeryville.ca.mail.comcast.net [76.96.30.24]) by mx1.freebsd.org (Postfix) with ESMTP id 439D48FC14 for ; Sun, 16 Oct 2011 17:03:14 +0000 (UTC) Received: from omta13.emeryville.ca.mail.comcast.net ([76.96.30.52]) by qmta02.emeryville.ca.mail.comcast.net with comcast id lUpt1h00217UAYkA2UpytB; Sun, 16 Oct 2011 16:49:58 +0000 Received: from damnhippie.dyndns.org ([24.8.232.202]) by omta13.emeryville.ca.mail.comcast.net with comcast id lUpG1h00a4NgCEG8ZUpHWe; Sun, 16 Oct 2011 16:49:18 +0000 Received: from [172.22.42.240] (revolution.hippie.lan [172.22.42.240]) by damnhippie.dyndns.org (8.14.3/8.14.3) with ESMTP id p9GGo2nA021163; Sun, 16 Oct 2011 10:50:02 -0600 (MDT) (envelope-from freebsd@damnhippie.dyndns.org) From: Ian Lepore To: mrossi@swin.edu.au In-Reply-To: <4E9669CB.2060707@swin.edu.au> References: <4E9290FF.7090306@swin.edu.au> <4E92D2D8.8070500@swin.edu.au> <4E9535D0.2030706@swin.edu.au> <4E9669CB.2060707@swin.edu.au> Content-Type: text/plain Date: Sun, 16 Oct 2011 10:50:02 -0600 Message-Id: <1318783802.2245.8.camel@revolution.hippie.lan> Mime-Version: 1.0 X-Mailer: Evolution 2.26.0 FreeBSD GNOME Team Port Content-Transfer-Encoding: 7bit Cc: freebsd-arm@freebsd.org Subject: Re: Create FAT partition/filesystem on the internal microSD flash of the Dreamplug X-BeenThere: freebsd-arm@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting FreeBSD to the StrongARM Processor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 16 Oct 2011 17:03:17 -0000 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 */