Add /sys/src/9/boot/tread, a tool to read a line with a timeout.
While here, remove boot(8) references to pcload.
This commit is contained in:
parent
6ef6d247bc
commit
b261a0c31b
7 changed files with 88 additions and 25 deletions
|
@ -16,3 +16,7 @@ $BOOTFILES: $BOOTDIR/boot.h
|
||||||
|
|
||||||
%.$O: $BOOTDIR/%.c
|
%.$O: $BOOTDIR/%.c
|
||||||
$CC -I$BOOTDIR $CFLAGS $BOOTDIR/$stem.c
|
$CC -I$BOOTDIR $CFLAGS $BOOTDIR/$stem.c
|
||||||
|
|
||||||
|
tread: tread.c
|
||||||
|
$CC tread.c
|
||||||
|
$LD -o tread tread.8
|
||||||
|
|
|
@ -67,22 +67,17 @@ fn readmethod{
|
||||||
timeo=5
|
timeo=5
|
||||||
resp=()
|
resp=()
|
||||||
while(~ $#resp 0){
|
while(~ $#resp 0){
|
||||||
if(~ $#pcload 0)
|
echo -n 'root is from: '
|
||||||
echo -n 'root is from: '
|
resp=`{tread $timeo}
|
||||||
if not
|
|
||||||
echo -n 'kernel is at: '
|
|
||||||
resp=`{read}
|
|
||||||
if(! ~ $status ''){
|
if(! ~ $status ''){
|
||||||
bootconf # set configuration from file
|
bootconf # set configuration from file
|
||||||
if(! ~ $#nobootprompt 0)
|
if(! ~ $#nobootprompt 0)
|
||||||
bootargs=$nobootprompt
|
bootargs=$nobootprompt
|
||||||
resp=$bootargs
|
resp=$bootargs
|
||||||
}
|
}
|
||||||
if(~ $resp !rc){
|
if(~ $resp !rc)
|
||||||
rc -i
|
rc -i
|
||||||
resp=()
|
timeo=0
|
||||||
}
|
|
||||||
timo=0
|
|
||||||
}
|
}
|
||||||
|
|
||||||
method=`{echo $resp | awk -F! '{print $1}'}
|
method=`{echo $resp | awk -F! '{print $1}'}
|
||||||
|
@ -103,9 +98,6 @@ fn readmethod{
|
||||||
|
|
||||||
fn authentication{
|
fn authentication{
|
||||||
if(! test -f /srv/factotum){
|
if(! test -f /srv/factotum){
|
||||||
# in pcload we only need to read the kernel
|
|
||||||
if(~ $pcload 1)
|
|
||||||
user=none
|
|
||||||
x=(auth/factotum -sfactotum)
|
x=(auth/factotum -sfactotum)
|
||||||
if(~ $cpuflag 1)
|
if(~ $cpuflag 1)
|
||||||
x=($x -kS)
|
x=($x -kS)
|
||||||
|
@ -142,10 +134,6 @@ fn main{
|
||||||
$mp($connect)
|
$mp($connect)
|
||||||
|
|
||||||
must mount -c /srv/boot /root
|
must mount -c /srv/boot /root
|
||||||
if(~ $pcload 1){
|
|
||||||
echo reboot /root/$kern >/dev/reboot
|
|
||||||
fatal kernel load failed: $kern
|
|
||||||
}
|
|
||||||
|
|
||||||
swapproc
|
swapproc
|
||||||
|
|
||||||
|
|
|
@ -28,8 +28,7 @@ fn confmount{
|
||||||
}
|
}
|
||||||
|
|
||||||
fn findconf{
|
fn findconf{
|
||||||
# search cd/dvd drives first
|
for(d in /dev/sd*)
|
||||||
for(d in $cddevs /dev/sd* /dev/fd*disk)
|
|
||||||
for(p in `{ls $d}){
|
for(p in `{ls $d}){
|
||||||
if(~ $found 0){
|
if(~ $found 0){
|
||||||
confmount $p
|
confmount $p
|
||||||
|
|
7
sys/src/9/boot/local.rc
Executable file → Normal file
7
sys/src/9/boot/local.rc
Executable file → Normal file
|
@ -5,13 +5,6 @@ fn configlocal{
|
||||||
fstype=`{echo $disk | sed 's,.*/(.*)$,\1,g'}
|
fstype=`{echo $disk | sed 's,.*/(.*)$,\1,g'}
|
||||||
disk=`{echo $disk | sed 's,(.*)/.*$,\1,'}
|
disk=`{echo $disk | sed 's,(.*)/.*$,\1,'}
|
||||||
|
|
||||||
if(~ $pcload 1){
|
|
||||||
kern=`{echo $methodarg | sed 's,.*!(.*)$,\1,g'}
|
|
||||||
|
|
||||||
# for now we only allow kernels in the same dev/part of $methodargs
|
|
||||||
if(~ $#kern 0 || ! ~ $#bootfile 0)
|
|
||||||
kern=`{echo $bootfile | sed 's,.*!(.*)$,\1,g'}
|
|
||||||
}
|
|
||||||
diskparts
|
diskparts
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
73
sys/src/9/boot/tread.c
Normal file
73
sys/src/9/boot/tread.c
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
#include <u.h>
|
||||||
|
#include <libc.h>
|
||||||
|
|
||||||
|
int c;
|
||||||
|
|
||||||
|
int
|
||||||
|
alarmed(void *a, char *msg)
|
||||||
|
{
|
||||||
|
USED(a);
|
||||||
|
USED(msg);
|
||||||
|
if(!c)
|
||||||
|
exits("timedout");
|
||||||
|
noted(NCONT);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
readline(int fd, char *buf, int nbuf)
|
||||||
|
{
|
||||||
|
int i, n;
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
while(i < nbuf-1){
|
||||||
|
n = read(fd, &c, sizeof c);
|
||||||
|
alarm(0);
|
||||||
|
c &= 0xff;
|
||||||
|
write(fd, &c, 1);
|
||||||
|
if(n != 1 || c == '\04' || c == '\177'){
|
||||||
|
i = 0;
|
||||||
|
break;
|
||||||
|
} else if(c == '\n')
|
||||||
|
break;
|
||||||
|
else if(c == '\b' && i > 0)
|
||||||
|
--i;
|
||||||
|
else if(c == ('u' & 037)){
|
||||||
|
c = '\b';
|
||||||
|
for(n=0; n <= i; n++)
|
||||||
|
write(fd, &c, 1);
|
||||||
|
i = 0;
|
||||||
|
} else
|
||||||
|
buf[i++] = c;
|
||||||
|
}
|
||||||
|
buf[i] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
int fd, ctl, i;
|
||||||
|
char buf[256];
|
||||||
|
long n;
|
||||||
|
|
||||||
|
if(argc < 2)
|
||||||
|
sysfatal("usage: tread timeout");
|
||||||
|
|
||||||
|
atnotify(alarmed, 1);
|
||||||
|
|
||||||
|
fd = open("/dev/cons", ORDWR);
|
||||||
|
if(fd < 0)
|
||||||
|
sysfatal("open cons: %r");
|
||||||
|
ctl = open("/dev/consctl", OWRITE);
|
||||||
|
if(ctl < 0)
|
||||||
|
sysfatal("open consctl: %r");
|
||||||
|
|
||||||
|
write(ctl, "rawon", 5);
|
||||||
|
alarm(atoi(argv[1])*1000);
|
||||||
|
|
||||||
|
readline(fd, buf, sizeof(buf));
|
||||||
|
close(ctl);
|
||||||
|
close(fd);
|
||||||
|
print("%s", buf);
|
||||||
|
exits(nil);
|
||||||
|
}
|
|
@ -30,6 +30,7 @@ $cputype
|
||||||
seq
|
seq
|
||||||
srv
|
srv
|
||||||
test
|
test
|
||||||
|
tread 555 sys sys ../boot/tread
|
||||||
unmount
|
unmount
|
||||||
usb
|
usb
|
||||||
usbd
|
usbd
|
||||||
|
|
|
@ -33,6 +33,11 @@ fn rootbz2 {
|
||||||
rm boot.bz2
|
rm boot.bz2
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@{cd ../boot
|
||||||
|
. /$cputype/mkfile
|
||||||
|
mk -f bootmkfile tread
|
||||||
|
}
|
||||||
|
|
||||||
bootraw
|
bootraw
|
||||||
bootbz2
|
bootbz2
|
||||||
rootbz2
|
rootbz2
|
||||||
|
|
Loading…
Reference in a new issue