GRUBを使ったマルチブートでDOSが起動しないなど・・・
大胆にもPC-DOS7.0(DOS/V),Win98SE,WinXP Pro,Red Hat Linux7.3の4つのOSを
LinuxのGRUBを使いマルチブートにトライしました。
結果は、GRUBから直接起動出来るのはLinuxだけ、XPと98はXPの
マルチブート画面?を呼び出すことで起動出来る。DOSはエラーが出て起動出来ません。
GRUBの設定は http://www.a-yu.com/pub/grub.html#intro を参考に
したのですが、あまり理解しないでGRUB の設定ファイルはを編集している為だと
思います。せめてDOSの起動をさせたいのですが方法を教えて下さい。
各OSのインストール状況
Disk0 0:Win98 1:WinXP 2以降にLinuxの/他を割り当て
Disk1 0:PC-DOS(FAT16アクティブ) 1:Linux/boot 2:Linux /Swap
Disk2 0:NTFS 1:FAT32 2,3:NTFS
OSのインストール順 Win98,WinXP,PC-DOS(単独),Linux
NTのブートローダーとGRUBはDisk0(hd0,0)にインストールしたはず?
GRUB の設定ファイルの内容
#コメントは省略します
default=1
timeout=3
splashimage=(hd0,2)/boot/grub/splash.xpm.gz
title Red Hat Linux (2.4.18-3)
root (hd0,0)
kernel /boot/vmlinuz-2.4.18-3 ro root=/dev/hda6
initrd /boot/initrd-2.4.18-3.img ---> (7)
title Windows XP---->NT Boot Loaderがないでエラーになる。
rootnoverify (hd0,1)
chainloader +1
title Windows 98 SE---->XPと98の選択画面が表示され両者とも起動可
root (hd0,0)
makeactive
chainloader +1
title PC-DOS7.0---->Non-System disk or disk error が出て起動失敗
root (hd1,0)
makeactive
chainloader +1
但し、Disk0(マスター)外し1をマスターで起動すると問題無くDOSが
起動します。(これは基本的にな問題でCでないから起動しないのですか?)
補足
start_kernel()からkernel_init()で、/initが存在しないと、 prepare_namespace()からinitrd_load()でinitrd.imageをロード展開して、/rootにマウント後/に再マウントしているようです。(LILOのサポートのため?) 私の環境はカーネルの3で、initrmイメージには/initがあって、トレースしてみるとどうもprepare_namespace()をコールしていないようでして・・・。