summaryrefslogtreecommitdiffstats
path: root/release/powerpc/generate-hfs.sh
diff options
context:
space:
mode:
authornwhitehorn <nwhitehorn@FreeBSD.org>2011-05-04 23:34:10 +0000
committernwhitehorn <nwhitehorn@FreeBSD.org>2011-05-04 23:34:10 +0000
commitfa658caf7f77301a0ec0b43f379ae4e01559ce9a (patch)
tree96e3ca4ff727d1ea1ebdf482f3bc2df0bfae24cb /release/powerpc/generate-hfs.sh
parent575bf8558726d405a45b2f172984929d1d62d26c (diff)
downloadFreeBSD-src-fa658caf7f77301a0ec0b43f379ae4e01559ce9a.zip
FreeBSD-src-fa658caf7f77301a0ec0b43f379ae4e01559ce9a.tar.gz
Change the way powerpc bootable CDs are generated to work around a bug
in hybrid image generation in cdrtools. This produces a small HFS partition containing loader, mapped in by an oddly-formed APM table using a new feature in makefs. This does not appear to work yet on early-model G3 systems, which will be fixed later, but produces bootable CDs on everything else.
Diffstat (limited to 'release/powerpc/generate-hfs.sh')
-rwxr-xr-xrelease/powerpc/generate-hfs.sh64
1 files changed, 64 insertions, 0 deletions
diff --git a/release/powerpc/generate-hfs.sh b/release/powerpc/generate-hfs.sh
new file mode 100755
index 0000000..c445fea
--- /dev/null
+++ b/release/powerpc/generate-hfs.sh
@@ -0,0 +1,64 @@
+#!/bin/sh
+
+# This script generates the dummy HFS filesystem used for the PowerPC boot
+# blocks. It uses hfsutils (emulators/hfsutils) to generate a template
+# filesystem with the relevant interesting files. These are then found by
+# grep, and the offsets written to a Makefile snippet.
+#
+# Because of licensing concerns, and because it is overkill, we do not
+# distribute hfsutils as a build tool. If you need to regenerate the HFS
+# template (e.g. because the boot block or the CHRP script have grown),
+# you must install it from ports.
+
+# $FreeBSD$
+
+HFS_SIZE=400 #Size in 2048-byte blocks of the produced image
+LOADER_SIZE=300k
+
+# Generate 800K HFS image
+OUTPUT_FILE=hfs-boot
+
+dd if=/dev/zero of=$OUTPUT_FILE bs=2048 count=$HFS_SIZE
+hformat -l "FreeBSD Install" $OUTPUT_FILE
+hmount $OUTPUT_FILE
+
+# Create and bless a directory for the boot loader
+hmkdir ppc
+hattrib -b ppc
+hcd ppc
+
+# Make the CHRP boot script, which gets loader from the ISO9660 partition
+cat > bootinfo.txt << EOF
+<CHRP-BOOT>
+<DESCRIPTION>FreeBSD/powerpc bootloader</DESCRIPTION>
+<OS-NAME>FreeBSD</OS-NAME>
+<VERSION> $FreeBSD: head/sys/boot/powerpc/boot1.chrp/bootinfo.txt 184490 2008-10
+-31 00:52:31Z nwhitehorn $ </VERSION>
+
+<COMPATIBLE>
+MacRISC MacRISC3 MacRISC4
+</COMPATIBLE>
+<BOOT-SCRIPT>
+" screen" output
+boot &device;:,\ppc\loader &device;:0
+</BOOT-SCRIPT>
+</CHRP-BOOT>
+EOF
+echo 'Loader START' | dd of=loader.tmp cbs=$LOADER_SIZE count=1 conv=block
+
+hcopy bootinfo.txt :bootinfo.txt
+hcopy loader.tmp :loader
+hattrib -c chrp -t tbxi bootinfo.txt
+humount
+
+rm bootinfo.txt
+rm loader.tmp
+
+bzip2 $OUTPUT_FILE
+echo 'HFS boot filesystem created by generate-hfs.sh' > $OUTPUT_FILE.bz2.uu
+echo 'DO NOT EDIT' >> $OUTPUT_FILE.bz2.uu
+echo '$FreeBSD$' >> $OUTPUT_FILE.bz2.uu
+
+uuencode $OUTPUT_FILE.bz2 $OUTPUT_FILE.bz2 >> $OUTPUT_FILE.bz2.uu
+rm $OUTPUT_FILE.bz2
+
OpenPOWER on IntegriCloud