入口
    OF 1/2 の場合
    OF 3 の場合
      設置後すぐ
      CDROM 無で
    Mac OS の場合
    その他
  NetBSD
  Booting Media
Primary
  bootxx
Secondary
  xcf/elf
    release(7)
    /usr/mdec
ofwboot
  Locore.c
  boot.c
    main()
    boot-file
    chain()
    OF_chain()
kernel(1)
  locore.S
  machdep.c
    initppc()
kernel(2)
  init_main.c
    main()
その他
  installboot
    旧版
    新版
    実例
  DEFAULT CATCH
GENERIC_MD
  mdsetimage

NetBSD/macppc booting

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 に書いてある
Last Update: Fri, 03 May 2019 15:45:20 GMT 1.66 2008/03/08