Booting from CD ROM - heldersrvio/PureDarwin GitHub Wiki
This page describes how to produce a CD-ROM (or DVD, for that matter) which can boot Darwin on both EFI- and BIOS-based systems.
Master a CD from which both EFI- (Intel Mac) and BIOS-based (PC) systems can boot.
An Intel-based Macintosh will actually be able to boot the volume either through EFI (right-hand side) or through its Compatibility Support Module ("Boot Camp") BIOS emulation (left-hand side, misleadingly labeled "Windows").
The key is to use a HFS+ filesystem for the image (thus, making a ".dmg" rather than a ".iso") and "injecting" parts of an El Torito ISO into it, This is called a "hybrid image".
To create a hybrid image, you can use the pd_makedmg script. It is based on darwinmaster.sh, and has been extended to support EFI booting in addition to BIOS booting. Its syntax is as follows:
pd_makedmg /Volumes/PureDarwinDisk /tmp/puredarwin.dmg PureDarwin
This would take the files located at /Volumes/PureDarwinDisk
(which should contain a working Darwin installation) and turn them into a disk image located at /tmp/puredarwin.dmg
with the name of "PureDarwin", which could be burned to a CD e.g., using Disk Utility.
Note that pd_makedmg
currently needs a Mac to run, since it makes use of commands like hdiutil
which are not part of Darwin.
Here is what it essentially does:
- Creates
Extensions.mkext
from the kexts in the source tree - Makes a temporary ISO that contains the boot-132 files and that has cdboot as its El Torito boot image (this allows BIOS-based machines to boot)
- Creates, initializes and mounts a HFS+ disk image (dmg)
- "Injects" parts of the temporary El Torito ISO into the dmg using
dd if="$ELTORITOISO" of=$rdev skip=64 seek=64 bs=512
(Do not actually execute this command. It is ran automatically by the script.) - Copies the contents of the source tree to the dmg
- Blesses
boot.efi
(this allows EFI-based machines to boot)
Following the instructions from above should produce a CD that boots at least to the point Still waiting for root device...
. For the kernel to be able to access the CD, the necessary kexts need to be installed of course. These are, in addition to the minimal set of kexts:
- IOATAPIProtocolTransport.kext
- IOCDStorageFamily.kext
- IODVDStorageFamily.kext
- IOBDStorageFamily.kext (Blu-ray Disc driver; available for Darwin as binary only)
- Remove any tools that are not part of Darwin
- replace
hdiutil create
with a simpledd if=/dev/zero
andhdid -nomount
withlosetup
... and it would appear to work on Linux then (dfe)