boot.c
main()
Locore.c の中から main() が呼出されるが、それは
boot.c に書いてある。
これが起動してしまえば、
OF から渡された引数を NetBSD 的に変換して、root partition とし、
boot-file
その中の
boot-file (に相当する)ものを探す。
boot-file は 引数で指定されたものか、指定がなければ、
static char *kernels[] = { "/netbsd", "/netbsd.gz", "/netbsd.macppc", NULL };
の順に探す。
それを、次のようにして読む。
if (loadfile(kernels[i], marks, LOAD_KERNEL) >= 0)
上の行で
0x100000 とか 0x800000 などに読んで、
sys/arch/macppc/stand/ofwboot/boot.c
に以下のように書いてあるとおり
chain を呼出す
296 entry = marks[MARK_ENTRY];
297 ssym = (void *)marks[MARK_SYM];
298 esym = (void *)marks[MARK_END];
299
300 printf(" start=0x%x\n", entry);
301 __syncicache((void *)entry, (u_int)ssym - (u_int)entry);
302 chain((void *)entry, bootline, ssym, esym);
303
304 OF_exit();
305 }
この boot.c の中に出て来る MARK_SYM MARK_END などは、 sys/lib/libsa/loadfile.h に書いてある。
42 #define MARK_START 0
43 #define MARK_ENTRY 1
44 #define MARK_NSYM 2
45 #define MARK_SYM 3
46 #define MARK_END 4
47 #define MARK_MAX 5
loadfile は
sys/lib/libsa/loadfile.c
に書いてある
|