[821] | 1 | Building a Busybox Boot Floppy
|
---|
| 2 | ==============================
|
---|
| 3 |
|
---|
| 4 | This document describes how to buid a boot floppy using the following
|
---|
| 5 | components:
|
---|
| 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 |
|
---|
| 12 | It is based heavily on a paper presented by Erik Andersen at the 2001 Embedded
|
---|
| 13 | Systems Conference.
|
---|
| 14 |
|
---|
| 15 |
|
---|
| 16 |
|
---|
| 17 | Building The Software Components
|
---|
| 18 | --------------------------------
|
---|
| 19 |
|
---|
| 20 | Detailed instructions on how to build Busybox, uClibc, or a working Linux
|
---|
| 21 | kernel are beyond the scope of this document. The following guidelines will
|
---|
| 22 | help 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 |
|
---|
| 30 | If you require further information on building Busybox uClibc or Linux, please
|
---|
| 31 | refer to the web pages and documentation for those individual programs.
|
---|
| 32 |
|
---|
| 33 |
|
---|
| 34 |
|
---|
| 35 | Making a Root File System
|
---|
| 36 | -------------------------
|
---|
| 37 |
|
---|
| 38 | The 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 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 |
|
---|
| 96 | Making a SYSLINUX boot floppy
|
---|
| 97 | -----------------------------
|
---|
| 98 |
|
---|
| 99 | The following steps will create the boot floppy.
|
---|
| 100 |
|
---|
| 101 | Note: 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 |
|
---|
| 131 | Sample syslinux.cfg
|
---|
| 132 | ~~~~~~~~~~~~~~~~~~~
|
---|
| 133 |
|
---|
| 134 | The following simple syslinux.cfg file should work. You can tweak it if you
|
---|
| 135 | like.
|
---|
| 136 |
|
---|
| 137 | ----begin-syslinux.cfg---------------
|
---|
| 138 | DEFAULT linux
|
---|
| 139 | APPEND initrd=rootfs.gz root=/dev/ram0
|
---|
| 140 | TIMEOUT 10
|
---|
| 141 | PROMPT 1
|
---|
| 142 | ----end-syslinux.cfg---------------
|
---|
| 143 |
|
---|
| 144 | Some 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 |
|
---|
| 159 | Additional Resources
|
---|
| 160 | --------------------
|
---|
| 161 |
|
---|
| 162 | Other useful information on making a Linux bootfloppy is available at the
|
---|
| 163 | following URLs:
|
---|
| 164 |
|
---|
| 165 | http://www.linuxdoc.org/HOWTO/Bootdisk-HOWTO/index.html
|
---|
| 166 | http://www.linux-embedded.com/howto/Embedded-Linux-Howto.html
|
---|
| 167 | http://linux-embedded.org/howto/LFS-HOWTO.html
|
---|
| 168 | http://linux-embedded.org/pmhowto.html
|
---|
| 169 | http://recycle.lbl.gov/~ldoolitt/embedded/ (Larry Doolittle's stuff)
|
---|
| 170 |
|
---|
| 171 |
|
---|
| 172 |
|
---|
| 173 | Possible TODOs
|
---|
| 174 | --------------
|
---|
| 175 |
|
---|
| 176 | The 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
|
---|