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
