diff options
author | Mark Whitley <markw@lineo.com> | 2001-05-04 21:46:00 +0000 |
---|---|---|
committer | Mark Whitley <markw@lineo.com> | 2001-05-04 21:46:00 +0000 |
commit | a0ba9f45fb0c9f3e34d5a2b25e45b7e5d5cac9a4 (patch) | |
tree | 4f000c6356ba330d7cf5ade9d79a4167fb90e69f /examples/bootfloppy/bootfloppy.txt | |
parent | d24f878546806aa8fd50dc95fe3cc111ad10f92f (diff) | |
download | busybox-w32-a0ba9f45fb0c9f3e34d5a2b25e45b7e5d5cac9a4.tar.gz busybox-w32-a0ba9f45fb0c9f3e34d5a2b25e45b7e5d5cac9a4.tar.bz2 busybox-w32-a0ba9f45fb0c9f3e34d5a2b25e45b7e5d5cac9a4.zip |
Wrote documentation and scripts for creating a busybox boot floppy. Initial revision.
Diffstat (limited to 'examples/bootfloppy/bootfloppy.txt')
-rw-r--r-- | examples/bootfloppy/bootfloppy.txt | 185 |
1 files changed, 185 insertions, 0 deletions
diff --git a/examples/bootfloppy/bootfloppy.txt b/examples/bootfloppy/bootfloppy.txt new file mode 100644 index 000000000..575c93fcc --- /dev/null +++ b/examples/bootfloppy/bootfloppy.txt | |||
@@ -0,0 +1,185 @@ | |||
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://cvs.uclinux.org/uClibc.html) | ||
9 | - Busybox: Unix utilities (http://busybox.lineo.com) | ||
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 | - Run ldconfig so busybox and other binaries can have access to the libraries | ||
88 | that they need: | ||
89 | |||
90 | (path to)uClibc/ld.so-1/util/ldconfig -r loop/ | ||
91 | |||
92 | - Unmount the rootfs from the mountpoint: | ||
93 | |||
94 | umount loop | ||
95 | |||
96 | - Compress it: | ||
97 | |||
98 | gzip -9 rootfs | ||
99 | |||
100 | |||
101 | Making a SYSLINUX boot floppy | ||
102 | ----------------------------- | ||
103 | |||
104 | The following steps will create the boot floppy. | ||
105 | |||
106 | Note: You will need to have the mtools package installed beforehand. | ||
107 | |||
108 | - Insert a floppy in the drive and format it with an MSDOS filesystem: | ||
109 | |||
110 | mformat a: | ||
111 | |||
112 | (if the system doesn't know what device 'a:' is, look at /etc/mtools.conf) | ||
113 | |||
114 | - Run syslinux on the floppy: | ||
115 | |||
116 | syslinux -s /dev/fd0 | ||
117 | |||
118 | (the -s stands for "safe, slow, and stupid" and should work better with | ||
119 | buggy BIOSes; it can be omitted) | ||
120 | |||
121 | - Put on a syslinux.cfg file: | ||
122 | |||
123 | mcopy syslinux.cfg a: | ||
124 | |||
125 | (more on syslinux.cfg below) | ||
126 | |||
127 | - Copy the root file system you made onto the MSDOS formatted floppy | ||
128 | |||
129 | mcopy rootfs.gz a: | ||
130 | |||
131 | - Build a linux kernel and copy it onto the disk with the filename 'linux' | ||
132 | |||
133 | mcopy bzImage a:linux | ||
134 | |||
135 | |||
136 | Sample syslinux.cfg | ||
137 | ~~~~~~~~~~~~~~~~~~~ | ||
138 | |||
139 | The following simple syslinux.cfg file should work. You can tweak it if you | ||
140 | like. | ||
141 | |||
142 | ----begin-syslinux.cfg--------------- | ||
143 | DEFAULT linux | ||
144 | APPEND initrd=rootfs.gz root=/dev/ram0 | ||
145 | TIMEOUT 10 | ||
146 | PROMPT 1 | ||
147 | ----end-syslinux.cfg--------------- | ||
148 | |||
149 | Some changes you could make to syslinux.cfg: | ||
150 | |||
151 | - This value is the number seconds it will wait before booting. You can set | ||
152 | the timeout to 0 (or omit) to boot instantly, or you can set it as high as | ||
153 | 10 to wait awhile. | ||
154 | |||
155 | - PROMPT can be set to 0 to disable the 'boot:' prompt. | ||
156 | |||
157 | - you can add this line to display the contents of a file as a welcome | ||
158 | message: | ||
159 | |||
160 | DISPLAY display.txt | ||
161 | |||
162 | |||
163 | |||
164 | Additional Resources | ||
165 | -------------------- | ||
166 | |||
167 | Other useful information on making a Linux bootfloppy is available at the | ||
168 | following URLs: | ||
169 | |||
170 | http://www.linuxdoc.org/HOWTO/Bootdisk-HOWTO/index.html | ||
171 | http://www.linux-embedded.com/howto/Embedded-Linux-Howto.html | ||
172 | http://linux-embedded.org/howto/LFS-HOWTO.html | ||
173 | http://linux-embedded.org/pmhowto.html | ||
174 | http://recycle.lbl.gov/~ldoolitt/embedded/ (Larry Doolittle's stuff) | ||
175 | |||
176 | |||
177 | |||
178 | Possible TODOs | ||
179 | -------------- | ||
180 | |||
181 | The following features that we might want to add later: | ||
182 | |||
183 | - support for additional filesystems besides ext2, i.e. minix | ||
184 | - different libc, static vs dynamic loading | ||
185 | - maybe using an alternate bootloader | ||