Date: Tue, 30 May 2006 04:02:20 +0000 From: John Birrell <jb@what-creek.com> To: Andrew Atrens <atrens@nortel.com> Cc: Alexander Leidinger <Alexander@Leidinger.net>, Poul-Henning Kamp <phk@phk.freebsd.dk>, James Mansion <james@wgold.demon.co.uk>, current@freebsd.org, small@freebsd.org Subject: Re: FreeBSD's embedded agenda Message-ID: <20060530040220.GA59831@what-creek.com> In-Reply-To: <447B6870.8020704@nortel.com> References: <HCEPKPMCAJLDGJIBCLGHKEHMFGAA.james@wgold.demon.co.uk> <447B6870.8020704@nortel.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, May 29, 2006 at 05:32:32PM -0400, Andrew Atrens wrote: > So then we agree - write a driver that makes raw flash look like a CF, > and does wear-levelling, gc, etc, under the hood. Then put whatever > f/s you want on it. it's a start at least. Then build your kick-ass > NAND-aware (or NOR aware or both) fs on top of that that makes use of > some extensions that the driver provides. Okay, that's quite the > arm wave ... I must admit that I don't know so much about the existing > fs<->disk interface... Writing a NAND driver for FreeBSD using geom is a trivial matter. It only takes a few days or a week at the most. I don't really understand what all the fuss is here. I've built FreeBSD embedded systems that are smaller than all the picobsd etc configurations which all rely on choosing programs out of the standard FreeBSD tree and putting them on a 'disk'. The smallest embedded system using FreeBSD consists of just a kernel and a threaded program which runs as 'init'. No other files are required (subject to how you boot, so perhaps include the loader). You most certainly don't need anything all from /etc. You don't need a shell. You don't need shared libraries. Try it! Build a kernel that does nothing other than have devices in it to talk to a console and floppy disk. Boot from floppy using the current loader and write a minimal app that will talk to the console. Tell me how big the kernel and the app is. It won't take you longer to do that to write all the messages you are posting here. Configure your system to mount the root file system read-only and any temporary data that you want to write, do it to a ram disk. Boot the system, check that your 'init' program works and then just turn the power off. It should boot up again next time without any problems. You can make your 'init' program remount the disk in write mode if it needs to change any config data. Then it can remount it again read-only and you're back in fail-safe mode. I've done this with a FreeBSD based video recorder mounted to a race motorcycle in the Australian Formula Xtreme series. When the rider powered up his bike, the embedded FreeBSD system (which is just an embedded board) booted and automatically started recording. When he returned to the pits and turned off his bike, the FreeBSD system detected the fact that the bike was turned off and went through it's shutdown sequence, closing the video file which was on CF (not NAND where the OS was) and then when the buffers were flushed, it toggled an output bit which opened a relay contact and powered itself down. This is all trivial to do with FreeBSD and has been since FreeBSD-4 when I first tried it. You end up with custom software to make your 'init' program have just the features that you want (and FreeBSD's libraries aren't too convenient for that), but it's all do-able without a million emails to a mailing list postulating on how to do it. Just try it with what is in FreeBSD now. Sigh. -- John Birrell
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20060530040220.GA59831>