[GSoC] beastie.4th problem

Patrick Georgi patrick.georgi at coresystems.de
Tue Aug 19 02:24:22 PDT 2008

Louisa Luciani schrieb:
> +        dup bootsmpkey @ = if
> +            s" /kernel.smp/modules" s" module_path" setenv
> +            s" /kernel.smp/kernel" boot
> +        then
> +        dup bootsmpnoapickey @ = if
> +            s" /kernel.smp/modules" s" module_path" setenv
> +            0 s" /kernel.smp/kernel.noapic" boot
> +        then
what works for me is:

0 1 unload drop
s" kernel.foo" s" kernel" setenv
1 boot

seems like the "kernel" variable can only be changed if the kernel is
unloaded, hence the "unload" directive. boot automatically loads the
kernel based on that variable if no kernel is loaded already.

I'm not sure if the constants in front of "unload" are strictly
necessary, I merely copied that line from somewhere else.

What you were definitely missing was the "interpreted or not" flag on
the top-of-stack when entering boot: the first line of boot starts with
	0= if ( interpreted ) .... then

The comment thankfully gives a hint what is tested here. The point is,
you ran boot with the following stack layout: (addr/len is what s" returns)
	address-of-string length-of-string
where boot expects (unfortunately that isn't documented, so that's
reconstructed from the code):
	addr1 len1 .. addrN lenN N interpreted-flag
with N the number of addr/len pairs.

If addrN/lenN points to a string that doesn't start with "-", it's
considered a path (to kernel and modules, or filename of the kernel, so
the following might work, too - warning: untested!):
	s" /kernel.smp/kernel.noapic" 1 1 boot

Patrick Georgi

More information about the Users mailing list