From 2c328ddaa055bcd4f584f1ca5b3c314b1e2ef183 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Mon, 17 Oct 2005 17:13:42 +0000 Subject: [PATCH] Added basic "makehaikufloppy" script, based on the original BeOS one. Only works after having built the system once - could be greatly improved, but does its job for now. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14405 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- makehaikufloppy | 124 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100755 makehaikufloppy diff --git a/makehaikufloppy b/makehaikufloppy new file mode 100755 index 0000000000..2bc9c3d226 --- /dev/null +++ b/makehaikufloppy @@ -0,0 +1,124 @@ +#!/bin/sh + +usage() { + echo "Usage: makebootfloppy [-cd] [-base ] [-preserve] [-image ]" + echo "-cd : Creates a boot floppy capable of booting to a CD." + echo " If not specified, the boot floppy will only be able to boot" + echo " systems from hard drives." + echo "-base : Specifies the base directory of the system you wish to make" + echo " a boot floppy from. Defaults to /boot" + echo "-preserve : Leaves a copy of the floppy image in /tmp (only valid when" + echo " used with the -cd option)." + echo "-image : writes the floppy image to the specified file - this implies" + echo " the -cd option." + exit $1 +} + +BASE=distro/x86.release.haiku/ +CD=0 +PRESERVE=0 +IMAGE=/dev/disk/floppy/raw + +while [ "x$1" != "x" ] ; do + if [ "$1" = "-help" ] || [ "$1" = "--help" ] ; then + usage 0 + elif [ "$1" = "-cd" ] ; then + CD=1 + elif [ "$1" = "-preserve" ] ; then + PRESERVE=1 + elif [ "$1" = "-image" ] ; then + shift + IMAGE=$1 + CD=1 + if [ "x$1" = "x" ] ; then + echo "-image requires an argument." + usage 1 + fi + elif [ "$1" = "-base" ] ; then + shift + BASE=$1 + if [ "x$1" = "x" ] || [ ! -d $BASE ] ; then + echo "-base requires a directory argument." + usage 1 + fi + else + echo "Invalid option: $1" + usage 1 + fi + shift +done + +if [ $CD = 1 ] ; then + rm -f /tmp/boot.tgz /tmp/boot.img + + echo "Creating boot image..." + + mkdir -p /tmp/beos/system + cp objects/x86.release.haiku/system/kernel_x86 /tmp/beos/system/ + oldCWD=$(pwd) + + cd /tmp + tar chf /tmp/boot.tar beos/system/kernel_x86 + rm -r /tmp/beos + + cd $oldCWD + cd $BASE + pwd + tar rvhf /tmp/boot.tar \ + beos/system/add-ons/kernel/busses/ide \ + beos/system/add-ons/kernel/bus_managers \ + beos/system/add-ons/kernel/file_systems/bfs \ + beos/system/add-ons/kernel/generic \ + beos/system/add-ons/kernel/partitioning_systems \ + beos/system/add-ons/kernel/drivers/bin/scsi* \ + beos/system/add-ons/kernel/file_systems/bfs \ + > /dev/null +# beos/system/add-ons/kernel/boot \ + gzip -c /tmp/boot.tar > /tmp/boot.tgz + rm /tmp/boot.tar + cd $oldCWD + if [ $? != 0 ] ; then + echo "Error creating boot floppy" + exit 1 + fi + + dd if=/dev/zero of=/tmp/boot.img bs=1k count=1440 + if [ $? != 0 ] ; then + echo "Error creating temporary boot image" + exit 1 + fi + dd if=/media/zbeos of=/tmp/boot.img conv=notrunc + dd if=/tmp/boot.tgz of=/tmp/boot.img bs=192k seek=1 conv=notrunc + + echo "Writing boot image to "$IMAGE + dd if=/tmp/boot.img of=$IMAGE bs=72k + _retval=$? + + if [ $PRESERVE = 0 ] ; then + rm -f /tmp/boot.tgz /tmp/boot.img + fi + + if [ $_retval != 0 ] ; then + echo "Error creating boot floppy" + exit 1 + fi +else + # non-CD mode (only writes the bare boot loader) + + echo "Writing boot loader..." + dd if=$BASE/beos/system/zbeos of=$IMAGE bs=18k + if [ $? != 0 ] ; then + echo "Error creating boot floppy" + exit 1 + fi + + echo "Erasing old boot drivers from the floppy..." + dd if=/dev/zero of=$IMAGE bs=512 conv=notrunc seek=384 count=1 + if [ $? != 0 ] ; then + echo "Error creating boot floppy" + exit 1 + fi +fi + +echo "Done!" +exit 0