diff -Nru /sys/src/9k/boot/boot.c /sys/src/9k/boot/boot.c --- /sys/src/9k/boot/boot.c Thu Nov 12 00:00:00 2015 +++ /sys/src/9k/boot/boot.c Thu Nov 12 00:00:00 2015 @@ -20,6 +20,23 @@ static void usbinit(void); static void kbmap(void); +/* + * read disk partition tables here so that readnvram via factotum + * can see them. ideally we would have this information in + * environment variables before attaching #S, which would then + * parse them and create partitions. + */ +static void +partinit(void) +{ + char *rdparts; + + rdparts = getenv("readparts"); + if(rdparts) + readparts(); + free(rdparts); +} + void boot(int argc, char *argv[]) { @@ -86,6 +103,14 @@ * load keymap if it is there. */ kbmap(); + + /* don't trigger aoe until the network has been configured */ + dprint("bind #æ..."); + bind("#æ", "/dev", MAFTER); /* nvram could be here */ + dprint("bind #S..."); + bind("#S", "/dev", MAFTER); /* nvram could be here */ + dprint("partinit..."); + partinit(); /* * authentication agent diff -Nru /sys/src/9k/boot/boot.h /sys/src/9k/boot/boot.h --- /sys/src/9k/boot/boot.h Thu Nov 12 00:00:00 2015 +++ /sys/src/9k/boot/boot.h Thu Nov 12 00:00:00 2015 @@ -12,6 +12,8 @@ Nbarg= 16, }; +#define dprint(...) if(1) fprint(2, __VA_ARGS__); + extern void authentication(int); extern char* bootdisk; extern char* rootdir; @@ -37,6 +39,7 @@ extern int outin(char*, char*, int); extern int plumb(char*, char*, int*, char*); extern int readfile(char*, char*, int); +extern int readparts(void); extern long readn(int, void*, long); extern void run(char *file, ...); extern int sendmsg(int, char*); diff -Nru /sys/src/9k/mk/bootmkfile /sys/src/9k/mk/bootmkfile --- /sys/src/9k/mk/bootmkfile Thu Nov 12 00:00:00 2015 +++ /sys/src/9k/mk/bootmkfile Thu Nov 12 00:00:00 2015 @@ -12,6 +12,7 @@ embed.$O\ settime.$O\ sac.$O\ + parts.$O\ paq.$O\ printstub.$O\