*: whitespace fixes function old new delta prepend_new_eth_table - 304 +304 nameif_main 620 684 +64 cc_macaddr 51 - -51 ------------------------------------------------------------------------------ (add/remove: 1/1 grow/shrink: 1/0 up/down: 368/-51) Total: 317 bytes
		
			
				
	
	
		
			181 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			181 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
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://www.uclibc.org/)
 | 
						|
 - Busybox: Unix utilities (http://busybox.net/)
 | 
						|
 - 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 CONFIG_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.
 | 
						|
 | 
						|
 - 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
 |