On Sun, Jan 3, 2010 at 3:40 AM, Mark Cave-Ayland mark.cave-ayland@siriusit.co.uk wrote:
Tarl Neustaedter wrote:
Tarl: is this nested boot process something that auto-boot should handle automatically based on various bootarchive properties set by the initial Fcode loader?
Sorry about the delay, I just checked my email.
I don't believe there is anything that should be automatically handled by the boot process - when you load /boot-archive, the fcode loaded should itself at the end invoke whatever execution method is required. My recollection is that boot-archive proceeds to load an ELF file and then jumps to that - I can verify that on monday.
Yeah; the part I couldn't see was how on earth the Fcode was loaded from /ramdisk-root. However some searching on the internet gave the following URL from one of the opensolaris mailing list archives: http://markmail.org/message/sfoiqklq7xcpcrld which gives the following quote about the booter phase:
6.2 Booter phase
This phase is derived from the SPARC wanboot ramdisk process (see PSARC 2001/009), and is responsible for reading the boot archive from the root file system (or install server in wanboot's case) into a ramdisk device. It does this by:
- opening the boot-device (which it found as the "bootpath" property in the
OBP "/chosen" node)
- using its file system specific reader to read the boot archive (by
default, /platform/`uname -m`/boot_archive)
creating a ramdisk device in "/ramdisk"
creating "bootarchive" and "fstype" properties in | "/chosen" |
booting the archive (a ramdisk is just another type of disk, so executing
the boot block area serves this purpose)
Given that init-program in OpenBIOS checks for several different payloads, I've simply added an Fcode payload detection routine that detects the version1 or startX words, skips the Fcode header and then runs the Fcode evaluator. This seems to work fine on my tests here, so I'll commit in a short while.
Have we verified that OpenBios can jump to a SPARC ELF file?
Hmmm no - looking at the PPC code for the go word it seems that we need someone who owns a copy of the IEEE-1275 bindings for SPARC and who is proficient in SPARC assembler to implement this :(
Which bindings? http://playground.sun.com/1275/home.html gives a SPARC binding but that is for V8.