Building a Busybox Boot Floppy
==============================

This document describes how to buid a boot floppy using the following
components:

 - Linux Kernel (http://www.kernel.org)
 - uClibc: C library (http://www.uclibc.org/)
 - Busybox: Unix utilities (http://busybox.net/)
 - Syslinux: bootloader (http://syslinux.zytor.com)

It is based heavily on a paper presented by Erik Andersen at the 2001 Embedded
Systems Conference.



Building The Software Components
--------------------------------

Detailed instructions on how to build Busybox, uClibc, or a working Linux
kernel are beyond the scope of this document. The following guidelines will
help though:

	- Stock Busybox from CVS or a tarball will work with no modifications to
	  any files. Just extract and go.
	- Ditto uClibc.
	- Your Linux kernel must include support for initrd or else the floppy
	  won't be able to mount it's root file system.

If you require further information on building Busybox uClibc or Linux, please
refer to the web pages and documentation for those individual programs.



Making a Root File System
-------------------------

The following steps will create a root file system.

 - Create an empty file that you can format as a filesystem:

	dd if=/dev/zero of=rootfs bs=1k count=4000

 - Set up the rootfs file we just created to be used as a loop device (may not
   be necessary)

	losetup /dev/loop0 rootfs

 - Format the rootfs file with a filesystem:

	mkfs.ext2 -F -i 2000 rootfs

 - Mount the file on a mountpoint so we can place files in it:

	mkdir loop
	mount -o loop rootfs loop/

	(you will probably need to be root to do this)

 - Copy on the C library, the dynamic linking library, and other necessary
   libraries. For this example, we copy the following files from the uClibc
   tree:

	mkdir loop/lib
	(chdir to uClibc directory)
	cp -a libc.so* uClibc*.so \
		ld.so-1/d-link/ld-linux-uclibc.so* \
		ld.so-1/libdl/libdl.so* \
		crypt/libcrypt.so* \
		(path to)loop/lib

 - Install the Busybox binary and accompanying symlinks:

	(chdir to busybox directory)
	make CONFIG_PREFIX=(path to)loop/ install

 - Make device files in /dev:

 	This can be done by running the 'mkdevs.sh' script. If you want the gory
	details, you can read the script.

 - Make necessary files in /etc:

	For this, just cp -a the etc/ directory onto rootfs. Again, if you want
	all the details, you can just look at the files in the dir.

 - Unmount the rootfs from the mountpoint:

	umount loop

 - Compress it:

	gzip -9 rootfs


Making a SYSLINUX boot floppy
-----------------------------

The following steps will create the boot floppy.

Note: You will need to have the mtools package installed beforehand.

 - Insert a floppy in the drive and format it with an MSDOS filesystem:

	mformat a:

	(if the system doesn't know what device 'a:' is, look at /etc/mtools.conf)

 - Run syslinux on the floppy:

	syslinux -s /dev/fd0

	(the -s stands for "safe, slow, and stupid" and should work better with
	buggy BIOSes; it can be omitted)

 - Put on a syslinux.cfg file:

	mcopy syslinux.cfg a:

	(more on syslinux.cfg below)

 - Copy the root file system you made onto the MSDOS formatted floppy

	mcopy rootfs.gz a:

 - Build a linux kernel and copy it onto the disk with the filename 'linux'

	mcopy bzImage a:linux


Sample syslinux.cfg
~~~~~~~~~~~~~~~~~~~

The following simple syslinux.cfg file should work. You can tweak it if you
like.

----begin-syslinux.cfg---------------
DEFAULT linux
APPEND initrd=rootfs.gz root=/dev/ram0
TIMEOUT 10
PROMPT 1
----end-syslinux.cfg---------------

Some changes you could make to syslinux.cfg:

 - This value is the number seconds it will wait before booting. You can set
   the timeout to 0 (or omit) to boot instantly, or you can set it as high as
   10 to wait awhile.

 - PROMPT can be set to 0 to disable the 'boot:' prompt.

 - you can add this line to display the contents of a file as a welcome
   message:

	DISPLAY display.txt



Additional Resources
--------------------

Other useful information on making a Linux bootfloppy is available at the
following URLs:

http://www.linuxdoc.org/HOWTO/Bootdisk-HOWTO/index.html
http://www.linux-embedded.com/howto/Embedded-Linux-Howto.html
http://linux-embedded.org/howto/LFS-HOWTO.html
http://linux-embedded.org/pmhowto.html
http://recycle.lbl.gov/~ldoolitt/embedded/ (Larry Doolittle's stuff)



Possible TODOs
--------------

The following features that we might want to add later:

 - support for additional filesystems besides ext2, i.e. minix
 - different libc, static vs dynamic loading
 - maybe using an alternate bootloader
