Last modified: 2003-04-10 00:22 (JST)
GRUB version 0.5 for PC-9800
Erich Boleyn (erich@uruk.org) 氏 によって作られた
GRUB (GRand Unified Bootloader)
version 0.5 を NEC 製 PC-9800 シリーズ (およびその互換機)
用に移植したものです。 version 0.4 と同様に、
京大マイコンクラブが中心となって移植している
Linux/98をブートすることを最大の目的として
移植を進めてきました。
バグを発見された場合は 移植者
までご連絡くださるようお願いします。
- 1472KB (+α) までの大きさの
bzImage
を起動できるようになりました。ただし、副作用として
448KB より小さい bzImage
はロードできなくなっていますのでご注意ください
(zImage
では問題ありません)。
- GNU assembler の一部のバージョン (2.13.90.0.10など)
で起こるアセンブルエラーを修正しました。
- SCSI BIOS のパラメータ領域を壊すバグを修正しました。
- パーティションテーブルの簡易編集機能を実装しました。
コンパイル時のオプションで組み込むことができます。
- 複数台のハードディスクが接続されているとき、
パーティションの一覧が正しく表示されないバグを修正しました。
- ext2 ファイルシステムのシンボリックリンクに対応しました。
- 起動時に表示されるバージョン番号に「98」を入れました
(なお表示は 0.5.98.1 のようになっていますが
GNU GRUB
の 0.5.9x とはあまり関係はありません)。
ご注意
このバージョン、およびそれ以前の v0.5 系の GRUB/98 に
SCSI BIOS のパラメータ領域を破壊する深刻なバグが発見されています。
- SCSI ディスクに対して GRUB/98 の install
コマンドを使用して GRUB/98 を MBR にインストールしようとすると
そのディスクのパーティションテーブルが壊れます。
- MBR ではなく各パーティションのブートセクタにインストールする場合でも、
stage2
ファイルが壊れて GRUB/98 をブートできなくなります。
- 以上の問題は、 IDE ディスクにインストールする場合や
Plamo/98 2.x などに含まれている
grubinst コマンドでインストールする場合は発生しません。
- 複数台の IDE ハードディスクと SCSI 機器を同時に接続したマシンで、
GRUB/98 から 2台目以降の IDE ハードディスクをアクセスした場合、
再起動しない限りそれ以降の BIOS を通した SCSI デバイスへのアクセス
(DOS など) が誤動作する恐れがあります (BIOS を使わない
Linux/98 などは問題ありません)。
これらの問題に対処する方法は GRUB/98 を
2002/07/06 版以降にアップデートする以外にありません。特に
SCSI ディスクをお使いの方はアップデートをお願いします。
- ext2 ファイルシステムの filetype オプションに対応しました。
- GCC 2.95.2 でのコンパイルに対応しました。
- コマンドラインモード時に
TAB で表示されるヘルプがおかしくなるバグを修正しました。
- 全角文字が画面右端にかかったときに行がずれるバグを修正しました。
- FAT32 に対応しました。 (EXPERIMENTAL)
- SCSI デバイス (128/230/540/640MB MO・CD-ROM も含む)
が動作するようになりました (ただし、古い SCSI ボードには
対応できないものもあります)。
- install コマンドが動作します。
- ISO-9660 (+ RockRidge file name extension) をサポートしました。
(EXPERIMENTAL)
- IDEハードディスクから (grub 本体を) ブートできるようになりました。
- FAT の論理セクタサイズと物理セクタサイズが異なる場合に対応しました。
- バージョン 0.5 系最初の公開バージョンです。
- フロッピーからの起動しか確認していません。
- フロッピーの挿抜、フォーマット (1440/1232/1200/720KB) を自動検出します。
- Linux カーネルをロード・起動できます。
- chainloader 機能が動作します。
- Ext2、FFS に対応しています。
FAT は一部読めないディスク・パーティションがあります。
- メッセージを日本語化しています。
- SCSIデバイスが動作しません。
バージョン 0.4 をベースにした GRUB/98 についてはこちらを参照ください
(ただし、現在作者は v0.4 系のメンテナンスは行っていませんのでご了承ください)。
現在、最新バージョンの GRUB/98 は (分かっているだけで)
次のようなバグがあります。
- FreeBSD(98)、NetBSD/pc98 のカーネルを起動できません
(chainloader 機能を使って起動することはできます)。
- 認識できない SCSI カードがあるようです。
- 2001/11/12 版以前のバージョンには、 SCSI BIOS
のパラメータ領域の取り扱いにバグがあり、
SCSI ディスクへの書き込み等が誤動作します。このバグは
2002/07/06 版で修正されています。
次の症状は、バグではなくて仕様です。
- 16MB以上メモリを塔載可能な機種で、
16MBシステム空間を「使用する」に設定している場合、
実際には16MB以上メモリを塔載していても
GRUB/98 のメニュー画面などの上部には「14336K upper memory」
と表示されます。これは、 GRUB がもともと 0x00100000 (1MB) から始まる
連続した メモリ空間の大きさを
upper memory の大きさとしているためで、
16MBシステム空間を使用する設定にしていると 0x00F00000 (15MB) で
いったんメモリ空間が切れるので 14MB しかないと計算しているからです。
- GRUB 0.4、0.5 はシンボリックリンクには対応していません
(オリジナルからの仕様です)。
- なお 2001/11/12 版で、
GNU GRUB
からのバックポートによって
ext2 ファイルシステム上のシンボリックリンクに対応しました。
- Linux のカーネルイメージ (カーネルのコンパイル時に最終的に生成される
zImage
または bzImage
) がおよそ
1MB を超えていると正常に起動できません。これは GRUB/98
が読み込むサイズを決めるときに使用する
Linux カーネルイメージ内のフィールドがオーバーフローしているためです。
重要でないドライバはモジュールにするなどして、カーネルイメージをおよそ
1030KB 以下に抑えてください。
- 2002/04/09 版では
bzImage
の場合にオーバーフローを補正して扱っていますので
1472KBまでの大きさのカーネルイメージをロードすることができます。
次の症状はもともとバグではありませんでしたが、
周辺の変化によって問題となったものです。
- バージョン 2.2 以降の Linux カーネルで
ext2 ファイルシステムを作成したとき、 2000/09/23 版より前の
GRUB/98 ではファイル名の後ろに `EX' や `SH'
(これらは2文字まとめて1文字分のスペースに表示されます)
など変な文字が表示されてファイルにアクセスできなくなることがあります。
このようなときは、 GRUB/98 を 2000/09/23 版以降に更新するか、
GRUB からアクセスしたいファイルシステムの filetype
オプションを使わないようにして (参照:
tune2fs
(8)、
mke2fs
(8)、
e2fsck
(8)) ください。
上のアーカイブファイルには、コンパイル済みバイナリが収録されています。
これらのバイナリを次のルールに従って直接フロッピーに書き込むことによって、
GRUB/98 のブートディスクを作成することができます:
- bin/stage1 をフロッピーのセクタ 0 (先頭セクタ) に書き込む。
- bin/stage2 または bin/stage2_debug を
セクタ 1 から連続させて書き込む。
次に、このためのコマンド例を挙げます。これらの例はどちらも 98 上で行うものと
し、また既にアーカイブを展開してあり、かつそのときに作成されるディレクトリ
(grub-0.5/) に移動してあるものとしています。
Linux/98 上から作る
まず、フォーマットされたフロッピーディスクを1枚用意してください。
フォーマット形式は 1MB (98固有の 1232KB)、2HC (1200KB)、720KB の
いずれも使用できます。また MATE シリーズ以降の 98 をご使用の場合は 1440KB も
使えます。このフロッピーをドライブにセットし、次のコマンドを実行してください。
% dd if=bin/stage1 of=/dev/fd0
% dd if=bin/stage2 of=/dev/fd0 seek=1
1MB (98固有の 1232KB) を使用する場合は、 (β-017 現在) /dev/fd0
を /dev/fd0d360 に変更し、各コマンドラインの最後に
bs=1k を付けてください。
FreeBSD(98) や NetBSD/pc98 でも同様に dd(1) コマンドを使用して
ブートディスクを作成できますがここでは省略します。
MS-DOS 上から作る
MS-DOS 上や Windows の「DOSプロンプト」ウィンドウから作成する場合は、
Linux/98 配布パッケージに含まれる DD98.EXE が必要です。
ブランクの 2HD フロッピーディスク (フォーマットしていなくても構いません)
をドライブにセットし、次のコマンドを実行してください。
...\grub-0.5\> copy/b bin/stage1+bin/stage2 tempfile
...\grub-0.5\> directory\dd98 tempfile 0 1 1200 1
directory\ は DD98.EXE のあるディレクトリに置き換えて
ください。また tempfile は作業後は不要ですので削除してください。
GRUB/98 を再コンパイルするには、バージョン 2.9.1 以降の
GNU assembler が必要です。
98 用にコンパイルするには configure に
`--enable-pc9800' を追加してください。
これを指定しないと IBM PC で動作する GRUB
(オリジナルと完全に同じではありませんが) ができるように考えていますが、
コンパイル、動作とも未確認です。
Linux/98 のページ