# Boot KNOPPIX from an USB Memory Stick

## What you'll need:

- Knoppix or an already stripped down version
- USB Memory Stick
- Computer capable of booting from USB
- kernel with cloop-support
- syslinux

## 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)
    FOUND_KNOPPIX="/dev/sda1"
    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

    ./knoppix:
    total 50820
    -rw-r--r--    1 root     root         2048 Apr 27 12:48 boot.cat
    -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 try the other USB Boot Options (Floppy, CD-ROM, Harddisk), if still nothing happens you might have to enable USB Keyboard Support in your BIOS (needed on some motherboards with AMI BIOS and a Via chipset, including Epia-m and Shuttle mv42n).
- On some broken boards (like my Epia-M...) you need to plug the memory stick in without any power (remove your power plug), otherwise the BIOS might not recognize the memory stick.
- If your BIOS boots from the Memory Stick, but you can see only sequences of ones and zeroes, you can try an alternative bootsector from spblinux. As the site is sometimes down you can download the bootsector here(Version 1.01). Just put this one on /dev/sda and try it out (dd if=spb2_mbr.sec of=/dev/sda). Many thanks to Christian Ostheimer for his great work (I didn't believe anymore in booting from USB, but his spblinux made it possible ;-)

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