2001-05-04 21:46:00 +00:00
|
|
|
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://cvs.uclinux.org/uClibc.html)
|
2001-12-08 01:56:15 +00:00
|
|
|
- Busybox: Unix utilities (http://busybox.net/)
|
2001-05-04 21:46:00 +00:00
|
|
|
- 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 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.
|
|
|
|
|
|
|
|
- Run ldconfig so busybox and other binaries can have access to the libraries
|
|
|
|
that they need:
|
|
|
|
|
|
|
|
(path to)uClibc/ld.so-1/util/ldconfig -r loop/
|
|
|
|
|
|
|
|
- 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
|