Last Update: "2007/01/25 20:01:09 makoto"
NetBSD
NetBSD/macppc が起動するのは、
非常に大雑把に言えば、次の三つの段階から成っている。
- (1) Primary Boot Loader (
bootxx
= ofwboot 前)
-
次の ofwboot.* を起動させるまでの短いプログラム。
大きいものは起動部分に置けないので、まずはこれが起動する。
OF 1/2 専用。
(この項の説明 2002/09/09 に修正)
- (2) Secondary Boot Loader (ofwboot)
-
ofwboot.xcf 等
src/sys/arch/macppc/stand/ofwboot/
OF 1/2 の場合は bootxx によって
0xe00000 (14MBytes)に置かれて起動される (
rev 1.13
から変更されている。
以前には
0x600000 (6 MBytes) だった)
その値は
bootxx.c
(
1.9)
の中の最初の方に書いてある。...
54 #ifndef DEFAULT_ENTRY_POINT
55 #define DEFAULT_ENTRY_POINT 0xe00000
56 #endif
57
58 void (*entry_point)(int, int, void *) = (void *)DEFAULT_ENTRY_POINT;
....
333 entry_point(0, 0, openfirm);
OF 3 の場合は Open Firmware が直接 HFS 形式を読む(*1)ので、いきなりこの ofwboot.* を起動出来る。
OF 1/2 の場合も、Ethernet i/f を内蔵している機種では
netboot の機能を使って、
OF から直接この ofwboot.xcf 等を読むことが出来る。
(注 *1)「 HFS 形式しか読まない」とも言う。
- (3) kernel の最初の部分
-
kernel は
通常の場合 0x100000
INSTALL の場合 0x800000
に置かれて起動される。
この数字は、Makefile
(sys/arch/macppc/conf/Makefile.macppc) の
次の部分に書いてある。
##
## (5) link settings
##
TEXTADDR?= 0x100000
その時の kern/init_main.c に行く前に少し作業がある
(主として initppc())。
以上 (1)(2)(3) をもっと簡単に言うと、
起動は ofwboot と kernel である。そうして、
- ofwboot 前
- ofwboot
- kernel(
initppc
+
init_main
)
の三段階
ということも出来る。
上で 通常 0x100000 (1M) に置かれると書いたが、
OF 1/2 の場合、0x400000 (4M) から上を OF が作業領域として使っているので、
最近のように 3M を越える大きさの kernel をそのまま置くと、
kernel を読んでいる途中で、止ってしまう。
これを避けるため OF の設定で、
real-base=F00000
のようにずらしておくことが必要になる。
boot の書式等については
ofwboot(8)
にも説明がある。
(良く見ると nazuha という名前があるが、あれは僕の機械、
でも不適切な説明の気がする)
|