前章では、とりあえず何もカスタマイズせずに、ブータブルCDを作ってみた。(正確に言うと、ISOイメージを作成して仮想PCで確認したところまでだが、ここまでやってあれば完成させたのと同じようなものだ。)
この作成過程で、loader.bin というファイルを、ブートイメージとして指定した。(【CDRecord フロントエンド】第4画面) loader.bin というのは【CD Shell】のブートローダーなのだが、このファイルがいったいどのような形で、完成したブータブルCDに組み込まれているのだろうか?
第2章のEl Torito の項で行った方法で分析してみよう。ISOファイル(今回の例ではcds.iso)をCD-Rに焼いて【かんべ】のセクタビューアで見ても良いし、【Daemon Tool】のような仮想CDにマウントして【かんべ】のセクタビューアで確認しても良いのだが、手間を惜しんで、今回は単純にバイナリエディタでcds.isoを開いて見てみよう。
ISO9660では1セクタ2048バイトすなわち16進数で800hバイトであることは前に述べた。セクタ番号は0から始まるので、第0セクタはアドレス0h番地から、第1セクタはアドレス800h番地から、第2セクタは1600h番地から始まる。800hの倍数で計算しやすい。Boot Record Volume Descriptor は第11hセクタだから、800h*11h=8800h番地から始まることになる。
アドレス8847h番地からのDWord値を読むと、50 00 00 00 になっている。(もしかすると、あなたの場合は違う数値になっているかもしれない) そこで、800h*50h=28000h なので、アドレス28000h番地を見てみる。(16進数の計算は、Windowsの電卓を関数電卓表示にして行うと簡単である。) ここがBoot catalog だ。アドレス28028h番地からのDWord値は61 00 00 00 なので、ブートセクタは、800h*61h=30800h すなわち30800h番地 から始まるセクタに存在することになる。
30800hから並んでいるバイナリデータと、loader.bin を直接開いた時のバイナリデータを比べて欲しい。全く同じものであることがわかるはずだ。
すなわち、mkisofs でブートイメージとして指定したファイルは、そのままブートセクタの位置に組み込まれるということがわかった。mkisofs でブートイメージとして指定するのはファイルだが、実際にブートの際に機能させるためには、ブートセクタという形式でなければダメだからだ。(第2章参照)
loader.bin のバイナリを逆アセンブルしてみても、プログラマでない私たちには、よく意味が分からない。ましてや自分でブートローダーを作るなんて事は、大多数の人にとって絶対無理な話である。
そこで、WEBサイトなどから、既製のブートローダーを入手してくることになる。前の章の喩えで言えば、市販のカレールウを調達することに相当する。
現在(2005年7月)、WEBから入手できる代表的なマルチブータブルCD用ブートローダーは、以下のようなものがある。
EasyBoot以外は無料で配布されている。この中でお薦めなのが、【Bootble CD Wizard】だ。その理由を今の段階で詳しく説明すると返って混乱させるので控えるが、一言で言うと、『使いやすくて高性能』だからだ。ただしそれは、【Bootble CD Wizard】V2.0a1のことで、本家サイトで公開されているV1.50Zのことではない。
【Bootble CD Wizard】V2.0a1は、(ややこしいことに)【CD Shell】の公式サイトで配布されている。
それでは【Bootble CD Wizard】V2.0a1 を入手しよう。これは、【CD Shell】の公式サイトのDownload ページのUser contribuions のコーナーに行けばダウンロードしてこれる。
ローカルに保存したbcdw-2.0a1.zip を解凍すると、その中にbcdw という名前のサブフォルダがある。そのフォルダだけコピーして、空のフォルダを新規作成して(名前は何でも良い。とりあえずxとしておく)、その中に貼り付けよう。その後、bcdw2dosというフォルダは不要なので削除する。要するに、以下のような構成を作り上げる。
x └ bcdw └( 3 個のファイル ) bcdw.bin,bcdw.ini,loader.bin
今後の章では、この構成を基準にして、いろいろなバリエーションの実例を示すことになる。
前章の構成に比べてはるかにシンプルだ。xというフォルダ名については何でも良いと書いたが、bcdw というフォルダ名および3つのファイル名は決して変更してはならない。
【CDRecord フロントエンド】を使って、この構成をISOファイルに変換してみよう。第4画面で、『構築元ディレクトリ』はxを指定し、『El Torito準拠ブートイメージ』はbcdwフォルダ内のloader.bin を指定する。出来上がったら、仮想CDで起動してみよう。下のような画面になれば成功だ。
マウスは使えないが、キーボードの上下キーで項目を選べるようになっている。これは雛形で、まだ必要なファイルが含まれていないので、Boot from drive C: とPower Off 以外は正しく機能しない。
ところで、起動画面に表示されるメニュー項目は、bcdw.ini に保存されている。bcdw.ini をテキストエディタで開くと以下のようになっている。
[InitOptions] …途中略… [MenuItems] C:\ ; Boot from drive C: \WNPE\setupldr.bin ; Bart's Preinstalled Environment \BCDW\bcdw2dos.ima \VC\vc.com ; Volkov Commander \I386\setupldr.bin ; Microsoft Windows XP Setup \BCDW\bcdw2dos.ima \WIN9X\setup.exe ; Microsoft Windows 98 Setup /linux/isolinux.bin /linux/kernel ramdisk_size=16384 initrd=/linux/rescue.gz root=/dev/ram0 rw ; Linux \ACRONIS\tis.iso ; Acronis TrueImage Server :PowerOff ; Power Off : …以下略…
このファイルの書き方の説明は、この後の章で何回も出てくる。今回は[MenuItems]という段落の行の中で、途中のセミコロンの後に記載された文字列(赤字の部分)が、実際に画面に表示されていることだけを確認しておこう。ただし、日本語のような2バイト文字を使うと文字化けしてしまうので使ってはならない。
なお行の先頭にあるセミコロンは、その行をコメントアウトするという意味で、意味が異なる。
次の章からは、いよいよ、自分好みのプログラムを呼び出せるように、マルチブータブルCDをカスタマイズしていく実践講座だ。