diff --git a/src/arch/i386/Makefile.pcbios b/src/arch/i386/Makefile.pcbios index b1854181..d4044567 100644 --- a/src/arch/i386/Makefile.pcbios +++ b/src/arch/i386/Makefile.pcbios @@ -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] $@" diff --git a/src/util/genliso b/src/util/genliso index 0a67eb3c..17823841 100755 --- a/src/util/genliso +++ b/src/util/genliso @@ -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 <> $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 index 00000000..68c339c2 --- /dev/null +++ b/src/util/gensdsk @@ -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 <&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