run_loadfile関数

run_loadfile関数(arch/i386/stand/libsa/exec_i386.c)

この関数からKernelが呼び出されて、Kernel側に処理が移行します。

パラメータのセット

下記のパラメータをセットします。

dev_t bootdev = bootdev_dip->bootdev; /* ブートしたデバイスIDをセット */
size_t ac = BOOTARG_LEN;              /* BIOS情報格納エリアのサイズ */
caddr_t av = (caddr_t)BOOTARG_OFF;    /* BIOS情報格納エリアのアドレス */

sa_cleanup関数をcall

この関数はpxeboot (Preboot Execution Environment)時に呼ばれるようです。今回は関係無いので華麗にスルー。

pxeとは

PXE(Preboot eXecution Environment)は、Intelの作成した、ネットワークブートの為の規格であり、サーバおよびクライアントが従うべきプロトコルなどが規定されている。PXE準拠のNIC(Network Interface Card)は、これに準拠したソフトウエアを、そのROM上にもっており、PXEサーバが用意されたネットワーク環境において、ネットワークブートが可能となる。サーバとして、PXEサーバ(ProxyDHCP、(M)TFTPサーバ)と、DHCP(またはBOOTPサーバ)を動作させる必要がある。

bootargに情報を追加

コンソールデバイス情報を追加

machdep関数で検出したコンソールデバイス情報をbootargに追加します。

メモリ情報を追加

mem_pass関数をcall。mem_pass関数ではmachdep関数で検出したメモリ情報をbootargに追加します。

bootargの構造
bootargの構造

bootargに情報をkernelに追加

makebootargs関数をcallして、bootargのデータを連続したメモリ領域にコピーします。

kernel上のbootarg情報
kernel上のbootarg情報

Kernelをcall

kernelのアドレスをセット

marks[MARK_ENTRY]にセットされている、リニアメモリ上のKernel開始アドレスを変数entryにセットします。

kernelの開始アドレスを画面に表示

kernelのentry pointを表示します。

Using drive 0 , partition 4 .
Loading........
probing:pc0 com1 com2 apm pci mem[639K 253M a20=on]
disk:fd0 hd0+
>>OpenBSD/i386 BOOT 2.06
boot>
booting /dev/rhd0a:/bsd: 4918204+859636 [52+230528+209187]
entry point at 0x100120
	  
kernelをcall

Kernelで最初に動くlocoreに処理が移行します。

Last modified: Fri Jan 11 13:43:26 2008 JST