Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[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>
  • Loading branch information
Marty Connor authored and Michael Brown committed Aug 2, 2009
1 parent 14ae602 commit 96f4f96
Show file tree
Hide file tree
Showing 3 changed files with 89 additions and 27 deletions.
6 changes: 6 additions & 0 deletions src/arch/i386/Makefile.pcbios
Expand Up @@ -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] $@"
Expand Down
44 changes: 17 additions & 27 deletions src/util/genliso
Expand Up @@ -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.*)
;;
Expand All @@ -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
Expand All @@ -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
66 changes: 66 additions & 0 deletions 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 <<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

0 comments on commit 96f4f96

Please sign in to comment.