david/ipxe
david
/
ipxe
Archived
1
0
Fork 0

[build] Add syslinux floppy image type .sdsk

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>
This commit is contained in:
Marty Connor 2009-03-29 01:25:15 -04:00 committed by Michael Brown
parent 14ae602ef0
commit 96f4f96540
3 changed files with 89 additions and 27 deletions

View File

@ -45,6 +45,12 @@ NON_AUTO_MEDIA += liso
$(QM)$(ECHO) " [GENLISO] $@" $(QM)$(ECHO) " [GENLISO] $@"
$(Q)bash util/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 # Special target for building Master Boot Record binary
$(BIN)/mbr.bin : $(BIN)/mbr.o $(BIN)/mbr.bin : $(BIN)/mbr.o
$(QM)$(ECHO) " [OBJCOPY] $@" $(QM)$(ECHO) " [OBJCOPY] $@"

View File

@ -2,24 +2,18 @@
# #
# Generate a legacy floppy emulation ISO boot image # 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 # The .liso image filename is the first argument followed by
# to include can be specified # a list of .lkrn images include in .liso image
#
case $0 in
*genliso)
;;
*genfdimg)
genfdimg=1
;;
esac
case $# in case $# in
0|1) 0|1)
echo Usage: $0 foo.liso foo.lkrn ... echo Usage: $0 foo.liso foo.lkrn ...
exit 1 exit 1
;; ;;
esac esac
case "`mtools -V`" in case "`mtools -V`" in
Mtools\ version\ 3.9.9*|Mtools\ version\ 3.9.1[0-9]*|Mtools\ version\ 4.*) 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 exit 1
;; ;;
esac esac
out=$1 out=$1
shift shift
dir=bin/liso.dir dir=bin/liso.dir
mkdir -p $dir mkdir -p $dir
case "$genfdimg" in
1) img=$dir/boot.img
img=$out
;;
*)
img=$dir/boot.img
;;
esac
mformat -f 1440 -C -i $img :: mformat -f 1440 -C -i $img ::
cfg=bin/syslinux.cfg cfg=bin/syslinux.cfg
cat > $cfg <<EOF cat > $cfg <<EOF
# These default options can be changed in the genliso script # 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 TIMEOUT 30
EOF EOF
first= first=
for f for f
do do
@ -70,16 +62,14 @@ do
echo "" KERNEL $g echo "" KERNEL $g
mcopy -m -i $img $f ::$g mcopy -m -i $img $f ::$g
done >> $cfg done >> $cfg
mcopy -i $img $cfg ::syslinux.cfg mcopy -i $img $cfg ::syslinux.cfg
if ! syslinux $img if ! syslinux $img
then then
exit 1 exit 1
fi fi
case "$genfdimg" in
1) mkisofs -o $out -c boot.cat -b boot.img $dir
;;
*)
mkisofs -o $out -c boot.cat -b boot.img $dir
;;
esac
rm -fr $dir rm -fr $dir

66
src/util/gensdsk Normal file
View File

@ -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