Boot KNOPPIX from an USB Memory Stick

What you'll need:

Preparing everything:

I used Damn Small Linux for this (it's only 51MB and has fluxbox ;-), but every other stripped down Knoppix version should do (if you have enough space on your memory stick).
You can also strip down your own version of knoppix (see the Knoppix Customising FAQ).

Modifying miniroot.gz:

First you need to modify the boot-image (KNOPPIX/boot.img). Mount it (mount -o loop boot.img /mnt) and copy everything in a directory (e.g. ~/knoppix-usb/bootdisk). You need to modify linuxrc in miniroot.gz and put the relevant usb modules in modules/usb/.

Now use gunzip to uncompress miniroot.gz and then mount it (mount -o loop miniroot /mnt). Open linuxrc with your editor. You need to load the relevant usb-modules and make sure to sleep some time, because the modules need some time to recognize your USB Memory stick. I put the relevant parts before the scsi modules are loaded to make sure, that my USB Memory Stick will be /dev/sda:

# load usb-modules first (so that memory-stick becomes /dev/sda1)
# uncomment for USB 2.0 support (experimental)
#insmod -f /modules/usb/ehci-hcd.o
insmod -f /modules/usb/usbcore.o
insmod -f /modules/usb/usb-uhci.o
insmod -f /modules/usb/uhci.o
insmod -f /modules/usb/usb-ohci.o
insmod -f /modules/usb/usb-storage.o
# need to sleep because it takes some time to register things
ash -c "sleep 4"

Now you need to make sure, that your root-fs is mounted to /cdrom: I commented out the section in linuxrc where a CDROM is searched and put the following lines in:

# mount /dev/sda1 (memorystick to cdrom)
mount -t vfat /dev/sda1 /cdrom
You can get my modified linuxrc here

Now we still need the usb modules (that aren't on the miniroot). Mount the compressed KNOPPIX file (insmod cloop file=PATH/KNOPPIX && mount -t iso9660 /dev/cloop /cdrom) and copy the following files under /cdrom/lib/modules/$KERNELVERSION/kernel/drivers/usb/ to /mnt/modules/usb/:
ehci-hcd.o uhci.o usb-ohci.o usb-storage.o usb-uhci.o usbcore.o
Now you're finished modifying miniroot. Umount it and gzip the file again.

Preparing the Memory Stick

Create a fat-partition on your stick and format it with mkfs.vfat
Mount the memory stick
Copy the files from ~/knoppix-usb/bootdisk/ on the memory stick (that should include your modified miniroot.gz)
Copy the other files from your modified knoppix to the memory stick (the most important is KNOPPIX/KNOPPIX)
The layout on your Memory Stick should look like this:
sh-2.05b# ls -lR
total 1576
-rw-r--r--    1 root     root           54 Apr 27 12:48 autorun.bat
-rw-r--r--    1 root     root           47 Apr 27 12:48 autorun.inf
-rw-r--r--    1 root     root          180 Apr 27 12:48 boot.msg
-rw-r--r--    1 root     root         1759 Apr 27 12:48 f2
-rw-r--r--    1 root     root          256 Apr 27 12:48 german.kbd
dr-xr--r--    2 root     root         4096 Apr 27 12:48 knoppix
-rw-r--r--    1 root     root         3262 Apr 27 12:48 knoppix.ico
-r--r--r--    1 root     root         7836 Apr 27 12:51 ldlinux.sys
-rw-r--r--    1 root     root        34395 Apr 27 12:48 logo.16
-rw-r--r--    1 root     root       607866 Apr 27 14:03 miniroot.gz
-rw-r--r--    1 root     root         2402 Apr 27 12:48 syslinux.cfg
-rw-r--r--    1 root     root       921602 Apr 27 12:48 vmlinuz

total 50820
-rw-r--r--    1 root     root         2048 Apr 27 12:48
-rw-r--r--    1 root     root      1474560 Apr 27 12:48 boot.img
-rw-r--r--    1 root     root     50553629 Apr 27 04:48 knoppix
-rw-r--r--    1 root     root           27 Apr 27 12:48 mkfloppy.bat
Now you need to get the Memory Stick bootable: umount it and run 'syslinux /dev/sda1' (or /dev/sd?1 depending on your system).

The ugly part: booting

If you're lucky your computer will boot out of the box when you select USB ZIP as a bootdevice. Otherwise read on...

You can get my modified Damn Small Linux here (52 MB)

Comments to: Matthias Müller

Last update: Sun Jun 1 20:45:48 CEST 2003