第7章 組み込みたいプログラムのブート方式を分析する

【Berry Linux】を組み込む

前章では、イメージファイルをそのまま指定して、マルチブートさせる例を紹介した。すべてのプログラムで、そのように出来れば簡単なのだが、残念ながらそうではない。

この章では、【Berry Linux】を題材にして、マルチブート化の方法を考えて行きたい。

【Berry Linux】は、berry-***.iso (***はバージョン番号で実際は数字)という550MBほどのサイズのイメージファイル形式で配布されている。配布されているISOファイルをそのままCD-R(W)に焼けば、1CDブートのLinuxとしてとして使えるようになっている。これをマルチブートCDに取り込もうとして、前章と同様の方法でISOファイルのままで下のように指定すると、一見順調に進むが、途中でエラーが出て止まってしまうと思う。

;---うまくいかない例---
[MenuItems]
C:\               ; Boot from drive C:
\berry-***.iso    ; Berry Linux
:PowerOff         ; Power Off

そこで成功する方法を探るために、【Berry Linux】が通常のシングルブートの場合、どのようにブートしているのかを調べてみよう。

【Super ウルトラ ISO】で、berry-***.iso を開いてみると、このイメージの中に、BERRYという名のサブフォルダがあり、その中にboot.img という、そのものずばりの名前の2880KBフロッピーサイズのイメージファイルが存在することが確認できる。これが、ブートローダーのようだ。

ブートローダー確認

もっと理論的に確認したければ、第5章でやったように、El Torito 方式でberry-***.iso のブートセクタを探し、boot.img のバイナリと比べてみればよい。同一であることが確認できるはずだ。

次に、ISOファイルのままではダメだということから、berry-***.isoを展開し、全てのフォルダ・ファイルを基本構成のxフォルダに入れてしまおう。

このやり方としては、ISOを一旦CD-RWに焼いてExplorer などでコピーしても良いが面倒くさい。【Super ウルトラ ISO】で直接berry-***.iso から「抽出」したほうがはるかにラクだ。

【SuperウルトラISO】でberry-***.iso を開いておいて、メニューの「操作」から「抽出」を選ぶ。どこのフォルダに抽出するかのダイアログが開くのでxフォルダを指定してやり、確認ダイアログにもOKしてやれば良い。

抽出する

完成すると以下のような構成になるはずだ。(このページを書いているときのバージョンであるV0.95の場合) 見やすくするために、前章で追加した3つのファイル(hal91.img/memtest.iso/rescue-0.9.0.img)は取り除いてある。今後の章でも同様の記載方法にしてある。「なんだ、それじゃぁマルチブートにならないじゃないか」と思うかもしれないが、章ごとの内容を勘案して適切にbcdw.iniを記載すれば、もちろんマルチブートになるのでご心配なく。もう1度前章で書いたことを繰り返しておく。マルチブートCDを作るということは、本来直接つながっていたBIOS(部屋の壁面のコンセント)と、シングルブートプログラム(コンセント付電化製品)の間に、マルチブートローダー(マルチ電源タップ)を上手に介在させてやる作業が中心なのだ。単独でタップに繋いでいるのに正しく動かないのでは問題外である。個々の要素が単独ならば正常に動くことを確認してから、2つ・3つとつなぎ加えていくというやりかたを取ることが大切である。

X
├ bcdw
│ └ ( 3 個のファイル )
│    bcdw.bin,bcdw.ini,loader.bin
├ BERRY
│ └ ( 3 個のファイル )
│    BERRY,boot.cat,boot.img
├ Music
│ └ ( 10 個のファイル )
├ Setup
│ └ ( 17 個のファイル )
├ VMware
│ └ ( 2 個のファイル )
└ ( 7 個のファイル )

今回の例では、boot.img が【Berry Linux】という電化製品のコンセントプラグに当たる。このプラグを【Bootable CD Wizard】という電源タップに差し込めば(すなわちbcdw.ini に記載すれば)良いわけだ。

専門用語を使えば、【Bootable CD Wizard】のloader.bin から【Berry Linux】のboot.img へチェーンロードするという言い方になる。

【Berry Linux】単独でブータブルCDにしたときは、boot.img というファイルからブートしているのではなく、(そのファイルと同一のバイナリデータからなる)ブートセクタからブートしている。これは、BIOSがファイルシステムを扱う能力がないからであった。

loader.bin からboot.img へのチェーンロードでは、loader.binがファイルシステムを扱えるので、boot.img というファイルを呼び出す。そしてそのファイルがブートセクタと同じ役目を果たす。したがって我々がbcdw.ini をカスタマイズして記述する際には、ブートローダーのファイル名を指定してやれば良いのだ。

bcdw.ini は以下のように記述しておく。

[MenuItems]
C:\                      ; Boot from drive C:
\BERRY\boot.img          ; Berry Linux
:PowerOff                ; Power Off

それでは、完成したフォルダ・ファイル構造体を【CDRecord フロントエンド】でISOイメージに変換しよう。今回の注意点を以下に図示する。

第2画面では、「RockRidgeオプション」をRationalize RockRidge にしておく。LINUX系では、このオプションにしておかないとうまくいかないことが多い。

RockRidge の設定

あと間違える人がいるといけないので強調しておくが、「El Torito 準拠ブートイメージ」欄は、【Bootable CD Wizard】のブートローダーであるloader.bin を指定する。ここで指定するのは、壁面のコンセントに繋ぐおおもとの電源タップのコンセントプラグであって、電化製品のコンセントプラグ(boot.img)ではない。電化製品のコンセントプラグは、bcdw.ini の中で指定することをお間違えなく。

ブートイメージ指定の際の注意点

完成したISOイメージを使って、仮想PCを起動しよう。成功していれば、下の図のようになるはずだ。

Berry Linux起動画面

この章から大物のプログラムを扱うようになってきたが、基本的な姿勢として、マルチブートCDを作る前に、配布されているままのオリジナル状態で起動実験をして、正しく動くかどうか、どのような挙動を示すのか等を確認しておくことが大切だ。

オリジナルの状態で正しく動かなければ、決してマルチ化しても正しく動くことはない。その場合、プログラム本体側の問題かもしれないが、仮想PC側の制限に関するものである可能性も高い。たとえば今回の【Berry Linux】で言うと、【VirtualPC 2007】や【VMWare】では起動時の解像度オプション(1024*768など)が反映されない。これはオリジナルのberry-***.iso でも同じように起こるので、我々のほうではどうしようもない。というか、無視しても良い問題といえるだろう。

一方、RockRidge オプションについて、これをはずして作成するとエラーがでると思う。これはオリジナルのberry-***.iso では起こらない問題点なので、マルチ化する際の問題点だと判断できる。そこで試行錯誤して、「RockRidge」 をつければ大丈夫だな」と確認できるわけである。

mkisofs はオプションの種類が豊富なので、解決策を見つけるのに相当時間がかかる場合もあるし、プログラムの組み合わせ方によっては、絶対解決が不可能な場合もあるかもしれない。たとえば、-rをつけないといけないAというプログラムと、-rを絶対につけてはならないBというプログラムがあれば、それは1枚のCDにいっしょに収めることはできないことになる。

<目次> <前の章へ> <次の章へ>