USB booting :: Boot USB from Floppy



I wanted to use a Boot floppy to boot DSL Ver 4.4.10 from my USB Flash
drive on my old Compaq Presario 1672.  The previous floppy USB boot
image wouldn't work for me with ver 4.4.10, and my BIOS did not allow
booting from USB.

I used UNETBOOTIN (with Win2k) to copy the DSL 4.4.10 ISO to my
USB Flash Drive.

To make the Boot floppy I used the script located at this URL:
http://linuxgazette.net/116/okopnik1.html

The Knoppix CD consists of a number of files, of which only one really
mattered to what I needed: the "miniroot". To be exact, the miniroot is
a compressed bootable image within the Knoppix image - it is, in fact,
the part that makes the Knoppix CD bootable - so tweaking the files
inside it consisted of the following steps:

  1. Mount the Knoppix image
  2. Decompress the miniroot into a temporary file
  3. Mount the miniroot
  4. Modify the files in it
  5. Recompress it
  6. Create a loop-mounted file
  7. Copy the miniroot into it
  8. Make it bootable
  9. Write it to a floppy

Boot script follows:
Code Sample

#!/bin/bash
# Created by Ben Okopnik on Thu Mar 17 23:56:31 EST 2005
#
# Many thanks to Fabian Franz, whose original script gave me the idea of
# how it's all supposed to work.
#
# This script creates a boot floppy that passes control to a USB PenDrive
# containing a Knoppix CD image. No CDROM, no problem!
#
#  SYSLINUX & PERL must be installed.
#  (I used Ubuntu 8.04.3 to execute this script, then copied the boot.img
#   file to a Flash Drive, then used DSL to create the Floppy.)
#

############## User configuration section ###############################

# Set this to the directory where the Knoppix image lives, or specify the
# directory as a command-line argument.
KNOPPIX_DIR=${1:-/home/larry/tmp2}

############## End of user config section ###############################

abort()
{
 printf "$@\n"
 exit 1
}

clean_exit()
{
 [ -d "$TMPDIR" ] && rm -rf $TMPDIR
}

# Validation tests
[ $UID -ne 0 ] && abort "Root privileges are required to run this script."
[ -d "$KNOPPIX_DIR" ] || abort "$KNOPPIX_DIR is not a directory."
[ -z "`ls $KNOPPIX_DIR|grep -i 'knoppix.*iso'`" ] &&
abort "Knoppix image not found in $KNOPPIX_DIR."

# Create temp dir, get rid of it on exit
TMPDIR=`mktemp -dp /tmp/ make_floppy.XXXXXX`
trap "clean_exit" EXIT

# Jump into TMPDIR and prepare it for the coming ops
ORIG_DIR=$(pwd)
cd $TMPDIR
mkdir knoppix floppy miniroot old_miniroot

# Choose and mount the Knoppix image
printf "Please choose one of the following images:\n"
select choice in $KNOPPIX_DIR/K*.iso; do break; done
mount $choice knoppix -o loop

# Decompress the miniroot from the mounted image's boot dir
gunzip -c knoppix/boot/isolinux/minirt24.gz > minirt24

# "Back up" and mount the miniroot
mv minirt24 minirt24.old
mount -o loop minirt24.old old_miniroot

# Create the file which will contain the new miniroot; format it as a DOS
# FS and mount it
dd if=/dev/zero of=minirt24 bs=4M count=1
mke2fs -L "KNOPPIX Miniroot" -b 1024 -N 8192 -O none -F -q -m 0 minirt24
mount -o loop minirt24 miniroot

# Copy the USB-related modules from the old miniroot to the new one
mkdir -p miniroot/modules/scsi
for n in `ls old_miniroot/modules/scsi|egrep 'usb|hci'`
do
cp old_miniroot/modules/scsi/"$n" miniroot/modules/scsi
done

# Copy everything except the "scsi" dir from the old miniroot to the new
# one
rm -rf old_miniroot/modules/scsi
cp -af old_miniroot/* miniroot/

# Unmount both
umount old_miniroot
umount miniroot

# Compress the miniroot again
gzip -9 minirt24

# Create a 1.44MB file which will contain the boot image, format it as a
# DOS FS, and mount it.
dd if=/dev/zero of=$TMPDIR/boot.img bs=1k count=1440
mkdosfs $TMPDIR/boot.img
mount -t msdos boot.img floppy -o loop

# Grrr... "mount" weirdness requires waiting, then remounting in order to
# have it read-writeable. Perhaps the 'mount' maintainer should get a bug
# report?
sleep 3
mount floppy -o remount,rw

# Copy the required files from Knoppix's boot dir to the image we're building
FILES="boot.msg f2 f3 german.kbd isolinux.cfg linux24 logo.16"
(cd knoppix/boot/isolinux/; cp -f $FILES $TMPDIR/floppy/)

# Copy the new miniroot into it - we're almost done!
cp minirt24.gz floppy/

# Rename and tweak the config file to conform to the SYSLINUX usage
mv floppy/isolinux.cfg floppy/syslinux.cfg
[ -n "$LANGUAGE" ] && perl -pi -e "s/lang=de/lang=$LANGUAGE/g" floppy/syslinux.cfg
[ -n "$LANGUAGE" ] && perl -pi -e "s/lang=us/lang=$LANGUAGE/g" floppy/syslinux.cfg

# A little cleanup...
umount knoppix
umount floppy

# Make the image bootable! Since it's not an actual device, 'syslinux' is
# going to complain - but we're tough and can handle it.
syslinux boot.img 2>/dev/null

# Put the boot image back where we started
cp -i boot.img $ORIG_DIR

printf "The boot diskette can now be created with 'dd if=boot.img of=/dev/fd0'.\n"


lk


original here.