kernel: simplify /boot/boot: 28K down to less than 4K.
- avoid print() format routines (saves alot of code) - avoid useless opens of /dev/cons (already done by initcode) - avoid useless binds of /env and /dev (already done by initcode) - do bind of /shr in bootrc, it is not needed by us - we'r pid 1 so kernel will print the exit message for us
This commit is contained in:
parent
70d173bfa4
commit
df04ea8d6c
6 changed files with 31 additions and 170 deletions
|
@ -1,86 +0,0 @@
|
|||
#include <u.h>
|
||||
#include <libc.h>
|
||||
#include <../boot/boot.h>
|
||||
|
||||
void
|
||||
fatal(char *s)
|
||||
{
|
||||
char buf[ERRMAX];
|
||||
|
||||
buf[0] = '\0';
|
||||
errstr(buf, sizeof buf);
|
||||
fprint(2, "boot: %s: %s\n", s, buf);
|
||||
exits(0);
|
||||
}
|
||||
|
||||
int
|
||||
readfile(char *name, char *buf, int len)
|
||||
{
|
||||
int f, n;
|
||||
|
||||
buf[0] = 0;
|
||||
f = open(name, OREAD);
|
||||
if(f < 0)
|
||||
return -1;
|
||||
n = read(f, buf, len-1);
|
||||
if(n >= 0)
|
||||
buf[n] = 0;
|
||||
close(f);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
run(char *file, ...)
|
||||
{
|
||||
char buf[64];
|
||||
Waitmsg *w;
|
||||
int pid;
|
||||
|
||||
switch(pid = fork()){
|
||||
case -1:
|
||||
fatal("fork");
|
||||
case 0:
|
||||
exec(file, &file);
|
||||
snprint(buf, sizeof buf, "can't exec %s", file);
|
||||
fatal(buf);
|
||||
default:
|
||||
while((w = wait()) != nil)
|
||||
if(w->pid == pid)
|
||||
break;
|
||||
if(w == nil){
|
||||
snprint(buf, sizeof buf, "wait returned nil running %s", file);
|
||||
free(w);
|
||||
fatal(buf);
|
||||
}
|
||||
free(w);
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
writefile(char *name, char *buf, int len)
|
||||
{
|
||||
int f, n;
|
||||
|
||||
f = open(name, OWRITE);
|
||||
if(f < 0)
|
||||
return -1;
|
||||
n = write(f, buf, len);
|
||||
close(f);
|
||||
return (n != len) ? -1 : 0;
|
||||
}
|
||||
|
||||
void
|
||||
setenv(char *name, char *val, int ec)
|
||||
{
|
||||
int f;
|
||||
char ename[64];
|
||||
|
||||
snprint(ename, sizeof ename, "#e%s/%s", ec ? "c" : "", name);
|
||||
f = create(ename, 1, 0666);
|
||||
if(f < 0){
|
||||
fprint(2, "create %s: %r\n", ename);
|
||||
return;
|
||||
}
|
||||
write(f, val, strlen(val));
|
||||
close(f);
|
||||
}
|
|
@ -1,48 +1,34 @@
|
|||
#include <u.h>
|
||||
#include <libc.h>
|
||||
#include <auth.h>
|
||||
#include <fcall.h>
|
||||
#include "../boot/boot.h"
|
||||
|
||||
char bin[] = "/bin";
|
||||
char root[] = "/root";
|
||||
|
||||
void
|
||||
main(int argc, char *argv[])
|
||||
main(int, char *argv[])
|
||||
{
|
||||
char cputype[64];
|
||||
char buf[32];
|
||||
|
||||
fmtinstall('r', errfmt);
|
||||
|
||||
bind("#c", "/dev", MREPL);
|
||||
open("/dev/cons", OREAD);
|
||||
open("/dev/cons", OWRITE);
|
||||
open("/dev/cons", OWRITE);
|
||||
/*
|
||||
* init will reinitialize its namespace.
|
||||
* #ec gets us plan9.ini settings (*var variables).
|
||||
*/
|
||||
bind("#ec", "/env", MREPL);
|
||||
bind("#e", "/env", MBEFORE|MCREATE);
|
||||
bind("#s", "/srv", MREPL|MCREATE);
|
||||
bind("#σ", "/shr", MREPL);
|
||||
|
||||
if(Debug){
|
||||
int i;
|
||||
|
||||
print("argc=%d\n", argc);
|
||||
for(i = 0; i < argc; i++)
|
||||
print("%p %s ", argv[i], argv[i]);
|
||||
print("\n");
|
||||
}
|
||||
USED(argc);
|
||||
|
||||
readfile("#e/cputype", cputype, sizeof(cputype));
|
||||
|
||||
/* setup the boot namespace */
|
||||
bind("/boot", "/bin", MAFTER);
|
||||
run("/bin/paqfs", "-qa", "-c", "8", "-m" "/root", "/boot/bootfs.paq", nil);
|
||||
bind("/root", "/", MAFTER);
|
||||
snprint(buf, sizeof(buf), "/%s/bin", cputype);
|
||||
bind(buf, "/bin", MAFTER);
|
||||
bind("/rc/bin", "/bin", MAFTER);
|
||||
bind("/boot", bin, MAFTER);
|
||||
|
||||
if(fork() == 0){
|
||||
execl("/bin/paqfs", "-qa", "-c", "8", "-m", root, "/boot/bootfs.paq", nil);
|
||||
goto Err;
|
||||
}
|
||||
if(await(buf, sizeof(buf)) < 0)
|
||||
goto Err;
|
||||
|
||||
bind(root, "/", MAFTER);
|
||||
|
||||
buf[0] = '/';
|
||||
buf[1+read(open("/env/cputype", OREAD|OCEXEC), buf+1, sizeof buf - 5)] = '\0';
|
||||
strcat(buf, bin);
|
||||
bind(buf, bin, MAFTER);
|
||||
bind("/rc/bin", bin, MAFTER);
|
||||
|
||||
exec("/bin/bootrc", argv);
|
||||
Err:
|
||||
errstr(buf, sizeof buf);
|
||||
_exits(buf);
|
||||
}
|
||||
|
|
|
@ -1,9 +0,0 @@
|
|||
enum {
|
||||
Debug = 0,
|
||||
};
|
||||
|
||||
extern void fatal(char*);
|
||||
extern int readfile(char*, char*, int);
|
||||
extern void run(char*, ...);
|
||||
extern void setenv(char*, char*, int);
|
||||
extern int writefile(char*, char*, int);
|
|
@ -1,24 +1,15 @@
|
|||
BOOTDIR=../boot
|
||||
boot.$O: ../boot/boot.c
|
||||
$CC -I../boot $CFLAGS ../boot/boot.c
|
||||
|
||||
BOOTFILES=\
|
||||
aux.$O\
|
||||
boot.$O\
|
||||
printstub.$O\
|
||||
|
||||
$BOOTFILES: $BOOTDIR/boot.h
|
||||
|
||||
%.$O: $BOOTDIR/%.c
|
||||
$CC -I$BOOTDIR $CFLAGS $BOOTDIR/$stem.c
|
||||
|
||||
boot: $BOOTFILES
|
||||
$LD -o $target $BOOTFILES
|
||||
boot: boot.$O
|
||||
$LD -o $target $prereq
|
||||
|
||||
# look for proto file in order:
|
||||
# 1) $CONF.bootfs.proto (config specific)
|
||||
# 2) bootfs.proto (kernel specific)
|
||||
# 3) $BOOTDIR/bootfs.proto (default generic)
|
||||
# 3) ../boot/bootfs.proto (default generic)
|
||||
#
|
||||
BOOTFSPROTO=`{for(i in $CONF.bootfs.proto bootfs.proto $BOOTDIR/bootfs.proto) test -r $i && echo $i && exit}
|
||||
BOOTFSPROTO=`{for(i in $CONF.bootfs.proto bootfs.proto ../boot/bootfs.proto) test -r $i && echo $i && exit}
|
||||
|
||||
bootfs.paq: $BOOTFSPROTO `{disk/mkfs -aos / $BOOTFSPROTO >[2]/dev/null}
|
||||
mkdir -p bootfs
|
||||
|
|
|
@ -8,6 +8,7 @@ mntgen -s mntexport /mnt/exportfs && chmod 666 /srv/mntexport
|
|||
bind /root /mnt/broot
|
||||
unmount /root
|
||||
|
||||
bind -q '#σ' /shr
|
||||
bind -q '#d' /fd
|
||||
bind -q '#p' /proc
|
||||
for(i in ¶ P S f æ t b m)
|
||||
|
|
|
@ -1,22 +0,0 @@
|
|||
#include <u.h>
|
||||
#include <libc.h>
|
||||
|
||||
static Lock fmtl;
|
||||
|
||||
void
|
||||
_fmtlock(void)
|
||||
{
|
||||
lock(&fmtl);
|
||||
}
|
||||
|
||||
void
|
||||
_fmtunlock(void)
|
||||
{
|
||||
unlock(&fmtl);
|
||||
}
|
||||
|
||||
int
|
||||
_efgfmt(Fmt*)
|
||||
{
|
||||
return -1;
|
||||
}
|
Loading…
Reference in a new issue