11
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【30日でできる!OS自作入門】【1日目】ブータブルCDのブートセクタを見つける

Last updated at Posted at 2015-02-07

##はじめに

30日でできる! OS自作入門』を読み始めています(1日目)。一応本の通りに手を動かせば実行は出来るわけですが、コピペで進もうと思えば進めてしまうので、気になったところで関連したことを(自分への宿題として)調べていこうと思ったメモです。

##1日目の内容
フロッピーディスクのディスクイメージ(ブートセクタ)をバイナリエディタとアセンブラで作成して最低限起動するプログラムを起動させてみよう、という内容です(具体的な内容はここでは記述しません)。
試しに出来上がったイメージファイルをバイナリエディタで開いてみます。フロッピーディスクイメージは最初の1セクタ(512Byte)がブートセクタとのことなので、以下の図の赤枠部分がブートセクタになります。

ScreenClip.png

##ブータブルCDのブートセクタはどのように見つけられるのか
フロッピーディスクイメージの起動は先頭のセクタがブートセクタとして読み込まれるらしいですが、例えば、Linuxのインストール等でよく利用するブータブルCDはどのように起動されるのか調べてみました。

###ブータブルCDの規格
ブータブルCDの規格とブートセクタの位置を調べてみると、どうやらブータブルCDのブートセクタはフロッピーディスクのように先頭セクタではないようです。「Boot catalog」という場所にブートセクタの情報が記述されており、「Boot catalog」の場所は「Boot Record Volume Descriptor」という場所に記載されているようです。「Boot Record Volume Descriptor」は場所が固定されているようです。

ブータブルCD/DVDには標準規格が決まっている。El Torito規格というものである。[…]
El Toritoでは、Boot Record Volume Descriptor という場所が決められている。(Joliet拡張を使うと多少複雑になるが)ここがスタート地点だ。これは必ず16進数で第11hセクタ、すなわち10進数で第17セクタに存在する。
第2章 ブートセクタ http://uiuicy.cs.land.to/bootcd/bootcd2.html

BRVD : Boot Record Volume Descriptor Edit
先頭から17(0x11)セクタ目(0x800*0x11 = 0x8800)にBRVDという場所がある。
これは、必ず固定の場所(0x8800~0x9000)にある。
BRVDの0x8847-0x884aのBoot catalogのセクタで指定したセクタがBoot catalogとなる。
El Torito - OS Project Wiki http://www.wiki.os-project.jp/?El%20Torito

###実際のイメージファイルで確認してみる
何となく仕組みがイメージ出来てきたので、実際のイメージファイルでブートセクタを探してみます。今回はUbuntu Server 14.04のイメージファイルを使いました。

####「Boot Record Volume Descriptor」を見てみる
BIOSはまず「Boot Record Volume Descriptor」を確認するようなので、「Boot Record Volume Descriptor」を探してみます。
先頭から17セクタ目(0x8800-0x9000)にあるようなので、この部分をバイナリエディタで見てみます。
下図の赤枠が「Boot Record Volume Descriptor」に該当します。フロッピーディスクと違い、2048Byte/セクタとなります。
この中のどこに「Boot Catalog」へのポインタがあるかというと、「0x8847-0x884a」部分(カーソル選択部分)なので、0x00000781セクタ目ということが分かります(リトルエンディアンになっています)。
次にそこの該当箇所を見てみます。計算すると、0x3C0800Byte目になるので、そこに移動します。

ScreenClip.png

下図が見つけたブートカタログになります。何箇所か注目してみます。この中の黄色枠(0x020)が「ブートインディケータ」となっており、ここが0x88だと「ブータブル」だと判定されるようです。
またオレンジ色枠(0x028-0x02b)がブートセクタの開始位置を表すようです。ここでは「0x000002FE」となります。

ScreenClip.png

ブートカタログの見方
ScreenClip.png
出展: El Torito - OS Project Wiki http://www.wiki.os-project.jp/?El%20Torito

「0x000002FE」セクタ目は0x107F000Byteなので、そこを確認すると、以下の場所になります。ここがブートセクタとして読み込まれて、ブートローダが実行されるのでしょう。以上。

ScreenClip.png

##参考
FDの構造とFAT12 物理構造と論理構造 トラック セクタ クラスタ ディレクトリ http://park12.wakwak.com/~eslab/pcmemo/fdfat/index.html

El Torito - OS Project Wiki http://www.wiki.os-project.jp/?El%20Torito

第2章 ブートセクタ http://uiuicy.cs.land.to/bootcd/bootcd2.html

続き: RedhatLinux7.3のブートセクタを見てみる http://www.tomo.ac/goodstream/linux/burn/anarhl73.html

30日でできる! OS自作入門
マイナビ (2006-03-01)
売り上げランキング: 23,428
11
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?