1Building a Busybox Boot Floppy 2============================== 3 4This document describes how to buid a boot floppy using the following 5components: 6 7 - Linux Kernel (http://www.kernel.org) 8 - uClibc: C library (http://www.uclibc.org/) 9 - Busybox: Unix utilities (http://busybox.net/) 10 - Syslinux: bootloader (http://syslinux.zytor.com) 11 12It is based heavily on a paper presented by Erik Andersen at the 2001 Embedded 13Systems Conference. 14 15 16 17Building The Software Components 18-------------------------------- 19 20Detailed instructions on how to build Busybox, uClibc, or a working Linux 21kernel are beyond the scope of this document. The following guidelines will 22help though: 23 24 - Stock Busybox from CVS or a tarball will work with no modifications to 25 any files. Just extract and go. 26 - Ditto uClibc. 27 - Your Linux kernel must include support for initrd or else the floppy 28 won't be able to mount it's root file system. 29 30If you require further information on building Busybox uClibc or Linux, please 31refer to the web pages and documentation for those individual programs. 32 33 34 35Making a Root File System 36------------------------- 37 38The following steps will create a root file system. 39 40 - Create an empty file that you can format as a filesystem: 41 42 dd if=/dev/zero of=rootfs bs=1k count=4000 43 44 - Set up the rootfs file we just created to be used as a loop device (may not 45 be necessary) 46 47 losetup /dev/loop0 rootfs 48 49 - Format the rootfs file with a filesystem: 50 51 mkfs.ext2 -F -i 2000 rootfs 52 53 - Mount the file on a mountpoint so we can place files in it: 54 55 mkdir loop 56 mount -o loop rootfs loop/ 57 58 (you will probably need to be root to do this) 59 60 - Copy on the C library, the dynamic linking library, and other necessary 61 libraries. For this example, we copy the following files from the uClibc 62 tree: 63 64 mkdir loop/lib 65 (chdir to uClibc directory) 66 cp -a libc.so* uClibc*.so \ 67 ld.so-1/d-link/ld-linux-uclibc.so* \ 68 ld.so-1/libdl/libdl.so* \ 69 crypt/libcrypt.so* \ 70 (path to)loop/lib 71 72 - Install the Busybox binary and accompanying symlinks: 73 74 (chdir to busybox directory) 75 make CONFIG_PREFIX=(path to)loop/ install 76 77 - Make device files in /dev: 78 79 This can be done by running the 'mkdevs.sh' script. If you want the gory 80 details, you can read the script. 81 82 - Make necessary files in /etc: 83 84 For this, just cp -a the etc/ directory onto rootfs. Again, if you want 85 all the details, you can just look at the files in the dir. 86 87 - Unmount the rootfs from the mountpoint: 88 89 umount loop 90 91 - Compress it: 92 93 gzip -9 rootfs 94 95 96Making a SYSLINUX boot floppy 97----------------------------- 98 99The following steps will create the boot floppy. 100 101Note: You will need to have the mtools package installed beforehand. 102 103 - Insert a floppy in the drive and format it with an MSDOS filesystem: 104 105 mformat a: 106 107 (if the system doesn't know what device 'a:' is, look at /etc/mtools.conf) 108 109 - Run syslinux on the floppy: 110 111 syslinux -s /dev/fd0 112 113 (the -s stands for "safe, slow, and stupid" and should work better with 114 buggy BIOSes; it can be omitted) 115 116 - Put on a syslinux.cfg file: 117 118 mcopy syslinux.cfg a: 119 120 (more on syslinux.cfg below) 121 122 - Copy the root file system you made onto the MSDOS formatted floppy 123 124 mcopy rootfs.gz a: 125 126 - Build a linux kernel and copy it onto the disk with the filename 'linux' 127 128 mcopy bzImage a:linux 129 130 131Sample syslinux.cfg 132~~~~~~~~~~~~~~~~~~~ 133 134The following simple syslinux.cfg file should work. You can tweak it if you 135like. 136 137----begin-syslinux.cfg--------------- 138DEFAULT linux 139APPEND initrd=rootfs.gz root=/dev/ram0 140TIMEOUT 10 141PROMPT 1 142----end-syslinux.cfg--------------- 143 144Some changes you could make to syslinux.cfg: 145 146 - This value is the number seconds it will wait before booting. You can set 147 the timeout to 0 (or omit) to boot instantly, or you can set it as high as 148 10 to wait awhile. 149 150 - PROMPT can be set to 0 to disable the 'boot:' prompt. 151 152 - you can add this line to display the contents of a file as a welcome 153 message: 154 155 DISPLAY display.txt 156 157 158 159Additional Resources 160-------------------- 161 162Other useful information on making a Linux bootfloppy is available at the 163following URLs: 164 165http://www.linuxdoc.org/HOWTO/Bootdisk-HOWTO/index.html 166http://www.linux-embedded.com/howto/Embedded-Linux-Howto.html 167http://linux-embedded.org/howto/LFS-HOWTO.html 168http://linux-embedded.org/pmhowto.html 169http://recycle.lbl.gov/~ldoolitt/embedded/ (Larry Doolittle's stuff) 170 171 172 173Possible TODOs 174-------------- 175 176The following features that we might want to add later: 177 178 - support for additional filesystems besides ext2, i.e. minix 179 - different libc, static vs dynamic loading 180 - maybe using an alternate bootloader 181