+++ /dev/null
-#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);
-}
#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;
+ /* setup the boot namespace */
+ bind("/boot", bin, MAFTER);
- print("argc=%d\n", argc);
- for(i = 0; i < argc; i++)
- print("%p %s ", argv[i], argv[i]);
- print("\n");
+ if(fork() == 0){
+ execl("/bin/paqfs", "-qa", "-c", "8", "-m", root, "/boot/bootfs.paq", nil);
+ goto Err;
}
- USED(argc);
+ if(await(buf, sizeof(buf)) < 0)
+ goto Err;
- readfile("#e/cputype", cputype, sizeof(cputype));
+ 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);
- /* 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);
exec("/bin/bootrc", argv);
+Err:
+ errstr(buf, sizeof buf);
+ _exits(buf);
}
-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