diff --git a/sys/src/9/boot/bootfs.proto b/sys/src/9/boot/bootfs.proto index a59ad6db5..1bffa0c47 100644 --- a/sys/src/9/boot/bootfs.proto +++ b/sys/src/9/boot/bootfs.proto @@ -48,6 +48,7 @@ $objtype rc lib rcmain + reboot.rc 555 sys sys ../boot/reboot.rc local.rc 555 sys sys ../boot/local.rc net.rc 555 sys sys ../boot/net.rc bin diff --git a/sys/src/9/boot/reboot.rc b/sys/src/9/boot/reboot.rc new file mode 100755 index 000000000..536ac2009 --- /dev/null +++ b/sys/src/9/boot/reboot.rc @@ -0,0 +1,56 @@ +#!/bin/rc + +fn configreboot { + if(~ $"* *!*){ + *=`{echo $* | sed 's,!, ,'} + shift + *=`{echo $* | sed 's,!, ,'} + x=m$1 + x=$$x + shift + + # config method + $x(1) $* + } +} + +fn connectreboot { + if(~ $"* *!*){ + *=`{echo $* | sed 's,!, ,'} + bootfile=$1 + shift + bootargs=$* + *=`{echo $* | sed 's,!, ,'} + x=m$1 + x=$$x + shift + + # connect method + $x(2) $* + + rfork ne + + # set new kernel parameters + echo -n $bootargs > '#ec/bootargs' + + # remove part of our temporary root + /mnt/broot/$cputype/bin/unmount /$cputype/bin /bin + /mnt/broot/$cputype/bin/unmount /rc/bin /bin + /mnt/broot/$cputype/bin/unmount / + + # create the name space, mount the root fs + /mnt/broot/$cputype/bin/bind / / + /mnt/broot/$cputype/bin/mount -ac '#s/boot' / + } + if not { + bootfile=$1 + } + + # load the new kernel + /mnt/broot/$cputype/bin/echo reboot $bootfile > /dev/reboot + exit 'reboot failed' +} + +mreboot=(configreboot connectreboot) + +mt=(mreboot $mt)