machdep関数

machdep処理概要

machdepでの処理は大きく分けて GateA20のOpenと周辺ハードウェアの検出を行ないます。

ハードウェア検出時に得られたハードウェア情報は、bootarg_t 構造体に格納されます。bootarg_tは、下記のようなリスト構造になっています。

bootarg_tのList構造
bootarg_tのList構造

ba_argに加えられる情報はいくつか有り、H/Wにより異なります

apm情報

INT15H(155300)INT15H(155303)によって得られた情報は bios_apminfo_tの変数に格納されます。この情報が格納されたba_typeの値は、BOOTARG_APMINFOになります。

PCI情報

INT1AH(1AB101)によって得られた情報がbios_pciinfo_tの変数に格納されます。この情報が格納されたba_typeの値は、BOOTARG_CONSDEVになります。

disk情報

diskのチェックサムレングスがbios_cksumlenに格納されます。この情報が格納されたba_typeの値は、BOOTARG_CKSUMLENになります


INT13H(1308)によって得られた情報が検出されたデバイス分だけbios_diskinfo_tの配列に格納されます。この情報が格納されたbootarg_t.ba_typeの値は、BOOTARG_DISKINFOになります。

また、ba_argに加えられ無い情報も幾つか有ります。

console情報
コンソール情報がconsdev構造体の配列constabに格納されます。
メモリー情報
メモリー情報がbios_memmap_tの配列bios_memmapに格納されます。

これらの情報はbootarg_tには追加せずに、後程、run_loadfile関数でbootarg_tのリストに追加されます。

machdep

Probe処理

machdepでは、H/W等のProbing処理を行ないます。それぞれのProbing処理はH/W単位で別れており、これらの定義はboot/conf.cにあるprobe_listテーブルに定義されています。

probe_listには、i386_probe1i386_probe2の関数テーブルのポインタが書かれていて、これらに定義している関数を順次呼び出して処理を行う。

HDDからbootされた場合、上記のProbe関数が定義されている。しかしboot先がcdromなど、メディアが異なるとProbe関数の定義も変わってくる。例えばcdromからbootされた場合、cdboot/conf.cにある定義が使われる。(cdprobe関数が追加されている。)

HDDからのbootではProbe処理が次の順に呼ばれます。

  1. ps2probe関数
  2. gateA20on関数
  3. debug_init関数
  4. cninit関数
  5. apmprobe関数
  6. pciprobe関数
  7. memprobe関数
  8. diskprobe関数
Last modified: Tue Jan 08 13:09:15 2008 JST