diff --git a/forth/admin/userboot.fs b/forth/admin/userboot.fs index 626f888..dd76958 100644 --- a/forth/admin/userboot.fs +++ b/forth/admin/userboot.fs @@ -1,10 +1,22 @@ \ 7.4.3.5 User commands for booting : boot ( "{param-text}" -- ) - (encode-bootpath) \ Setup bootpath/bootargs - s" platform-boot" $find if - execute \ Execute platform-specific boot code + linefeed parse + + \ Copy NVRAM parameters from boot-file to bootargs in case any parameters have + \ been specified for the platform-specific boot code + s" boot-file" $find drop execute + encode-string + " /chosen" (find-dev) if + " bootargs" rot (property) then + + \ Execute platform-specific boot code, e.g. kernel + s" platform-boot" $find if + execute + then + + (encode-bootpath) \ Setup bootpath/bootargs $load \ load and go go ; diff --git a/forth/debugging/client.fs b/forth/debugging/client.fs index 1d22a07..f964ed0 100644 --- a/forth/debugging/client.fs +++ b/forth/debugging/client.fs @@ -55,16 +55,19 @@ variable file-size then ; -: (encode-bootpath) ( "{params}" -- bootpath-str bootpath-len) - \ Parse the current input buffer of a load/boot command and set both +: (encode-bootpath) ( param-str param-len -- bootpath-str bootpath-len) + \ Parse the string from a load/boot command and set both \ the bootargs and bootpath properties as appropriate. - cr \ bootpath - bl parse dup 0= if + bl left-split \ argstr argstr-len bootdevstr bootdevstr-len + dup 0= if \ None specified. As per IEEE-1275 specification, search through each value \ in boot-device and use the first that returns a valid ihandle on open. + + 2drop \ drop the empty device string as we're going to use our own + s" boot-device" $find drop execute bl left-split begin @@ -80,8 +83,6 @@ variable file-size then repeat 2drop - else - 0 0 2swap \ Fake (empty) parse string then \ Set the bootpath property @@ -91,7 +92,7 @@ variable file-size then \ bootargs - linefeed parse dup 0= if + 2swap dup 0= if \ None specified, use default from nvram 2drop s" boot-file" $find drop execute then @@ -101,9 +102,6 @@ variable file-size " /chosen" (find-dev) if " bootargs" rot (property) then - - \ Remove the remaining string - 2swap 2drop ; : $load ( devstr len ) @@ -121,6 +119,7 @@ variable file-size ; : load ( "{params}" -- ) + linefeed parse (encode-bootpath) $load ;