GRUB on Open Firmware (PowerPC)
This article covers installation of the GRUB bootloader on PowerPC machines with Open Firmware. This corresponds to GRUB_PLATFORMS=ieee1275
for ppc and ppc64 architectures, and to the --target=powerpc-ieee1275
option of grub-install. IEEE standard 1275 was the official standard for Open Firmware, sometimes abbreviated as OFW or OF.
Linux PowerPC profiles (default/linux/powerpc/*) set USE flag
grub_platforms_ieee1275
by default for sys-boot/grub, so no special setting of GRUB_PLATFORMS is needed in /etc/portage/make.conf.Installing the bootloader
Apple NewWorld Macs (PowerPC)
NewWorld Macs are Macs with Open Firmware version 3 (OF3) or later (OF3+). NewWorld Macs will show a graphical boot selection when holding the ⌥/Option/Alt key right after the chime, until a startup selection is shown on the screen. This will only work well when a CHRP script that includes an os-badge
is blessed (attribute :tbxi
) on a HFS volume.
The precondition for this example is that /boot is a separate ext2 partition. Other filesystems are possible when the list of GRUB modules is adapted accordingly. If /boot is on the root partition, the example has to be adapted accordingly as well.
- NewWorld Apple Mac computer (1999—2006).
- /boot is a separate ext2 partition.
- Apple Partition Map (APM) consisting of:
- NewWorld Bootblock as
Apple_Boot
- Filesystem HFS.
- As any partition number (at the beginning of the disk is preferred, but not required).
- NewWorld Bootblock as
- Apple specific
os-badge
.
NewWorld Bootblock partition
The use of sys-fs/mac-fdisk is highly recommended. Even though package sys-block/parted can also create Apple Partition Map (APM) style partitions it is not as verbose about partition types.
First, a NewWorld Bootblock has to be created using mac-fdisk:
root #
emerge --ask sys-fs/mac-fdisk
root #
mac-fdisk /dev/sda
At the interactive command prompt this partition can either be created manually e.g. by using the C command for "create new partition, specifying the partition type", or semi-automatic by using the b command for "create new 800k Apple_Bootstrap partition (used by yaboot)". Either way you should get a bootable HFS partition of either the type Apple_Boot
or Apple_Bootstrap
. The partition name is optional but helps when listing the partitions. All values are entered by hand without automatism of any kind.
The following example uses the free space (type Apple_Free) right after the partition table. If this wasn't taken care of e.g. when installing Mac OS X, per default only 128 MB will be free here, which should barely be enough for this purpose. Older versions of Mac OS X don't add free space between partitions, so the NewWorld Bootblock will have to be added behind the already existing partitions.
Normally 800 KB is used but any size big enough for a HFS filesystem and the GRUB core files will do. In this example, the hole between the partition table and the first partition (Mac OS X Tiger) is 1.1 GB. It starts at block 64 (base column) and is 2359232 blocks long (length column). Since this is enough to add 128 MB "holes" before and after, the partition will add two more Apple_Free holes. The block numbers to enter have to be calculated first: 128 MB Apple_Free "holes" are 262144 blocks in size, so the first block will have to be 64
(base) + 262144
(Apple_Free) = 262208
. Since the original Apple_Free "hole" in this specific example (/dev/sda2) has 2359232 blocks, another hole is left at the end if the size of the bootstrap partition is 2359232 - (2 * 262144) = 1834944
.
To get this done, the key sequence p (print partition table), C (create partition with type also specified; type uppercase C!), 262208
(first block), 1834944
(length), "NewWorld Bootblock"
(name of partition; use quotes!) and Apple_Boot
(type of partition). To check if this worked, use p again to list the new partition table. Note that two more partitions were added and the numbers behind those partitions have been shifted accordingly ("Linux Boot" was /dev/sda9 and got shifted to /dev/sda11). All modifications are done in memory and will be saved with w (write the partition table), followed by y (to confirm). To restart if something got messed up simply quit without writing the modifications. Type q for quit.
For strings use quotation marks
"
if they contain whitespace(s)! Since partition types use underlines _
only, this is mainly important for (optional) partition names. However, for a better understanding of what is what it is recommended to use partition names. Partition names can also be used for referring to partitions using the PARTLABEL=
directive, e.g. in /etc/fstab.root #
mac-fdisk /dev/sda
/dev/sda Command (? for help): p # type name length base ( size ) system /dev/sda1 Apple_partition_map Apple 63 @ 1 ( 31.5k) Partition map /dev/sda2 Apple_Free Extra 2359232 @ 64 ( 1.1G) Free space /dev/sda3 Apple_HFS Tiger 209715200 @ 2359296 (100.0G) HFS /dev/sda4 Apple_Free Extra 262144 @ 212074496 (128.0M) Free space /dev/sda5 Apple_HFS Leopard 314572800 @ 212336640 (150.0G) HFS /dev/sda6 Apple_Free Extra 262144 @ 526909440 (128.0M) Free space /dev/sda7 Apple_Boot Apple Hardware Test 100898 @ 527171584 ( 49.3M) Unknown /dev/sda8 Apple_Free Extra 262144 @ 527272482 (128.0M) Free space /dev/sda9 Apple_UNIX_SVR2 Linux Boot 2097152 @ 527534626 ( 1.0G) Linux native /dev/sda10 Apple_Free Extra 262144 @ 529631778 (128.0M) Free space /dev/sda11 Apple_UNIX_SVR2 Gentoo Linux 134217728 @ 529893922 ( 64.0G) Linux native /dev/sda12 Apple_Free Extra 262144 @ 664111650 (128.0M) Free space /dev/sda13 Apple_UNIX_SVR2 Debian Linux 134217728 @ 664373794 ( 64.0G) Linux native /dev/sda14 Apple_Free Extra 262144 @ 798591522 (128.0M) Free space /dev/sda15 Apple_UNIX_SVR2 Linux Local 71216270 @ 798853666 ( 34.0G) Linux native /dev/sda16 Apple_Free Extra 262144 @ 870069936 (128.0M) Free space /dev/sda17 Apple_UNIX_SVR2 Linux swap 67108864 @ 870332080 ( 32.0G) Linux native /dev/sda18 Apple_Free Extra 262144 @ 937440944 (128.0M) Free space Block size=512, Number of Blocks=937703088 DeviceType=0x0, DeviceId=0x0 Command (? for help): C First block: 262208 Length (in blocks, kB (k), MB (M) or GB (G)): 1834944 Name of partition: "NewWorld Bootblock" Type of partition: Apple_Boot Command (? for help): w IMPORTANT: You are about to write a changed partition map to disk. For any partition you changed the start or size of, writing out the map causes all data on that partition to be LOST FOREVER. Make sure you have a backup of any data on such partitions you want to keep before answering 'yes' to the question below! Write partition map? [n/y]: y The partition map has been saved successfully! Syncing disks. Partition map written to disk. If any partitions on this disk were still in use by the system (see messages above), you will need to reboot in order to utilize the new partition map. Command (? for help): q
The final partition layout of this example looks like this, using mac-fdisk and parted:
root #
mac-fdisk -l /dev/sda
/dev/sda # type name length base ( size ) system /dev/sda1 Apple_partition_map Apple 63 @ 1 ( 31.5k) Partition map /dev/sda2 Apple_Free Extra 262144 @ 64 (128.0M) Free space /dev/sda3 Apple_Boot NewWorld Bootblock 1834944 @ 262208 (896.0M) Unknown /dev/sda4 Apple_Free Extra 262144 @ 2097152 (128.0M) Free space /dev/sda5 Apple_HFS Tiger 209715200 @ 2359296 (100.0G) HFS /dev/sda6 Apple_Free Extra 262144 @ 212074496 (128.0M) Free space /dev/sda7 Apple_HFS Leopard 314572800 @ 212336640 (150.0G) HFS /dev/sda8 Apple_Free Extra 262144 @ 526909440 (128.0M) Free space /dev/sda9 Apple_Boot Apple Hardware Test 100898 @ 527171584 ( 49.3M) Unknown /dev/sda10 Apple_Free Extra 262144 @ 527272482 (128.0M) Free space /dev/sda11 Apple_UNIX_SVR2 Linux Boot 2097152 @ 527534626 ( 1.0G) Linux native /dev/sda12 Apple_Free Extra 262144 @ 529631778 (128.0M) Free space /dev/sda13 Apple_UNIX_SVR2 Gentoo Linux 134217728 @ 529893922 ( 64.0G) Linux native /dev/sda14 Apple_Free Extra 262144 @ 664111650 (128.0M) Free space /dev/sda15 Apple_UNIX_SVR2 Debian Linux 134217728 @ 664373794 ( 64.0G) Linux native /dev/sda16 Apple_Free Extra 262144 @ 798591522 (128.0M) Free space /dev/sda17 Apple_UNIX_SVR2 Linux Local 71216270 @ 798853666 ( 34.0G) Linux native /dev/sda18 Apple_Free Extra 262144 @ 870069936 (128.0M) Free space /dev/sda19 Apple_UNIX_SVR2 Linux swap 67108864 @ 870332080 ( 32.0G) Linux native /dev/sda20 Apple_Free Extra 262144 @ 937440944 (128.0M) Free space Block size=512, Number of Blocks=937703088 DeviceType=0x0, DeviceId=0x0
root #
parted /dev/sda print
Model: ATA TOSHIBA-TR200 (scsi) Disk /dev/sda: 480GB Sector size (logical/physical): 512B/512B Partition Table: mac Disk Flags: Number Start End Size File system Name Flags 1 512B 32.8kB 32.3kB Apple 3 134MB 1074MB 939MB hfs NewWorld Bootblock boot 5 1208MB 109GB 107GB hfs+ Tiger 7 109GB 270GB 161GB hfs+ Leopard 9 270GB 270GB 51.7MB hfs+ Apple Hardware Test boot 11 270GB 271GB 1074MB ext2 Linux Boot 13 271GB 340GB 68.7GB btrfs Gentoo Linux 15 340GB 409GB 68.7GB btrfs Debian Linux 17 409GB 445GB 36.5GB ext4 Linux Local 19 446GB 480GB 34.4GB linux-swap(v1) Linux swap
To make the Linux kernel recognize the new partitions a restart is required. But to get access to devices that were not in use, partprobe (from the sys-block/parted package) can force the kernel to re-read the partition table, with the exception of partitions already in use:
root #
partprobe /dev/sda
Error: Partition(s) 11, 13, 17, 19 on /dev/sda have been written, but we have been unable to inform the kernel of the change, probably because it/they are in use. As a result, the old partition(s) will remain in use. You should reboot now before making further changes.
Notice that partition 11 is now /boot "Linux Boot" (ext2), but it was mounted as /dev/sda9 before the change to /dev/sda11. The former partition numbers and the listet new partition numbers from the partprobe error message should not be used for anything else than to keep them mounted as they were, but it should be safe to access the newly created NewWorld Bootblock as /dev/sda3 now to setup GRUB as the bootloader – before a restart.
CHRP boot script
Install the required tools:
root #
emerge --ask sys-boot/grub sys-fs/hfsutils sys-apps/ibm-powerpc-utils
In this example, a CHRP boot script will load the GRUB image, which will use an initial grub.cfg to find and load the actual grub.cfg configuration from the /boot/grub directory on the Linux Boot
/boot partition.
Make sure that /boot is mounted and create a new directory /boot/NWBB (for NewWorld BootBlock):
root #
mount /boot
root #
mkdir /boot/NWBB
Find out the UUID of the /boot partition:
root #
cat /etc/fstab | grep /boot
UUID=be0188a5-1fd3-46fa-a82a-34cdea8ff194 /boot ext2 noauto,noatime,nodiratime,errors=remount-ro 1 2
Alternative:
root #
cat /etc/fstab | grep /boot
/dev/sda11 /boot ext2 noauto,noatime,nodiratime,errors=remount-ro 1 2
root #
blkid /dev/sda11
/dev/sda11: LABEL="Linux Boot" UUID="be0188a5-1fd3-46fa-a82a-34cdea8ff194" TYPE="ext2" PARTLABEL="Linux Boot"
Create file /boot/NWBB/grub-initial.cfg and use the UUID from above to let GRUB find the correct /boot partition. Although it would also be possible to specify an absolute path, using the UUID will compensate automatically for small changes, like switching drives or adding/deleting partitions.
search --no-floppy --fs-uuid --set=root be0188a5-1fd3-46fa-a82a-34cdea8ff194
set prefix=($root)/grub
configfile /grub/grub.cfg
The UUID set via
--set=root UUID
is the UUID of the ext2 boot partition, not the root partition of the Linux base system. The real grub.cfg in /boot/grub/grub.cfg created by grub-mkconfig takes care of supplying the kernel cmdline with the real root UUID for booting Linux correctly.Install GRUB to /boot/grub (the default path). Option --no-nvram
prevents GRUB from setting the Open Firmware boot-device
nvram variable. Since GRUB doesn't know about the CHRP script on the NewWorld Bootblock, it would set the wrong value anyway.
root #
grub-install --target=powerpc-ieee1275 --no-nvram
With this setup, the initial grub.cfg (/boot/NWBB/grub-initial.cfg), GRUB will then look for /grub/grub.cfg on the actual /boot partition (i.e. /boot/grub/grub.cfg on the live system, since the boot partition is mounted) found via its UUID. Further updates to grub.cfg therefore go via the real grub.cfg the usual way, without the need to touch the NewWorld Bootblock anymore:
root #
grub-mkconfig -o /boot/grub/grub.cfg
Now create a list of modules to be included in the GRUB image.
search_fs_uuid.mod search_fs_file.mod search_label.mod search.mod
part_apple.mod
fshelp.mod ext2.mod
halt.mod reboot.mod echo.mod
The command grub-mkimage will create a minimal grub bootimage that includes these modules and the initial grub.cfg:
root #
grub-mkimage --prefix=/boot/grub --format=powerpc-ieee1275 --config=/boot/NWBB/grub-initial.cfg --output=/boot/NWBB/grub.img `cat /boot/NWBB/grub_mod-minimal.list`
If --config
with grub-initial.cfg is ommited, it will be looked up as grub.cfg in the same directory where the grub.img will later be loaded on the NewWorld Bootblock HFS partition.
This /grub/grub.img bootloader can then be called from a CHRP boot script, which will enable easy selection. When turning on (or rebooting) the Power Mac, holding the ⌥/Option/Alt key right after the chime until the graphical boot selection appears, Open Firmware will show a list of all found operating systems with a compatible os-badge
icon. Standard filenames for such a CHRP boot script are ofboot.b, which is used here, or bootinfo.txt. In reality the file name for the CHRP boot script does not matter as long as it is in XML format and the only blessed file on the partition. It may contain the following:
<CHRP-BOOT>
<COMPATIBLE>
MacRISC MacRISC3 MacRISC4
</COMPATIBLE>
<DESCRIPTION>
GRand Unified Bootloader
</DESCRIPTION>
<OS-NAME>
Linux
</OS-NAME>
<OS-BADGE-ICONS>
3434
00000000000000F781FB8181818181FBFAF500000000000000000000000000000000000000F6FAFAFAFA81F9F600000000000000
0000000000F8FBF9F500F95656FCFB5656FBF800000000000000000000000000000000F5FAF9F5F7F600F6F6F9FAF70000000000
000000F5FBFA0056FDFEFEFDFDFAAC81FB56568181560000000000000000000000F9F9F9F7FCFDFEFEFEFFFC81F656FA00000000
0000F5AC2BF7FBFEFEFD2BF6568181F9F7F6F6F8FBF50000000000000000000000FAF700F600F5F7F7F6F7FEFFACF82BFB000000
0000FC2BF5FEFFFFF5F7FC81F70000F7F9FAFAF8000000000000000000000000000056F9F9FAF9F7F7FA812BF7FFFF56F7FA0000
005656F5FEFFAC2BF9FA000000000000000000000000000000000000000000000000000000000000000000FA56FAFEFEF8F9F700
00FB00F7FFFF56F9F800000000000000000000F656FAFA56F50000000000F5F8F9F8F5000000000000000000F9F7FCFFFB00FB00
F8F800ACFFACF6FA000000000000000000F6FA562BF5F5F781FA000000F9FA2B00F556F9F5000000000000000081F8FFFEF6562B
810000FFFFF9FAF500000000000000002B8100F5F9FCACFBF82BFBF6FCFAF6FAFC81F600FA2B000000000000002BF8FEFFF8F5FA
FA00F5FEFFFA8100000000000000002B8100F9FEFFFFFFFFFFFBF6FDFEACFDFEFFFFFFFBF581F600000000000000F9FEFFF700FA
FA00FBFFFEF6F900000000000000F6FB00FCFFFFFFFFFFFFFFFFFCF600FCF7ACFEFFFFFFFDF6810000000000000056F9FFAC00FA
FA00F6FFFFF856000000000000F5FBF5ACFFFFFFFFFFFFFFFFFFFF2B002BF8F5ACFFFFFFFFFDF6FA000000000000F9FCFF560081
FA0081FFFFF8F9000000000000FBF6FBFFFFFFFFFFFFFFFFFFFFFFF800F55600FCFFFFFFFFFF81F8F80000000000F981FFAC0081
FA0000FEFEF8FB0000000000812BFAFFFFFFFFFFFFFEFFFFFDF92BFA0000F6F981ACFEFFFFFFFF56F9F600000000F9FDFF2B0081
FA00FAFFFF81812B000000FAF8F9FFFFFEACFBF80000F500000000F9F900562B0000FCF7F9ACFFFF2BF9F50000F9F6FEFFFB0081
810000FCFFFBF6FB56F7FBF8F9FFFE5600000000F5FAAC000000F82BF6FAFBF800F556F80000F9FFFE2BFAFAFAF8FAFFFEF60081
FAF6F5ACFFFFAC00F856F7ACFFFCF500000000FAFCFFFC00000056AC00F581F92BFEF9FAF6000081FFFFFBF6F62BFFFFACF6F6FA
F6FA00FAFFFFFFACFA56FFFFAC0000000000F6FD2BFEF6F5565600F5F800F60081FEF7F656000000FDFFFFFDFDFFFFFFAC0081F5
0081F52BFDFFFFFFFFFFFFFFF60000000000FBF6F6F5F656F52BF900FA000000FCFAF5F656000000F7FFFFFFFFFFFFFDF7F68100
00F6FB00F8FDFFFFFFFFFF810000000000F6F5000000F52B56F9FC00F7F70000FCF881FCF500000000FEFFFFFFFFAC5600FBF500
000056F900F8ACFDFFFFFFF5000000000000002B0000FDFEFFFE560000F60000F9ACFFFE810000000081FFFEFDFAF800FAF70000
000000FAF9002B56FAFDFC0000000000000000F80000FBF5FEFEF5000000000000ACFFFA2B0000000000FEFB2BF5008156000000
00000000F9FBF600F6FBF800000000000000F7F8000000F9F9F9F82B0000000000F6ACACF70000000000F7FD2BFA812B00000000
0000000000F681FCFBFD0000000000000000FBF6000000000000F52B000000000000F92B810000000000008181F6000000000000
0000000000000000F6FC00000000000000F6FF0000000000000000000000000000000081FBFB2B00000000F7F900000000000000
000000000000000000FC00000000000000FCFAF600000000000000000000000000000056ACF581FBF700000081FB000000000000
0000000000000000FAF90000000000008156F5F8000000000000002BFBFCFBF800000000FD2B000056FB8181FBF8000000000000
0000000000000000AC0000000000F5FBF90000F6000000000000F5AC56F6005681F50000F6ACFCFBF70000000000000000000000
00000000000000F881000000F5FAFDFD00000000000000000000F7FEFA2B0000F581F70000000000810000000000000000000000
000000000000F9FCF500FAFDACFAF5FD00000000000000000000F5ACF5FDFEFA0000F82B00000000810000000000000000000000
000000000000FCF8F9AC81FD000000FD000000000000FAF7000000F50081F9FAF800000000000000FB0000000000000000000000
000000000000FC81F956F5FD000000FD0000000000000000F800F5000000000056000000000000F7FB0000000000000000000000
00000000000000000000F5AC000000ACF800000000000000F5FAF80000000000F50000000000F8ACF50000000000000000000000
00000000000000000000F5AC000000F5AC000000000000000056F9000000000000000000F7ACFCF5000000000000000000000000
00000000000000000000F5FD00000000AC000000000000000000FB0000000000000000F5F6F5FCF6000000000000000000000000
0000000000000000000000FD00000000FBFDF600000000000000F8F900000000000000000000F5FB000000000000000000000000
0000000000000000000000FDF500000000F9ACF800000000000000815600000000F656818181AC56000000000000000000000000
000000000000000000000081F80000000000F9FC0000000000000000F9ACACACFCFBFAFA81FD2B00000000000000000000000000
0000000000000000000000F7FB0000000000FBF70000000000000000000000000000000000FB0000000000000000000000000000
000000000000000000000000ACF500000000F9FD56F5000000000000000000000000000000FB0000000000000000000000000000
000000000000000000000000F8FA0000000000F6FEFEF5000000000000F55681FCACFDACFC560000000000000000000000000000
00000000000000000000000000FBF600000000002BFCFA00F700000000F9FDFDFAFEF90000000000000000000000000000000000
00000000000000000000000000F5FB0000000000F5FEF7ACAC0000000000000000FCF50000000000000000000000000000000000
0000000000000000000000000000F6FA000000002BFF2BFFFFAC00000000000000F7FA0000000000000000000000000000000000
000000000000000000000000000000F65600000000FAFEFFFFAC0000000000F800F6810000000000000000000000000000000000
00000000000000000000000000000000F52B00000000F8FEFBFF5600000000FCFAACF60000000000000000000000000000000000
0000000000000000000000000000000000000000000000F9FCFCFFFB00F8FEFFFDF5000000000000000000000000000000000000
00000000000000000000000000000000000000000000F9FDF7F5FFFD56FFFFFFFD00000000000000000000000000000000000000
00000000000000000000000000000000000000000000810000FBFFFFFBFFFFFFFFACF9F5F5000000000000000000000000000000
0000000000000000000000000000000000000000000000F600FC81FFFEFFFFFFFFFFFE8100000000000000000000000000000000
00000000000000000000000000000000000000000000000000F7F6FDFFFFFFFEFFFFACF500000000000000000000000000000000
000000000000000000000000000000000000000000000000000000F5FC81FC81FAFBF9F500000000000000000000000000000000
00000000000000F781FB8181818181FBFAF500000000000000000000000000000000000000F6FAFAFAFA81F9F600000000000000
0000000000F8FBF9F500F95656FCFB5656FBF800000000000000000000000000000000F5FAF9F5F7F600F6F6F9FAF70000000000
000000F5FBFA0056FDFEFEFDFDFAAC81FB56568181560000000000000000000000F9F9F9F7FCFDFEFEFEFFFC81F656FA00000000
0000F5AC2BF7FBFEFEFD2BF6568181F9F7F6F6F8FBF50000000000000000000000FAF700F600F5F7F7F6F7FEFFACF82BFB000000
0000FC2BF5FEFFFFF5F7FC81F70000F7F9FAFAF8000000000000000000000000000056F9F9FAF9F7F7FA812BF7FFFF56F7FA0000
005656F5FEFFAC2BF9FA000000000000000000000000000000000000000000000000000000000000000000FA56FAFEFEF8F9F700
00FB00F7FFFF56F9F800000000000000000000F656FAFA56F50000000000F5F8F9F8F5000000000000000000F9F7FCFFFB00FB00
F8F800ACFFACF6FA000000000000000000F6FA562BF5F5F781FA000000F9FA2B00F556F9F5000000000000000081F8FFFEF6562B
810000FFFFF9FAF500000000000000002B8100F5F9FCACFBF82BFBF6FCFAF6FAFC81F600FA2B000000000000002BF8FEFFF8F5FA
FA00F5FEFFFA8100000000000000002B8100F9FEFFFFFFFFFFFBF6FDFEACFDFEFFFFFFFBF581F600000000000000F9FEFFF700FA
FA00FBFFFEF6F900000000000000F6FB00FCFFFFFFFFFFFFFFFFFCF600FCF7ACFEFFFFFFFDF6810000000000000056F9FFAC00FA
FA00F6FFFFF856000000000000F5FBF5ACFFFFFFFFFFFFFFFFFFFF2B002BF8F5ACFFFFFFFFFDF6FA000000000000F9FCFF560081
FA0081FFFFF8F9000000000000FBF6FBFFFFFFFFFFFFFFFFFFFFFFF800F55600FCFFFFFFFFFF81F8F80000000000F981FFAC0081
FA0000FEFEF8FB0000000000812BFAFFFFFFFFFFFFFEFFFFFDF92BFA0000F6F981ACFEFFFFFFFF56F9F600000000F9FDFF2B0081
FA00FAFFFF81812B000000FAF8F9FFFFFEACFBF80000F500000000F9F900562B0000FCF7F9ACFFFF2BF9F50000F9F6FEFFFB0081
810000FCFFFBF6FB56F7FBF8F9FFFE5600000000F5FAAC000000F82BF6FAFBF800F556F80000F9FFFE2BFAFAFAF8FAFFFEF60081
FAF6F5ACFFFFAC00F856F7ACFFFCF500000000FAFCFFFC00000056AC00F581F92BFEF9FAF6000081FFFFFBF6F62BFFFFACF6F6FA
F6FA00FAFFFFFFACFA56FFFFAC0000000000F6FD2BFEF6F5565600F5F800F60081FEF7F656000000FDFFFFFDFDFFFFFFAC0081F5
0081F52BFDFFFFFFFFFFFFFFF60000000000FBF6F6F5F656F52BF900FA000000FCFAF5F656000000F7FFFFFFFFFFFFFDF7F68100
00F6FB00F8FDFFFFFFFFFF810000000000F6F5000000F52B56F9FC00F7F70000FCF881FCF500000000FEFFFFFFFFAC5600FBF500
000056F900F8ACFDFFFFFFF5000000000000002B0000FDFEFFFE560000F60000F9ACFFFE810000000081FFFEFDFAF800FAF70000
000000FAF9002B56FAFDFC0000000000000000F80000FBF5FEFEF5000000000000ACFFFA2B0000000000FEFB2BF5008156000000
00000000F9FBF600F6FBF800000000000000F7F8000000F9F9F9F82B0000000000F6ACACF70000000000F7FD2BFA812B00000000
0000000000F681FCFBFD0000000000000000FBF6000000000000F52B000000000000F92B810000000000008181F6000000000000
0000000000000000F6FC00000000000000F6FF0000000000000000000000000000000081FBFB2B00000000F7F900000000000000
000000000000000000FC00000000000000FCFAF600000000000000000000000000000056ACF581FBF700000081FB000000000000
0000000000000000FAF90000000000008156F5F8000000000000002BFBFCFBF800000000FD2B000056FB8181FBF8000000000000
0000000000000000AC0000000000F5FBF90000F6000000000000F5AC56F6005681F50000F6ACFCFBF70000000000000000000000
00000000000000F881000000F5FAFDFD00000000000000000000F7FEFA2B0000F581F70000000000810000000000000000000000
000000000000F9FCF500FAFDACFAF5FD00000000000000000000F5ACF5FDFEFA0000F82B00000000810000000000000000000000
000000000000FCF8F9AC81FD000000FD000000000000FAF7000000F50081F9FAF800000000000000FB0000000000000000000000
000000000000FC81F956F5FD000000FD0000000000000000F800F5000000000056000000000000F7FB0000000000000000000000
00000000000000000000F5AC000000ACF800000000000000F5FAF80000000000F50000000000F8ACF50000000000000000000000
00000000000000000000F5AC000000F5AC000000000000000056F9000000000000000000F7ACFCF5000000000000000000000000
00000000000000000000F5FD00000000AC000000000000000000FB0000000000000000F5F6F5FCF6000000000000000000000000
0000000000000000000000FD00000000FBFDF600000000000000F8F900000000000000000000F5FB000000000000000000000000
0000000000000000000000FDF500000000F9ACF800000000000000815600000000F656818181AC56000000000000000000000000
000000000000000000000081F80000000000F9FC0000000000000000F9ACACACFCFBFAFA81FD2B00000000000000000000000000
0000000000000000000000F7FB0000000000FBF70000000000000000000000000000000000FB0000000000000000000000000000
000000000000000000000000ACF500000000F9FD56F5000000000000000000000000000000FB0000000000000000000000000000
000000000000000000000000F8FA0000000000F6FEFEF5000000000000F55681FCACFDACFC560000000000000000000000000000
00000000000000000000000000FBF600000000002BFCFA00F700000000F9FDFDFAFEF90000000000000000000000000000000000
00000000000000000000000000F5FB0000000000F5FEF7ACAC0000000000000000FCF50000000000000000000000000000000000
0000000000000000000000000000F6FA000000002BFF2BFFFFAC00000000000000F7FA0000000000000000000000000000000000
000000000000000000000000000000F65600000000FAFEFFFFAC0000000000F800F6810000000000000000000000000000000000
00000000000000000000000000000000F52B00000000F8FEFBFF5600000000FCFAACF60000000000000000000000000000000000
0000000000000000000000000000000000000000000000F9FCFCFFFB00F8FEFFFDF5000000000000000000000000000000000000
00000000000000000000000000000000000000000000F9FDF7F5FFFD56FFFFFFFD00000000000000000000000000000000000000
00000000000000000000000000000000000000000000810000FBFFFFFBFFFFFFFFACF9F5F5000000000000000000000000000000
0000000000000000000000000000000000000000000000F600FC81FFFEFFFFFFFFFFFE8100000000000000000000000000000000
00000000000000000000000000000000000000000000000000F7F6FDFFFFFFFEFFFFACF500000000000000000000000000000000
000000000000000000000000000000000000000000000000000000F5FC81FC81FAFBF9F500000000000000000000000000000000
00000000000000FFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000000000FFFFFFFFFFFFFFFF00000000000000
0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF0000000000
000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000
0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000
0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000
00FFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFF00
00FFFFFFFFFFFFFFFF00000000000000000000FFFFFFFFFFFF0000000000FFFFFFFFFF000000000000000000FFFFFFFFFFFFFF00
FFFFFFFFFFFFFFFF000000000000000000FFFFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFF
FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FFFFFFFFFFFFFF
FFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FFFFFFFFFFFF
FFFFFFFFFFFFFF00000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000FFFFFFFFFFFF
FFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFF
FFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000FFFFFFFFFFFF
FFFFFFFFFFFFFF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFF
FFFFFFFFFFFFFFFF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00
00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00
0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000
000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000
00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB00000000
0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000
0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000
000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000
0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000
0000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000
00000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000
000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000
000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000
000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000
00000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000
00000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000
00000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000
0000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000
0000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000
0000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000
0000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000
000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000
000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000
00000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000
00000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000
0000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000
000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000
00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000
0000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000
000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000000000
0000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000
00000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000
000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000
0000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000
</OS-BADGE-ICONS>
<BOOT-SCRIPT>
" screen" output
load-base release-load-area
boot &device;:&partition;,\grub\grub.img
</BOOT-SCRIPT>
</CHRP-BOOT>
If, for some reason, the boot
instruction in the <BOOT-SCRIPT>
section does not work, it is always possible to specify the boot partition directly.
The
<BOOT-SCRIPT>
section of the CHRP boot script needs to be in Open Firmware syntax. For the boot
command this is a device-specifier and arguments. The syntax is / component / component / ... name @ address : arguments
. Arguments cannot contain /
or @
, hence the use of backslashes \
in the path. In order to use the current device, the &device;
variable can be used, likewise &partition;
for the current partition. The resulting &device;:&partition;
contains the path where the CHRP script is loaded from. If the device-specifier doesn't start with a slash it is an alias, e.g. hd
stands for the first internal disk drive. All available aliases are listed by the devalias
command on the Open Firmware command prompt, which is loaded by holding ⌘ Cmd + ⌥ Option + O + F keys at the chime.To find the partition number of the NewWorld Bootblock, simply translate the known Linux device path, e.g. /dev/sda3 is partition 3
. In Open Firmware notation the command for the absolute path in the CHRP script would be boot hd:3,\grub\grub.img
when the GRUB image is in /grub/grub.img and the HFS NewWorld Bootblock is the third partition on hd:
, an alias for the first disk drive.
The use of an absolute path has the disadvantage that it has to be changed in case the drive or the partition number changes for some reason. This would be the case if, for example, a second drive is installed and (due to the Open Firmware device lookup order) gets assigned the
hd:
alias, or if a partition is inserted before the NewWorld Bootblock and its partition number changes, resulting in a wrong path in the CHRP boot script. Booting GRUB would no longer work from the Open Firmware boot selection until the boot
statement is changed to the new absolute path in the CHRP boot script. In such a case, GRUB can still be booted from the Open Firmware command prompt manually: should typing boot hd:3,\grub\grub.img
instead of loading GRUB print an error message or load a different system, replacing the drive number and/or partition number could lead to a successful boot. For a second disk drive hd:
may be replaced with hd1:
, likewise the partition number after the colon.<BOOT-SCRIPT>
boot hd:3,\grub\grub.img
</BOOT-SCRIPT>
Now copy all files to the NewWorld Bootblock HFS filesystem into /grub and bless (attribute :tbxi
) the CHRP boot script ofboot.b and the /grub subdirectory:
root #
hformat -l "NewWorld Bootblock" /dev/sda3
root #
hmount /dev/sda3
root #
hmkdir :grub
root #
hcopy -r /boot/NWBB/grub-initial.cfg :grub:grub.cfg
root #
hcopy -r /boot/NWBB/grub.img :grub:grub.img
root #
hcopy -r /boot/NWBB/ofboot.b :grub:ofboot.b
root #
hattrib -c UNIX -t tbxi :grub:ofboot.b
root #
hattrib -b :grub
root #
humount
Test and set as default boot-device
After a reboot, when holding the ⌥/Option/Alt key right after the chime, a startup selection for the partition with GRUB should now be visible. If everything worked, nvram from the sys-apps/ibm-powerpc-utils package may be used to set the default startup volume:
root #
nvram --print-config | grep ^boot-device
boot-device=first-boot/@0:5,\\:tbxi
root #
nvram --update-config boot-device='first-boot/@0:3,\\:tbxi'
In the above commands the default startup volume was /dev/sda5 (in the example APM partition layout from above this is Tiger i.e. Mac OS X Tiger 10.4) and it is then set to /dev/sda3, the GRUB CHRP boot script in this example.
Use the command nvram --print-config | grep ^boot-device to see how the default was set before. This information should be used to set the startup partition to the NewWorld Bootblock since most of the times only the partition number has to be changed. The above example is from a Power Mac G5, it may be different on other Macs.
boot-device=hd:3,\\:tbxi
should also work, as should boot-device=hd:3,\grub\ofboot.b
and boot-device=hd:3,\grub\grub.img
...External resources
- Open Firmware Quick Reference from FirmWorks
- NetBSD/macppc port FAQ, containing useful information about Open Firmware