plan9fox/sys/src/9/boot/reboot.rc
cinap_lenrek 2985d53b7a 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.
2018-09-16 22:35:16 +02:00

57 lines
938 B
Bash
Executable file

#!/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)