x86
うにまがで連載されていた_Linux のブートプロセスをみる_でも x86 対象でハードウェアに関するポイントは以下、との記述がある。
- CPU の動作モード
- セグメント
- ページング
- 保護機能
- 割込みと例外
- 外部入出力 (I/O)
- PC のメモリマップ
- A20
- BIOS
x86 のこれ系のドキュメントはそれなりに充実していると思うんですが、例えば arm ではどうなってるのか、的ソレを穿りマワす必要があるのかな、と感じております。
ちなみに
うにまがの連載では 2.4.17 なカーネルが対象になってて、2002.8 の第 4 回の連載から bootsect に関する説明な記述もありますが、2.6 系ではこの処理は略されているとの事。
ブートローダの処理、というのも面白そうではありますし、カーネルのソースに記述されていたソレはある程度簡易な記述になっていたとの事なのでその内確認してみたい。
ちなみに手元にある 2.6.32.9 の記述は以下な模様。
bootsect_start: # Normalize the start address ljmp $BOOTSEG, $start2 start2: movw %cs, %ax movw %ax, %ds movw %ax, %es movw %ax, %ss xorw %sp, %sp sti cld movw $bugger_off_msg, %si msg_loop: lodsb andb %al, %al jz bs_die movb $0xe, %ah movw $7, %bx int $0x10 jmp msg_loop bs_die: # Allow the user to press a key, then reboot xorw %ax, %ax int $0x16 int $0x19
別途下記のソースから 0x16 とか 0x19 な BIOS コールを確認予定。