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 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 |
|
---|
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
|
---|