[build] Add syslinux floppy image type .sdsk
authorMarty Connor <mdc@etherboot.org>
Sun, 29 Mar 2009 05:25:15 +0000 (01:25 -0400)
committerMichael Brown <mcb30@etherboot.org>
Sun, 2 Aug 2009 10:04:13 +0000 (11:04 +0100)
We add a syslinux floppy disk type using parts of the genliso script.
This floppy image cat be dd'ed to a physical floppy or used in
instances where a virtual floppy with an mountable DOS filesystem is
useful.

We also modify the genliso script to only generate .liso images
rather than creating images depending on how it is called.

Signed-off-by: Michael Brown <mcb30@etherboot.org>
src/arch/i386/Makefile.pcbios
src/util/genliso
src/util/gensdsk [new file with mode: 0644]

index b185418..d404456 100644 (file)
@@ -45,6 +45,12 @@ NON_AUTO_MEDIA       += liso
        $(QM)$(ECHO) "  [GENLISO] $@"
        $(Q)bash util/genliso $@ $<
 
+# rule to make a syslinux floppy image (mountable, bootable)
+NON_AUTO_MEDIA += sdsk
+%sdsk: %lkrn util/gensdsk
+       $(QM)$(ECHO) "  [GENSDSK] $@"
+       $(Q)bash util/gensdsk $@ $<
+
 # Special target for building Master Boot Record binary
 $(BIN)/mbr.bin : $(BIN)/mbr.o
        $(QM)$(ECHO) "  [OBJCOPY] $@"
index 0a67eb3..1782384 100755 (executable)
@@ -2,24 +2,18 @@
 #
 # Generate a legacy floppy emulation ISO boot image
 #
-# genliso foo.liso foo.lkrn
+# genliso foo.liso foo.lkrn bar.lkrn ...
 #
-# the ISO image is the first argument so that a list of .lkrn images
-# to include can be specified
-#
-case $0 in
-*genliso)
-       ;;
-*genfdimg)
-       genfdimg=1
-       ;;
-esac
+# The .liso image filename is the first argument followed by
+#   a list of .lkrn images  include in .liso image
+
 case $# in
 0|1)
        echo Usage: $0 foo.liso foo.lkrn ...
        exit 1
        ;;
 esac
+
 case "`mtools -V`" in
 Mtools\ version\ 3.9.9*|Mtools\ version\ 3.9.1[0-9]*|Mtools\ version\ 4.*)
        ;;
@@ -28,25 +22,23 @@ Mtools\ version\ 3.9.9*|Mtools\ version\ 3.9.1[0-9]*|Mtools\ version\ 4.*)
        exit 1
        ;;
 esac
+
 out=$1
 shift
+
 dir=bin/liso.dir
 mkdir -p $dir
-case "$genfdimg" in
-1)
-       img=$out
-       ;;
-*)
-       img=$dir/boot.img
-       ;;
-esac
+
+img=$dir/boot.img
 mformat -f 1440 -C -i $img ::
+
 cfg=bin/syslinux.cfg
 cat > $cfg <<EOF
 # These default options can be changed in the genliso script
-SAY Etherboot ISO boot image generated by genliso
+SAY gPXE ISO boot image generated by genliso
 TIMEOUT 30
 EOF
+
 first=
 for f
 do
@@ -70,16 +62,14 @@ do
        echo "" KERNEL $g
        mcopy -m -i $img $f ::$g
 done >> $cfg
+
 mcopy -i $img $cfg ::syslinux.cfg
+
 if ! syslinux $img
 then
        exit 1
 fi
-case "$genfdimg" in
-1)
-       ;;
-*)
-       mkisofs -o $out -c boot.cat -b boot.img $dir
-       ;;
-esac
+
+mkisofs -o $out -c boot.cat -b boot.img $dir
+
 rm -fr $dir
diff --git a/src/util/gensdsk b/src/util/gensdsk
new file mode 100644 (file)
index 0000000..68c339c
--- /dev/null
@@ -0,0 +1,66 @@
+#!/bin/bash
+#
+# Generate a syslinux floppy that loads a gPXE image
+#
+# gensdsk foo.sdsk foo.lkrn
+#
+# the floppy image is the first argument
+#   followed by list of .lkrn images
+#
+
+case $# in
+0|1)
+       echo Usage: $0 foo.sdsk foo.lkrn ...
+       exit 1
+       ;;
+esac
+case "`mtools -V`" in
+Mtools\ version\ 3.9.9*|Mtools\ version\ 3.9.1[0-9]*|Mtools\ version\ 4.*)
+       ;;
+*)
+       echo Mtools version 3.9.9 or later is required
+       exit 1
+       ;;
+esac
+img=$1
+shift
+dir=bin/sdsk.dir
+mkdir -p $dir
+
+mformat -f 1440 -C -i $img ::
+cfg=bin/syslinux.cfg
+cat > $cfg <<EOF
+
+# These default options can be changed in the gensdsk script
+TIMEOUT 30
+EOF
+first=
+for f
+do
+       if [ ! -r $f ]
+       then
+               echo $f does not exist, skipping 1>&2
+               continue
+       fi
+       # shorten name for 8.3 filesystem
+       b=$(basename $f)
+       g=${b%.lkrn}
+       g=${g//[^a-z0-9]}
+       g=${g:0:8}.krn
+       case "$first" in
+       "")
+               echo DEFAULT $g
+               ;;
+       esac
+       first=$g
+       echo LABEL $b
+       echo "" KERNEL $g
+       mcopy -m -i $img $f ::$g
+done >> $cfg
+mcopy -i $img $cfg ::syslinux.cfg
+if ! syslinux $img
+then
+       exit 1
+fi
+
+rm -fr $dir