arch/i386/stand/libsa/diskprobe.c

floppyprobe関数

フロッピーの走査ループ

フロッピーを最大4つ(device No. 0-4)走査して、ディスク情報をqueueに追加します。

ディスク情報エリアのアロケーションと初期化
ディスク情報を格納する領域を確保し、初期化します。
フロッピー情報の取得
bios_getdiskinfo関数をcallしてフロッピー情報の取得します。
取得できなかった場合は、アロケーションした領域を解放し、フロッピーの走査のループを抜けます。
検出したフロッピーデバイスを画面に表示
フロッピーが検出できた場合、画面に表示します。
reading boot ....
Probing:pc0 com1 com2 apm pci mem[639K 253M a20=on] disk:fd0
	  
フロッピー情報をqueueに追加
  1. 検出したフロッピーのdevice numberを作成してbios_info.bsd_devにセットします。
  2. bios_info.flagsにBDI_BADLABELフラグを立てます。(これはフロッピの場合、読込が遅いので、bootの直前までdisklabelの読込みを遅らせる為だと思う。)
  3. TAILQ_INSERT_TAILマクロを使いqueueの最後にに追加します。

hardprobe関数

BIOS Data Areaのアドレスをセット

BIOS Data Areaの"HDD数"が格納されている領域のアドレスをセットします。このHDD数の回数、走査を行ないます。

HDDの走査ループ

HDDを(device No. 0x80-x80+HDD数)走査して、ディスク情報をqueueに追加します。

ディスク情報エリアのアロケーションと初期化
ディスク情報を格納する領域を確保し、初期化します。
HDD情報の取得
bios_getdiskinfo関数をcallしてHDD情報の取得します。
取得できなかった場合は、アロケーションした領域を解放し、フロッピーの走査のループを抜けます。
検出したHDDを画面に表示
HDDが検出できた場合、画面に表示します。
reading boot ....
Probing:pc0 com1 com2 apm pci mem[639K 253M a20=on] disk:fd0 hd0
	  
disklabelの読込み
bios_getdisklabel関数をcallして、走査中HDDからdisklabelを読込みます。
読込んだ、disklableのd_typeに従ってパラメータをセットします。(ちなみに、IEDの場合はd_type=DTYPE_ESDI)
HDD情報をqueueに追加
  1. 検出したHDDのdevice numberを作成してbios_info.bsd_devにセットします。
  2. TAILQ_INSERT_TAILマクロを使いqueueの最後にに追加します。

diskprobe関数

diskprobe関数ではBIOSがサポートしているディスク等を走査します。

ディスク情報 queueの初期化

走査したディスク情報は、構造体disklist_lhTail queue(TAILQ)形式で格納されます。最初にTAILQ_INITマクロを使用してdisklistを初期化します。

FDDの走査

floppyprobe関数をcallしてFDDの走査を行ないます。検出したディスク情報は、queueに追加されます。

HDDの走査

hardprobe関数をcallしてHDDの走査を行ないます。検出したディスク情報は、queueに追加されます。

チェックサムの計算

disksum関数をcallしてチェックサムを計算します。

queuデータを配列に変換

boottag形式で登録するために、queuデータを配列に変換します。

boottagに追加

チェックサムレングスとディスク情報をboottagに追加します。

Last modified: Fri May 09 17:14:03 2008 JST