Personal tools
You are here: Home ブログ 学習経過 ブートローダー(その2)
« December 2010 »
Su Mo Tu We Th Fr Sa
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
Recent entries
sysfs tips 02 ohyama 2010-09-09
sysfs tips ohyama 2010-09-02
Haskell で周波数スペクトルを得る ohyama 2010-07-29
Haskell で線形識別関数の学習を行う ohyama 2010-07-19
Haskell で逆行列を求める ohyama 2010-07-16
Recent comments
Re:vim に lisp 機能をつける t.mimori 2010-12-16
Re:Haskell で周波数スペクトルを得る H.OHYAMA 2010-08-01
Re:lkml でお勉強 (その1-1) Hiroyasu OHYAMA 2009-08-21
Re:lkml でお勉強 (その1-1) kosaki 2009-08-20
Re:vim に lisp 機能をつける ohyama 2008-05-08
Categories
学習経過
GNU/Linux
 
Document Actions

ブートローダー(その2)

今回は、ブートセクタに書かれたプログラムを実行し、ブートセクタの次のセクタに保存されているデータ(プログラム)を読み込み、処理を読み込んだ先に移すところまでを見てゆく(一週間時間を開けたわりには、異常に進みが遅い)。

<a href="http://dev.ariel-networks.com/Members/ohyama/stuff/first2second.tgz/download">ソースはこちら</a>

主なプログラムは以下の2つ。
boot.S    : ブートセクタの処理
second.S    : ブートセクタの次のセクタ領域の処理

では、中身について簡単に解説する。
ブートに成功すると、boot.S の .text セッションは、0x07C00 に読み込まれる。
boot.S は、0x07C0 をベースセグメントとする start に処理を移す。そして、フロッピーの初期化を行う為、init_fd において、BIOSコール(00 interurupt 0x13)を呼び出す。
そして、次のセクタに保存されている。データを呼び出す為、load_second で 02 interrupt 0x13 を呼び出し、1セクタ分だけ 0x90000 に読み込み、0x9000 をセグメントへ処理を移す。

さて、以前のプログラムでは、-fomit-frame-point オプションを指定し、gdb のコードスタック領域を削ったり、EBX レジスタのリザーブを省略したり、-fno-ident オプション、-finhibit-size-directivce オプションを指定し、ident ディレクティブ や .size ディレクティブを省略するなど、乾いた雑巾を搾る事を行っていたが、ここでは、最適化オプション -O2 を指定している以外、何もしていない。
それでも、boot バイナリを覗いてみると、ブートセクタの半分もまだ使っていない。512バイトあれば、(bios の助けを借りて)結構いろいろな事が出来るようだ。
しかし、ここでの仕事はこれで十分である。

0x9000 に読み込まれた second.S は、15 interrupt 0x10 のBIOSコールを呼び出し、ディスプレイに文字を出力し、読み込みが成功した事を表示する。表示が終わると、無限ループに入る。
ここで、ブートセクタの箱庭から 64K の広い(?)世界が広がる。次回以降、この領域を使って話しを進める。

Category(s)
学習経過
The URL to Trackback this entry is:
http://dev.ariel-networks.com/Members/ohyama/30fc30c830ed30fc30fc-305d306e2/tbping
Add comment

You can add a comment by filling out the form below. Plain text formatting.

(Required)
(Required)
(Required)
(Required)
(Required)
This helps us prevent automated spamming.
Captcha Image


Copyright(C) 2001 - 2006 Ariel Networks, Inc. All rights reserved.