PowerPC, gpart and multiboot (Was: Trying to install FreeBSD
8.2-RC1 on a PowerMac G5)
Torfinn Ingolfsen
torfinn.ingolfsen at broadpark.no
Mon Mar 21 19:21:58 UTC 2011
On Sun, 20 Mar 2011 17:06:00 -0500
Nathan Whitehorn <nwhitehorn at freebsd.org> wrote:
> On 03/20/11 17:00, Torfinn Ingolfsen wrote:
> > Anyway, here is my plan for multiboot:
> > root at kg-g5# gpart show ad0
> > => 18 625142430 ad0 APM (298G)
> > 18 1600 1 apple-boot (800K)
> > 1618 155189248 2 freebsd-ufs (74G)
> > 155190866 8388608 3 freebsd-swap (4.0G)
> > 163579474 1600 4 apple-boot (800K)
> > 163581074 155189248 5 freebsd-ufs (74G)
> > 318770322 306372126 - free - (146G)
> >
> > The boot code in partition 4 (ad0s5) will be modified so that it boots from
> > the next partition (the partition after the one the bootcode itself is loaded from)
> > instead of the first partition. Do you think it's doable?
> >
> > I have examined boot1.c (in /usr/src/sys/boot/powerpc/boot1.chrp) but I don't
> > really understand how it is finding the partition to boot / load the kernel from.
> >
> > Can anyone explain it?
>
> I wrote it, so hopefully I can provide some insight. At line 423 of
> boot1.c, it loops through the first 16 (arbitrary) partitions on the
> device from which it was booted, then tries to find loader on the first
> UFS partition it can mount. This isn't actually a good algorithm, but it
> works pretty well.
>
> Making it choose the first following UFS partition might be a good idea,
Provided the bootblock is able to figure out from where it is booted.
My thinking is this; boot1.c figure out which partition it is started from, starts looking at
own partition + 1, and the just goes through all 16 partitions (by doing n - 16; then 1 - n) lookinf for the first
ufs partition with /boot/loader on it.
This way, the boot block will still work for all cases; and worst case will be if you have the ufs partition with /boot/loader
preceeding the bootstrap partition.
Perhaps the code won't be as elegant, it would need two for loops, or a rewrite.
> or do something useful with its arguments.
I'm a bit usure about if there are any useful parameters available.
On my G5 quad, it prints the following values when booted from ad0s2 (the first 800K bootstrap partition):
Boot path: /ht at 0,f2000000/pci at 9/k2-sata-root at c/k2-sata at 0/disk at 0:
Boot loader: /boot/loader
Boot volume: /ht at 0,f2000000/pci at 9/k2-sata-root at c/k2-sata at 0/disk at 0:3
After the boot, ofwdump shows this
root at kg-g5# ofwdump -S -P bootargs /chosen
/ht at 0,f2000000/pci at 9/k2-sata-root at c/k2-sata at 0/disk at 0:3
root at kg-g5# ofwdump -S -P bootpath /chosen
/ht at 0,f2000000/pci at 9/k2-sata-root at c/k2-sata at 0/disk at 0:2,\ppc\boot1.elf
And, if I boot from the boot block at ad0s5 (the second 800K bootstrap partition), it prints exactly the same values,
but ofwdump differs:
root at kg-g5# ofwdump -S -P bootargs /chosen
/ht at 0,f2000000/pci at 9/k2-sata-root at c/k2-sata at 0/disk at 0:3
root at kg-g5# ofwdump -S -P bootpath /chosen
/ht at 0,f2000000/pci at 9/k2-sata-root at c/k2-sata at 0/disk at 0:5,\ppc\boot1.elf
So now I just need to figure out how to get this in your bootblock. Hmm....
Ok, I think I see it now - in the function ofw_init, at line 139 of boot1.c, you just terminate the string after the ':', thus
discarding the partition number and the remainder of the string. Correct?
A global varoiable to keep the booted-from-partition in, perhaps?
--
Torfinn
More information about the freebsd-ppc
mailing list