bootrc: add experimental reboot method to load another kernel
syntax: reboot!bootfile[!method...] this echos bootfile to /dev/reboot, causing bootfile kernel to be started. when method is given, we first connect to the filesystem and set bootargs so that bootfile can be loaded from the target network or local fileserver. note, when no bootfile is given, this causes the kernel to reboot to bios.
This commit is contained in:
parent
9d60ece816
commit
2985d53b7a
2 changed files with 57 additions and 0 deletions
|
@ -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
|
||||
|
|
56
sys/src/9/boot/reboot.rc
Executable file
56
sys/src/9/boot/reboot.rc
Executable file
|
@ -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)
|
Loading…
Reference in a new issue