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 コールを確認予定。