lermen@elserv.ffm.fgan.de
こじま みつひろ - 日本語訳
kojima@komae.denken.or.jp
1994/08/07
LOADLIN.EXE は (DOS で動く) LINUX カーネルイメージのローダーです。 (カーネルのコマンドラインを完全にサポートしています)
(C) 1994 Hans Lermen (lermen@elserv.ffm.fgan.de)
(翻訳:こじまみつひろ kojima@komae.denken.or.jp)
LOADLIN は F.Coutant 作の BOOTLIN と同じ原理に基づいていますが、よりエ ラーチェックを強化し、カーネルの持つ「コマンドライン機能」を完全にサポー トしています。レスポンスファイルを利用することも可能で、もしコマンドラ インが (DOS の制限である) 128 バイトを越えても大丈夫です(1.0.5 よりも古 いカーネルでは、80 バイト以上の文字列を渡すためにはパッチが必要です)。 UMSDOS では、LOADLINX プリプロセッサが DOS 風のドライブ名を /dev/xxxx の形に変換します。
昔からの LOADLIN ユーザーへ: LOADLIN-1.5 は、 BIOSINTV/REALBIOS なしに動きます!
ローダーのプログラムは以下の条件の元で DOS のプロンプトか CONFIG.SYS から起動できます。
プログラムがロードされるメモリ番地と 0x90000 番地の間に圧縮された カーネルイメージを置けるスペースがあること(ヘッダーとセットアップ プログラムは別にして)
A) CPU が仮想 8086 モードにないこと
か、
B) EMS ドライバが VCPI をサポートしていること
手早く始めるには QUICKSTA.RT を、 より詳しい説明は MANUAL.TXT を、 それぞれ読んでください。
LODLIN15.TGZ の中身 ------------------- README.1ST 今読んでるこれ! QUICKSTA.RT Pat Volkerding の LODIN14.TXT の引用 MANUAL.TXT マニュアル PARAMS.DOC Linux コマンドラインパラメータの説明 TEST.PAR レスポンス(パラメータ)ファイルの例 CHANGES LOADLIN の歴史 LINUX.BAT Linux を起動するための DOS のバッチファイルの例 LOADLIN.EXE ローダー LOADLIN.ASM ソースコード BIOSINTV.SYS VCPI 経由でロードするためのデバイスドライバ BIOSINTV.ASM そのソース REALBIOS.EXE 本物の BIOS 割込みベクター/データをファイルに書きだす ためのプログラム REALBIOS.C そのソース BOOTSECT.BIN 上記のデータを使うフロッピー用のブートセクター BOOTSECT.ASM そのソース LOADLINX.EXE UMSDOS をサポートしたプリプロセッサ LOADLINX.C そのソース MAKEFILE TASM, TLINK 用の MAKEFILE BOOTING.DOC いくつかの有益な情報 COPYING FSF の一般許諾契約(Gnu Public License) KERNEL/* boot/setup.S に対するパッチ |
LOADLIN v1.5 (C) 1994 Hans Lermen (lermen@elserv.ffm.fgan.de)
(翻訳:こじまみつひろ kojima@komae.denken.or.jp)
このプログラムは free software です。再配布や修正は Free Software Foundation から出されている GNU 一般許諾契約(Gnu General Public Licence)のバージョン 2 あるいは(あなたの判断で)より新しいバージョン に従います。
このプログラムは役に立つことを期待して配布していますが、一切の保証 はありません;購入の可能性や特定の目的に適合するかについての保証も ありません。より詳しくや GNU 一般許諾契約をご覧ください。
GNU 一般許諾契約のコピーはこのプログラムに付いているはずですが、も し見付からなければ Free Software Foundation(675 Mass Ave, Cambridge, MA 02139, USA.) に連絡してください。
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You may have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
LOADLIN や BOOTLIN はハードディスクから Linux(0.99.14 以上)をブートす るためのもっとも安全な方法です。多くの Linux の初心者は、詳しいけれど 長すぎる [1] LILO のドキュメントを読むのに耐えきれず、LILO を誤って動か し、、、バン !! DOS とはさようなら、、、してしまいます。
(FDISK /MBR はディスクを修復するためのスーパーマンではありません)
BOOTLIN は明確で単純、きわめて効率的です。BOOTLIN のソースコードにある 情報の多くが LOADLIN の基礎になっています。
しかし、LOADLIN ではカーネルに「コマンドライン・パラメーター」を渡すこ とが可能で、それらのパラメーターによって Linux の振舞い(ルートデバイス、 ビデオモード、ドライバ類、などなど)を設定することができます。また、パ ラメーターファイル(コマンドラインパラメーターを収めたファイル)を使うこ とも可能で、DOS の 128 バイトというコマンドラインの制限に悩まされずに 済みます。
Internet 上のどこかに F.Coutant 作の BOOTLIN の新しいバージョンがある かも知れませんが、私は見つけていません。だから、私は LOADLIN を 0 から 書きはじめ、めったにない状況に対するテストもいろいろやってみました。 LOADLIN は DOSのドライブから UMSDOS ベースのシステムを起動することも可 能です(このためには LOADLINX というプリプロセッサ・ユーティリティを使っ てください)
ある種のオプション(-v, -t, -d)を使うとデバッグ情報が出力されます。もし 何か問題が起きたときは、その情報を頼りに LOADLIN が実際に何をやってい るのか確認することができるでしょう。
LOADLIN は VCPI サーバーが存在している場合、仮想 86 モード(EMS ドライ バを使っている時はこれが普通です)から起動することも可能です。
注意: LOADLIN はあなたのコンピュータを「論理的に再起動」するプログラムであり、 DOS は Linux で完全に上書きされます。もし DOS に戻りたければ、Linux の "reboot" コマンドを使う必要があります。
386 以上の CPU(当然ですね)
0.99pl14 以上の圧縮された linux のカーネルイメージ
以下を含む LODLIN15 パッケージ
LOADLIN.EXE MANUAL.TXT (このファイル) TEST.PAR(パラメーターファイルの例) PARAMS.DOC |
以下のものは必ずしも必要なわけではありません。
LOADLINX.EXE BIOSINTV.SYS REALBIOS.EXE BOOTSECT.BIN |
これから先、LODLIN15.TGZ を C:\LOADLIN に展開したとして話をすすめます。
バージョン 1.5 になって、1.4 以下のバージョンで必要だった各種の設定は、 ほとんど全ての機種で不要になりました。スペインの天才、Javier Achirica が新しい方法を考えだして、 Linux のセットアップコードがプロテクトモー ドへ移行する前に割り込むことが可能になりました。私はこの方法を "Javier 法" と名付け、もし設定が行われなかった場合はこの方法を使うことにしまし た。
DOS プロンプトから、例えば、こんなふうに入力します:
C:> CD \LOADLIN C:\LOADLIN> LOADLIN zimage /dev/hdb1 ro vga=extended |
C:\LOADLIN> LOADLIN zimage -ja /dev/hdb1 ro vga=extended |
C:\LOADLIN> LOADLIN @params |
[訳注:6.1 章に LOADLINX でパラメータファイルを使う例が出てくるので、 今のバージョンではサポートしていると思います(私は試していませんが)]
(カーネルソースから抜きだした)より詳細なコマンドラインのパラメーターに ついては PARAMS.DOC にあります。
C:\LOADLIN> loadlin <enter> |
C:\LOADLIN> loadlin | more <enter> |
LOADLIN v1.5 (C) 1994 Hans Lermen (lermen@elserv.ffm.fgan.de) USAGE: LOADLIN @params LOADLIN [zimage_file] [options] [boot_params] without any params, LOADLIN displays this help message. @params: params is a DOS file containing all other options zimage_file: DOS file name of compressed Linux kernel image options: -v verbose, show information on params and configuration -t test mode, do all but starting Linux, also sets -v -d file debug mode, same as -t, but duplicates output to "file" (for -v, -t, -d please see 5.5) -rb search for REALBIOS before BIOSINTV -rx don't check REALBIOS' ROM-date (for -rb, -rx please see 5.4.2) -ja use Javier's method, disable BIOSINTV and REALBIOS. (please see 5.4) -clone use alternate CPU-check, assume we have a 486 clone (please see 5.4.4) -oldxd use old /dev/xda,xdb numbering 0xC00,0xC40, newer kernels ( >= 1.1.0 ) have 0xD00,0xD40. (please see 5.3.1) -n no translation for root=... (goes into command_line) (please see 5.3) boot_params: root=xxx filesystem to be mounted by Linux as "/" xxx = hex number (e.g. root=201 for /dev/fd1) = /dev/mmmn (e.g. root=/dev/hda2) mmm = fd,hda,hdb,sda,sdb... n = 1..10.. decimal n = 01..0a.. or 0x1..0xa.. or a..f hexnumber (please see 5.3) ro mount "/" readonly rw mount "/" read/write ramdisk=x install ramdisk of size x Kbytes. If also root=/dev/fdx, then LOADLIN prompts for a floppy (copied into ramdisk) (please see 3.2.4) vga=xxx vga mode (e.g. -3..0.., ask, normal, extended) (for more boot params see file PARAMS.DOC) Your current DOS/CPU configuration is: load buffer size: 0x775F0 setup buffer size: 0x1000 total memory: 0x0FE0000 CPU is in V86 mode BIOSINTV.SYS: NO SetupIntercept: YES, patching setup code stat4: VCPI_present, physmap=logmap, all OK for switch to realmode input params size 0x0000 input params: LOADLIN started from DOS-prompt |
注記: (-t のような)LOADLIN 自身のオプションは全て Linux のコマンド ライン・パラメーター以前にないといけません。
ほとんどの DOS ユーザーは(SMARTDRV のような)ディスクキャッシュを利用し ているでしょう。もし、キャッシュプログラムが "write-behind" キャッシュ を使っていれば、LOADLIN を呼ぶ前にまだ書きこまれていないキャッシュバッ ファを書きだしておく必要があります。
例:
C\LOADLIN> smartdrv /C こうすれば、キャッシュバッファがディ スクに書きこまれ(sync)ます。たいてい、 DOS 6.2 では不要のはずですが、やって おいて害にはなりません) C\LOADLIN> loadlin .... |
+-------------------- start of LINUX.BAT | | SMARTDRV /C | C:\LOADLIN\LOADLIN C:\LOADLIN\ZIMAGE root=/dev/hdb2 ro vga=3 | +-------------------- end of LINUX.BAT |
C> linux |
LINUX.BAT の一例を LOADLIN パッケージに入れておきました。
もし LOADLIN に root=/dev/fdx というコマンドと共に ramdisk=xxxx という コマンドを渡せば、LOADLIN はカーネルイメージをメモリにロードし、root floppy を挿入するように、という旨のメッセージを出して一時停止します。
こうすれば DOS を起動するフロッピー(と LOADLIN の起動)とルートディスク が同じフロッピードライブを利用することができます。
もちろん、このためにはブート用に 2 枚のフロッピーが必要ですが、Linux はどんどん大きくなって、もはやカーネルイメージとルートファイルシステム を一枚のフロッピーに同居させることは不可能になっています。LOADLIN を使 えば、お手元のディスクドライブの設定が(Linux の各種)ディストリビューショ ンと違っていても、トリックを使うことなくインストールすることができます。
例:LST 1.07 ディストリビューションは 3.5" フロッピーで配布されていま すが、手元のドライブ A: は 5.25" です。
Slackware 2.0.0 はさまざまなドライブの設定に対応した大きなディレクトリ ツリーを持っています。LOADLIN を用いれば、そのうちのイメージディスクと 必要なルートディスクだけで利用できます。
ちなみに:LOADLIN は Slackware と共に配布され、UMSDOS をインストールす れば自動的に組みこまれます。
1. 圧縮されたカーネルイメージをロードするのに十分なメモリ(LOADLIN の開 始位置と 090000h の間に必要です)。
LOADLIN の出力メッセージのうち、"load buffer size" が、あなたのシステ ムに実際に存在するメモリの大きさを示しています。
セットアップ・プログラムと LOADLIN 自身は 090000h から 09A000h に展開 されるので、640K のベースメモリは必須です。Linux 1.1.43 以後、セットアッ ププログラムはもはや 2K 以内には収まらなくなったので、サイズも可変にさ れ、時と共に大きくなっています。現在(1.1.47)では、セットアッププログラ ムは 5*512 バイト、一方、LOADLIN の持つセットアッププログラム用のバッ ファは 31*512 バイトですので、まだしばらくの間は大丈夫でしょう。
LOADLIN の "setup buffer size" に示される値が、セットアッププログラム 用のバッファサイズです。
640 K のメモリのうち、上位 20 K バイトが残っていれば、BIOS と上位メモ リに読みこまれるドライバ用のデータ領域として、多分十分でしょう。
DOS プログラムはいわゆるリアルモード(あるいは 386 以上のマシンでは 仮想 86 モード)でのみ稼働します。
一方、Linux はプロテクトモードで動き、カーネルは特権レベル 0(P0, スー パーバイザーモード)に入れなくてはなりません。ところが、(DPMI の場合の ように) V86 モードのサーバーが許可しなければ、V86 モードからプロテクト モード(P0)へスイッチすることはできません。
このため、
リアル 86 モードから開始する(EMS ドライバや WINDOWS は使えません)
EMS ドライバで VCPI サーバーを利用する(これでも WINDOWS は使えません)
VCPI は P0 モードも利用でき、ほとんどの EMS ドライバでもサポートされて います(もし EMS が使えるならば)が、MS-WINDOWS の元では利用できません (MICROSOFT はユーザーが P0 モードを使うことを嫌っています)。
物理メモリと仮想メモリのマッピングも最初の 640K のRAM 領域 では同一で ある必要があります。普通はそうなっているはずですが、EMS ドライバに以下 のようなオプションを与えることで、強制的にこのように設定することができ ます。
EXCLUDE=1000-A000 (386MAX 用) |
B=A000 (EMM386.EXE 用。たいていの場合は不要です) |
注意: 特に何メガバイトもメモリをつんでいるシステムの場合、プロテクトモードに 移行する前に VCPI サーバーがガーベッジコレクションを始めて、しばらく時 間がかかることもありますが、しんぼう強く待ってやってください。
もちろん LOADLIN を Linux の DOSEMU から使うことはできません。例え 実行したところで、幸いなことに DOSEMU 自身が V86 チェック・インストラ クション(IOPL の変更)のために general protection fault を起して終了し てしまいます。ですから、ファイルシステムには影響しません。しかし、 Linux の DOSEMU でWINDOWS 3.0 を動かし、その DOS prompt から LOADLIN を使ったときは(...うぎゃ..)、、DOS-FAT に何が起るかわかりません。
現時点(Linux-1.1.47)では、LOADLIN を使うのに特別なパッチは必要ありませ ん。LOADLIN-1.5 から、以前には必要だった各種の設定も普通の状況では不要 になるようにしました(3.2.1 と 5.4 を見てください)。
常駐ドライバと V86 モードに関する問題に取りくんできましたが、結局 Linuxのセットアッププログラムがプロテクトモードに移行する際に何らかの 形で割りこむ形になりました。最近のカーネルを使えば、loadlin の 起動時 にセットアッププログラムのコードを解析して、(割りこむのに)必要な場所を 見つけます。これでも動きますが、きれいな処理とは言えません。最もよい方 法は、Linux のセットアッププログラム自身に割りこみのためのメカニズムを 用意すること、つまり、セットアッププログラムに LOADLIN をサポートして もらうことです。
LOADLIN/KERNEL ディレクトリに最新の(1.1.47)カーネルの setup.S に対する パッチがあります。私はこのパッチを Linus に送っており、公式のカーネル リリースに取りこまれるように希望しています。そうなるまでは、あなた自身 の手でパッチを当ててください。しかし、(LOADLIN 自身が必要な個所を解析 するので)1.1.47 以上のカーネルならば LOADLINでブートしなくなる日まで、 必ずしもパッチを当てる必要はありません。
もう一つ、initmain.dif パッチも便利です。これを当てれば、Linux が実際 に受けとったコマンドライン・パラメータを表示させることができます。
DOS のバージョン 6.0 からは MSDOS の起動時に異なる設定で起動することが 可能になりました。これは CONFIG.SYS を解釈する時に行なわれますので、 LOADLIN/LOADLINX/Linux を設定するにも便利です。
たとえ DOS をブートしたとしても、後から DOS のコマンドライン、あるいは バッチファイルから Linux を起動することも可能です。
rem もし BIOSINTV.SYS を使うなら、最初に([MENU] の前) rem DEVICE=C:\LOADLIN\BIOSINTV.SYS を置いてください。 rem でも、ほとんどの場合、これは不要です。 SWITCHES=/F [MENU] menuitem=DOS, DOS boot menuitem=LINUX_1, LINUX boot (SLS 1.03) menuitem=LINUX_2, LINUX boot (Slackware, LST) menuitem=LINUX_3, LINUX boot (UMSDOS, with C: as DBLSPACE'd drive) menuitem=LINUX_4, LINUX boot from 3.5 inch floppy B: menuitem=LINUX_5, LINUX boot (Slackware, high partition number) menuitem=LINUX_6, Create a dump file for bug report [DOS] device=c:\dos\himem.sys device=c:\dos\emm386.exe 2048 ram DOS=HIGH,UMB SHELL=C:\COMMAND.COM C:\ /e:1024 /p ... etc., etc., etc. [LINUX_1] shell=c:\loadlin\loadlin.exe c:\loadlin\zimage vga=ask root=/dev/hdb3 [LINUX_2] shell=c:\loadlin\loadlin.exe c:\loadlin\zimage vga=-3 root=/dev/hdb2 ro [LINUX_3] rem UMSDOS ファイルシステムは圧縮されていない drive D:(/dev/hdb1) device=c:\dos\dblspace.sys rem v----- LOADLINX preprocessor を使う shell=c:\loadlin\loadlinX.exe d:\linux\zimage.{15 root=D: vga=ask rem これは UMSDOS のファイル名---------------^^^ | rem これは root=/dev/... と解釈される ----------------+ [LINUX_4] shell=c:\loadlin\loadlin.exe c:\loadlin\zimage root=/dev/fd1 ramdisk=1440 [LINUX_5] shell=c:\loadlin\loadlin.exe c:\loadlin\zimage root=/dev/hdb10 rem 注記:パーティションナンバーは 10 進の 10(カーネルが解釈する 16 と rem は違います)LOADLIN はこれを Slackware の /dev にある既存のデバイス名、 rem マイナー番号と衝突しないように翻訳します。 [LINUX_6] shell=c:\loadlin\loadlin.exe c:\loadlin\zimage -d c:\dump.txt root=/dev/fd1 ramdisk=1440 rem ^^^^^^^^^^^^^^ rem こうすれば、デバッグ情報がこのファイルに --------^ rem 出力されます。全て通常通りセットアップされますが、Linux はロード rem されずに LOADLIN は終了します。 rem 注意:CONFIG.SYS に [MENU] を設定しないかぎり、これは使わないこと。 rem さもないと、普通にブートするために DOS のシステムフロッピーが必要 rem になります。 [COMMON] rem ここから先にはその他の「一般的な」設定をします。 |
"shell=" という行にあらわれた全てのパラメータは DOS によって大文字 に変換されますが、Linux のパラメータは大文字と小文字を区別します。 LOADLIN は以下のパラメータを小文字にもどします。
mem=... no387 single auto debug no-hlt reserve=... hd=... xd=... bmouse=... max_scsi_luns= |
vga=... ramdisk= ro rw |
root=... |
パラメーターファイルを使えば大文字/小文字の問題は避けることができま す。この場合、CONFIG.SYS ラインはこのようになります:
[LINUX] shell=c:\loadlin\loadlin.exe @c:\loadlin\params |
[訳注:先にも書きましたが、このあたりは 1.5 以前のバージョンのことで、 今の 1.5 ではサポートしているようです]
もしパラメータファイルを使うなら(例えば @TEST.PAR)、このファイル名が LOADLIN のコマンドラインの最初のパラメータでなければなりません。zImage ファイル名も含む、その他のパラメータはパラメータファイルの中に記される ことになります。
Linux が起動する時、セットアッププログラム(基本的なハードウェア設定を チェックして、プロテクトモードに移行する)から runstring が渡されます。 この文字列は、コマンドラインと呼ばれていますが、コンパイル時に埋めこま れたキーワードと比較されます。あるものは(mem=, root=, ro, rw, no387)カー ネルの変数を変更し、あるものは(ether=, hd=, sound=)デバイスドライバに 渡され、またあるものは(single, auto)は /etc/init(あるいは/bin/init か /sbin/init のうち最初に見つかったもの)へ渡されます。
詳細は PARAMS.DOC を見てください。
"keyword=value" の形を取ったあらゆる未知のキーワードは "envp_init" に 置かれ /etc/init へ渡されます。この環境設定のための文字列は各種の rc ファイル /etc/rc* (/etc/rc.d/rc.*) でチェックされます。
例えば、rc.local に "set >/etc/boot_env_string" というコマンドを設定す ると、envp_init の中身がこのファイルに書きだされ、他のプロセスからも使 用可能になります。ただし、このコマンドはファイルシステムが読み書き可能 でマウントされる以前に実行される rc ファイルには記述しないこと!
DOS のコマンドラインは(プログラム名も含めて) 127 バイトに限られていま す。パラメータファイル(@param, 3.2.2 参照)を使えば、カーネルへ渡せる文 字列の長さは理論的には 2047 バイトですが、init/main の静的バッファを節 約するために、文字列は一時的な保存場所に置かれ、カーネルによってコピー されます。このため文字列の最大長はコンパイル時に決められています。
1.0.5 以前のカーネルには、init/main.c に小さな問題がありました。main.c の静的なバッファが 80 バイトしか用意されてなかったのです。LOADLIN はパ ラメーターを圧縮しますが、その長さをチェックしていないため、パラメーター が多すぎると、起動時にカーネルをハングアップさせてしまいます。
Linux 1.0.5 から "command_line[]" は COMMAND_LINE_SIZE の大きさ、すな わち 256 バイトになりました。コマンドラインのサイズもチェックされてい ます。もっと大きなサイズが必要ならば、init/main.c の COMMAND_LINE_SIZE を変更するだけです。
私はいくつかのフィードバックを受けて 1.2 を 1.3 にバージョンアップし、 より徹底的なエラーチェック機能を付けました。いくつかのバグも見つかり、 修正しました。しかし、何千もの可能性がありうる PC のハードウェア/ソフ トウェアの組み合せの元では、完璧にバグを無くすことは不可能でしょう。で すから、あなたの直面した問題についてぜひとも私にフィードバックしてくだ さい。
もしバグに気づいたら、それに時間を費すことはせず、私あてに mail してく ださい!
しかし、問題をレポートしていただく際には詳しい情報が必要です。「私のス クリーンは真っ青になってしまいますが、何が悪いのでしょう?」だけでは十 分ではありません。
-d か -t オプションを使えば、LOADLIN は私(あなたにも)に有益な情報を示 してくれます。
C:\LOADLIN>loadlin zimage /dev/sda1 ro |
何が問題なのかを確認するために -t オプションを付けてみてください:
C:\LOADLIN>loadlin zimage -t /dev/sda1 ro |
こうすれば、今までと全く同じ動作をしますが、Linux を実際にはスタートさ せません。そして、以下のような情報を表示します。
Your current LINUX kernel boot configuration is: image file: zimage kernel size: 0x4D010 ram disk size: 0x0000 root device: 0x0342 read only VGA mode: 0xFFFF command line size 0x001B command line: /dev/sda1 BOOT_IMAGE=zimage .. .. .. |
C:\LOADLIN>loadlin zimage root=/dev/sda1 ro mem=0xFF0000 |
間違いをチェックするために以下のように入力します。
C:\LOADLIN>loadlin zimage -d report.dmp root=/dev/sda1 ro mem=0xFF0000 |
こうすれば、出力を画面(と report.dmp ファイル)に出せます。
Your current LINUX kernel boot configuration is: .. .. command line: BOOT_IMAGE=zimage Your current DOS/CPU configuration is: .. .. total memory: 0x01E0000 .. .. |
何が起ったかについて私にメールしてください。メールには "report.dmp" ファ イルと CONFIG.SYS を含めておいてください。そうしていただければ、どこが 間違っているかをチェックできます。
注意: ある種の条件下では(Javier 法を使わない場合) INT15 を使えばメモリサイズ を知ることができます。しかし、これはある種の TSR やドライバ(例えば HIMEM.SYS)が邪魔をすることもあります。しかし、"mem=0xFF0000" オプショ ンを使えば、この問題を解決することが可能です。Linux がロードされ、無事 展開されれば、それ以後は DOS (BIOS も)を使う必要は一切ありません。
以下に示すものはデバイスファイルのマイナー番号についての問題を示すもの です。
LOADLIN ver 1.2 のころ、こんなバグレポートを受けとりました。
"SHELL=c:\loadlin\loadlin.exe c:\loadlin\zimage root=/dev/hda10"
としたところ、ロードはするが 'unable to read superblock' でパニックす
る。
問題は:
Linus は "/dev/hda" の後に続く数字を16進数と解釈していますが、 Slackware 1.2.x の /dev に付けられたデバイス名は(Slackware 2.0.0 では 変更されています) dev/hda1 .. hda9 .. hda10 .. hda16 になっており、 Linus が考えていたような /dev/hda1 .. hda9 .. hdaa .. hdaf にはなって いませんでした。
ですから、LOADLIN のバージョン 1.3 以降では、ルートデバイスを LOADLIN 自身で解釈して、数字でブートセクターに渡すようにしています。私の命名法 は折衷的ですが、混乱を多少とも減らせれば、と思っています。
もし "/dev/hda, hdb, sda ..." の後に続く数字が 0, 0x あるいは a..f で 始まっていれば、それは 16 進数として解釈されます。(例: dev/hdaa /dev/sda0xE, /dev/hab0c)
もし、1..9 の数字で始まっていれば、10 進数と解釈されます。
もしそれ以外の文字列ならば、そのままコマンドラインに渡されます(より新 しいバージョンのカーネルはもっと違うデバイス名を持っているかも知れませ んから)
注意: -n オプションをつければこの変換は行なわれません。その場合、 root=/dev ... の部分はそのままコマンドラインへ渡されます。実際 には変換とコマンドラインへの展開の双方が行われますが、Linux が LOADLIN の変換を上書きし、LOADLIN は既知のデバイス番号をチェッ クする機会を得ます。 このオプションは将来の Linux の進化をにらんだものです。もし Linus がルートデバイスのリストを増しても、それらの新しいデバイ スを LOADLIN をアップデートすることなく使うことができます。
新しいカーネルでは /dev/xd のメジャー番号を 13 に変えています。ルート デバイスは LOADLIN の内部で変換されるので、古いカーネルをロードする際 にはトラブルが起きるはずです。このような場合には -oldxd オプションを付 けて、/dev/xd の古いデバイス番号(12)を使うようにします。setup.S へのパッ チをあてれば、この設定はLOADLIN が自動的にやってくれます。
LOADLIN がカーネルイメージをロードして、Linux へ制御を渡す前にどちらか 条件が必要です。
Linux がプロテクトモードに切り替る寸前にセットアップコードに割りこ む(Javier 法を使って)機会があること
あるいは割り込みベクター(といくつかの BIOS データ)を "起動時の" 状 態を模倣するために修正すること
Javier 法を使うためには、設定から BIOSINTV/REALBIOS を外すか LODLIN に -ja オプションを付ける必要があります!
Javier 法でうまく行かない場合、b) の方法を試してみてください。b) の方 法を試すには、CONFIG.SYS の最初に次の一行を加えてください。
DEVICE=C:\LOADLIN\BIOSINTV.SYS |
もし、TSR やドライバが INT15 の割り込みを横取りしている場合、Linux に は誤った利用可能メモリ量が報告されるでしょう。(QEMMのような) DOS のメ モリマネージャーはいわゆる「ステルス法」を使ったときにこの問題を起しま す。
もし、このような事態が起れば、LOADLIN のコマンドラインに mem=xxxx と書 いてください。ここで xxxx はメモリの全バイト数です。(注意:マザーボー ドの BIOS がメモリのうち 128Kb を Shadow RAM に割りあてているかも知れ ません)
LOADLIN が示す "total memory" の欄が、 Linux から利用できるはずの全メ モリを示しています。
(BIOSINTV.SYS を使う)私の簡単な方法は、DOS によってほんのわずか変更さ れた割り込みテーブル(すなわち、本当に元のままのテーブルというわけでは ありません)を使いますが、ほとんど全ての設定の元で利用可能です。割り込 みベクターからはほぼ独立しているので、BIOS のデータ/スクラッチ・エリア に変更を加える必要はありません。REALBIOS 法の前に BIOSINTV 法を使って みるべきでしょう。
(例えば QEMM のような) DOS のメモリマネージャの元で使う場合の問題が報 告されています。そのようなメモリマネージャーは、いくかのベクターをフッ クするか LOADLIN がリアルモードに再入した時にはもはや使えないデータに アクセスしたりします。
BIOSINTV 法の選択肢として、バージョン 1.4 からは REALBIOS 法を取り入れ ました。この方法には次の 3 つが必要です。
REALBIOS.EXE
BOOTSECT.BIN
REALBIOS.INT
Alessandro Rubini(rubini@ipvvis.unipv.it)が BOOTSECT.BIN を書きました (このプログラムには Linus Torvalds の bootsect.S のコードが含まれてい ます)
彼の方法(linuxEXE パッケージで使われています)は、*本当の*オリジナルな BIOS の割り込みベクタを最も安全な方法で入手しています。彼の方法に比べ ると、他の全ての方法はトリッキーです。私は、彼の方法に加えて BIOS の data/scratch 領域、PIC-IMR とTOP-ROM を保存するようにしましたが、主要 な部分は Alessandroの方法のままです。
もし、本当にもし、Javier 法でも BIOSINTV 法でもうまく行かなかったとき の最後の方法として REALBIOS 法を使ってみてください。
しかし注意が必要です:
REALBIOS 法で作られる C:\REALBIOS.INT ファイルは、それが作られたマシン に固有のもので、C:\ になければいけません。
友達に配布してはいけません("loadlin14.tgz" だけを配布してください)。
友達のマシンからコピーしてもいけません。
(NFS などで)共有してはいけません。
もしハードウェアを変更したら(アダプタカードや RAM の着脱、IQR や I/O アドレスの変更など)があったらもう一度ファイルを作りなおしてください。
REALBIOS.INT を作ったマシンでのみ使ってください。
- DOS のプロンプトから
C:> CD \LOADLIN C:\LOADLIN> REALBIOS |
- すると、こんな出力が出ます。
Generation of the file C:\REALBIOS.INT (for the REALBIOS method) consists of TWO steps: 1. Generating the special boot floppy and booting with it. 2. Reading the saved interrupt table and BIOS data from the floppy and writing it to C:\REALBIOS.INT Type 1 or 2, (depending on which step you are in) or any other key to cancel: (訳注:画面に出るのはこのままでしょうが、あえて訳してみます) ---------------------------------------------------------------- (REALBIOS 法のために) C:\REALBIOS.INT を作るためには 2 つのステップ が必要です: 1. 特別なブートフロッピーを作り、それからブートします。 2. セーブされた割り込みテーブルとフロッピーの BIOS データを読みこ み、C:\REALBIOS.INT に書き出します。 1 か 2 (あなたがいるステップに応じて)を押してください。それ以外のキー を押すとキャンセルされます。 |
- まず最初のステップから実行しますので、"1" を押すと、こんな出力が示さ れます
OK, we first generate the floppy ! Insert an empty but DOS-formatted disk into drive A: (no matter what DOS format it is) Type C to continue or any other key to cancel ------------------------------------------------------------------- OK, まずフロッピーを作ります。 DOS でフォーマット済みの空のフロッピーを A ドライブに挿入してくだ さい(どんな DOS のフォーマットでも構いません) C を押すと続けます。その他のキーならキャンセルされます。 |
- フロッピーを入れて "C" を押すとこんな出力になります。
OK, The special boot floppy has been generated. Leave it inserted in drive A: and reboot your machine But NOTE: If you have a disk cache program (like SMARTDRV) you may need to flush the write-behind cache first! ------------------------------------------------------------------ OK, 特別のブートフロッピーができました。A ドライブに入れたまま、 マシンをリブートしてください。 でも注意して: もし(SMARTDRV のような)ディスクキャッシュプログラ ムを使っていれば、まず write-behind キャッシュをフラッシュしてく ださい。 |
- リセットボタンを押すか「三ッ指のあいさつ(CTRL-ALT-DEL)」をして、マシ ンをフロッピーからブートします。フロッピーのブートローダーが必要な BIOS の割り込みベクタとデータをフロッピーにセーブします。最後に、 マシンは次のような出力を示します。
Interrupt table and BIOS-data saved on floppy. Open the floppy door and reboot from your hard drive, then run REALBIOS again (step 2). -------------------------------------------------------------------- 割り込みテーブルと BIOS データをフロッピーにセーブしました。A ドライ ブのドアを開けてフロッピーを取り出し、ハードディスクからリブートし ます。そして REALBIOS を再実行し、step 2 に進んでください。 |
- (フロッピーからブートしてしまうのを避けるために)フロッピードライブの ドアを開けて、リブートし、もう一度 LOADLIN のディレクトリに入り、
C:\LOADLIN> REALBIOS |
- (ステップ 2 に入っているので)最初の質問には "2" と答えます。すると、 次のようなメッセージが出力されます。
OK, we now read the saved interrupt vector from the floppy and save it to the file C:\REALBIOS.INT (no way to change the name!) Is the floppy (used in step 1) inserted in drive A: ? Type Y to continue or any other key to cancel -------------------------------------------------------------------- OK, フロッピーにセーブされた割り込みベクタを読みこみ、 C:\REALBIOS.INT(名前を変えることはできません)にセーブします。 (step 1 で作成した)フロッピーを A ドライブに入れましたか? Y で継続、他のキーでキャンセルされます。 |
- 作成したフロッピーディスクを A ドライブに再挿入し、Y を押すと C:\REALBIOS.INT がフロッピーのデータから作成されます。もし何か変なこ とが起きれば、REALBIOS が教えてくれるはずです。
C:\REALBIOS.INT は他のマシンに移動させられないように"不可視+システム" ファイルになっています(DIR コマンドでは見えません)。
LOADLIN は最初に BIOSINTV.SYS を探し、次に REALBIOS.INT を探します。こ の順は "-rb" オプションで逆にできます。
LOADLIN は REALBIOS.INT に保存された ROM-BIOS-DATE をチェックして、も し合っていなければ "-t" の冗長(verbose)モードに替ります。ある種の DOS のメモリマネージャーは、ROM-BIOS のトップページをリマップして warm-boot に割りこむため、正しい ROM-BIOS-DATE を返さないことがあります。 LOADLIN はリアル・モードへ移行する前にこの日付をチェックするので、起動 に失敗してしまいます。
このような場合、"-rx" オプションを使って日付のチェックをスキップしてく ださい。
注意:
- C:\REALBIOS.INT は配布されないように HIDDEN+SYSTEM 属性になっていま す。もし C: ドライブが圧縮されていても C:\ にないといけません。
- 上で使ったフロッピーは DOS では利用できなくなります。再利用するため には、再度フル・フォーマット("クイック"フォーマットではなく)する必要 があります(ローレベルフォーマットとも言いますね)。
- あらゆる種類のハードウェアを追加したり、外したり、再設定した場合、も う一度 REALBIOS を実行する必要があります!(私が Javier 法を好む理由は ここにあります)
バージョン 1.5 になってからは、上位メモリにロードされる DOS ドライバの 問題は最小限になりました(多分、問題は起らないと思います)。でも、 BIOSINTV/REALBIOS 法を使う場合、LOADLIN はバージョン 1.4 と同じ動作を することに注意してください。そのため、問題が生じることがあるかも知れま せん。
リアルモードに戻った時には、0A0000h 以上にマッピングされたメモリは見え なくなります。そのため、BIOSINTV/REALBIOS はどんなデバイスドライバを使っ ても、決して上位メモリにはロードしないで下さい(DEVICEHIGH=..., LOADHI..., LH... などを使って)
注意: 多くの DOS ドライバ用のインストールプログラム(例えば Ontrack 製 の Drive Rocket Data Accelerator)はドライバを上位メモリにロードするの がデフォルトになっています。
また、090000h から 09BFFFFh の領域はセットアッププログラムと LOADLIN が配置される場所なので、必要なデータを置いてはいけません。これはバー ジョン 1.5 でも同じですが、もしそのような状況が生じれば警告が発っせら れます。通常では 640K のベースメモリに残っている上位 20K バイトにBIOS の残存が 1 K バイトほど残る程度のはずです。
(Jacek Zapala zapala@if.pw.edu.pl によると) ある種の 486 CPU のクロー ンでは、CR0 を使って V86 モードを検出する際に問題が起きることがあるそ うです。これは CPU がリアルモードにありながら、ページングが可能になっ ている時に起ります。確かにこのような設定も可能ですが、ドキュメントにも なっていないし、INTEL もサポートしていません。多分、この手法でマザーボー ドのBIOS をshadow ram にマッピングしているか、何か古くて奇妙な EMM マ ネージャーを使っているのだと思いますが、その CPU が正確に 486 のクロー ンではないことを示しているとも言えます。-clone オプションを付ければ、 CR0 チェックをパスして、EMM マネージャーがあれば V86 モードにあると見 なします。もちろん、この種の EMM マネージャーが実際のページングをして はいけません!
-v,-t,-d オプションの情報は、ブートセクターとセットアッププログラムが ロードされて LODADLIN によって更新された時点で出力されます。出力される 情報は Linux から見えるものですが、-t と -d オプションの場合、zimage ファイルはロードされず、linux は起動しません。
説明:
LINUX カーネルのブート時の設定は以下の通りです:
image file: d:\tmp\1-1-47.0 <- カーネルイメージのファイル名 kernel size: 0x5BFF0 setup size: 0x0A00 ^ ^- セットアッププログラムのサイズ(バイト) |------------------ カーネルサイズ(バイト) kernel version: 1.1.47 (root@el15) #4 Mon Aug 00:57:07 MET DST 1994 ^---- これは setup.S にLOADLIN 用パッチを当てた時の み表示されます ram disk size: 0x0000 <- 0 = none, それ以外は Kbytes での大 きさ root device: 0x0342 read/write <- ルートデバイスの MAJOR+MINOR 番号 VGA mode: 0xFFFF <- startup 時のビデオモード command line size 0x0011 <- 圧縮されたコマンドラインの大 きさ command line: <- Linux から見えるコマンドライ BOOT_IMAGE=zimage ンの状態 |
現在の DOS/CPU の設定は以下の通りです:
load buffer size: 0x775F0 setup buffer size: 0x1000 ^ ^- セットアッププログラムのコードを格 | 納するバッファの大きさ(バイト)。 | "setup size" よりも大きくないといけ | ません。 ----------------- 展開されたカーネルを格納するバッファ の大きさ(バイト)。"kernel size" よ りも大きくないといけません。 total memory: 0x0FE0000 <- INT15 から計算した Linux から 見える RAM の上限。 CPU is in V86 mode <- 仮想 86 モードにいる場合 or CPU is in REAL mode <- リアルモードにいる場合 or CPU is in undocumented REAL PAGING mode, trying any way (「CPU はドキュメントにない REAL PAGING モードにあります。とにかくやっ てみます」) BIOSINTV.SYS: YES <- $BIOSINT を正しく読みこめた場合 or REALBIOS: YES or REALBIOS: YES, but ROM-BIOS-DATE differs, must rerun REALBIOS.EXE (BIOSINTV.SYS はあるが ROM-BIOS の日付けと異なる。REALBIOS.EXE を再実 行してください。) SetupIntercept: NO <- LOADLIN-1.4 mode を使う or SetupIntercept: YES, patching setup code <- Javier 法を使う or SetupIntercept: YES, legal intercept <- 同上だが、カーネルにパッ チ済み |
ここには、以下の 4 つ可能な状態のうちの 1 つが示される:
stat1: cpu in real 386 mode(cpu は リアル 386 モードにある) stat2: cpu_V86, but no VCPI available (check aborted) (cpu は 仮想 86 モードにあるが VCPI が見つからない(チェック中止)) stat3: VCPI_present, but physmap != logmap (check aborted) (VCPI は見つかったが、仮想マッピングと論理マッピングが一致しな い(チェック中止)) stat4: VCPI_present, physmap=logmap, all OK for switch to realmode (VCPI はあり、仮想マッピングと論理マッピングも一致する。リアル モードにスィッチするのに問題なし。) |
以下に示すものは、DOS のコマンドラインかパラメータファイルについて:
input params size 0x000D <- DOS のコマンドラインの大きさ (あるいは圧縮されたパラメータ ファイルの大きさ) input params: <- DOS コマンドラインの内容 ..\zimage -t |
以下、追加的な情報か警告が続く:
LOADLIN started from DOS-prompt <- この 2 つのうちどちらか " " " CONFIG.SYS <- (LOADLIN は DOS の環境変数に COMSPEC= の行があると仮定) You are running under MS-WINDOWS <- もし WINDOWS から動かしていれ ば、この警告が出力されます。 (LOADLIN は WINDIR= という環 境変数があると仮定します) |
このプログラムは LOADLIN ユーティリティの「プリプロセッサ」として使 われ、DOS 風のドライブ名(C:, D:, など)を Linux のデバイス名(/dev/....) に変換します。
"root=X:" に加えて、LOADLINX は LOADLIN と同じパラメータを受け付け、 LOADLIN に渡します。(LOADLIN とは異なり) LOADLINX ではパラメータファイ ル (@param-file) のパラメータをコマンドラインに書くことも可能で、そ のパラメータは上書きされます。 (例えば "loadlinX zImage @default vga=3" という書き方は loadlinX では 可能ですが loadlin では使えません)
LOADLINX は CONFIG.SYS ファイルの shell= に指定することも可能です。し かし、LOADLINX は LOADLIN と同じディレクトリにないといけなせん。
Jacques Gelinas(jacques@solucorp.qc.ca)が変換アルゴリズムの発案者です (私はそれを強化して LOADLIN にインプリメントし、DOS の正確な振舞いにあ わせただけです)。
普通のユーザーは DOS パーティションをルートデバイスにはしないでしょう から UMSDOS ユーザーのみに価値があるものでしょう。
LOADLINX は AT タイプのドライバ(IDE)か、DOS の元で使える BIOS を持った SCSI アダプタカードに接続された最大 2 台までの SCSI ディスクの環境での み利用できます(すなわち INT13 システムコールで使えねばなりません)。IDE と SCSI を混在した環境は(まだ)サポートしていません。しかし、そのような 環境では root=/dev/xxxx として LOADLINX のドライブ名の変換をバイパスす ることができます。
使い方:
LOADLINX [--dv] LOADLIN_command_line --dv デバッグ情報の出力;LOADLIN は実行しない。 --version zimage からバージョン番号を出力(setup.S に対するパッチが必要) --version=-1.0.9 カーネルバージョンが 1.0.9 以下かのチェック --version=1.1.47 カーネルバージョンが 1.1.47 以上かのチェック --version=1.1.47#2 カーネルバージョンが 1.1.47 () #2 かどうかのチェック |
例:
LOADLINX zimage.ums root=D: vga=ask (注意:UMSDOS はブート時にルートファイルシステムを r/w でマウントする 必要があるので "ro" オプションを使ってはいけません。) LOADLINX zimage_1.147 @test.par root=/dev/hdb2 --version=1.1.47#2 (注意:全てのパラメーターを test.par ファイルから読みこみ、カーネルイ メージファイル名とルートデバイス名を書きかえ、バージョンチェッ クを行います) |
こんなバッチファイルを使うのがよりスマートな方法でしょう。
+-------------------- start of LINUX.BAT | | SMARTDRV /C | C:\LOADLIN\LOADLINX C:\LOADLIN\ZIMAGE root=C: vga=3 | +-------------------- end of LINUX.BAT |
こうしておけば、
C> linux |
コメントやバグレポートは以下に送ってください。
E-Mail: lermen@elserv.ffm.fgan.de SnailMail: Hans Lermen Am Muehlenweg 38 D53424 REMAGEN-Unkelbach GERMANY |
念のため、繰り返して注意しますが、どうぞあなたの E-Mail の "Reply to" パスが正しいか確認してください。宛先不明で帰ってきたメールが多数ありま す。ゴミ箱送りにするためにメールに返事をするのは楽しいことではありません。
[訳注:このマニュアルの日本語訳に関しては、kojima@komae.denken.or.jp まで連絡してください。]
このプログラムは F.Coutant 作の BOOTLIN 無しには、こんなに速く書きあげ ることはできなかったでしょう。
このプログラムは Linus Torvalds なしには全く意味のないものです。
Jacques Gelinas が VCPI のサポートを実現するように勇気づけてくれました。 LOADLINX プリプロセッサも彼のアイデアをインプリメントしたものです。
Alessandro Rubini は、自作の linuxEXE パッケージから BOOTSECT.BIN 関係 のコードを利用させてくれ、いくつか重要なヒントをくれました。
Chuck Munro は QEMM とバージョン 1.4αの問題についてのヒントをくれまし た。彼はまた、ドキュメント化について手伝ってくれました。
Javier Achirica がセットアップからスイッチアウトする方法を考案しました (LOADLIN-1.5)。この結果、ほとんど全てのマシンで BIOSINTV や REALBIOS 法は不要になりました。この方法は:セットアッププログラムを V86 モード で実行し、プロテクトモードに移行する直前に割込むことです。
重要な問題やバグレポートが:
Mitchum Dsouza, UK Claus Tondering, Denmark Johann Friedrich Heinrichmeyer, Germany Jacek Zapala, Poland Jon Peatfield, UK |
全ての ALPHA テスターに感謝します。彼らは "テスター募集"の呼びかけに応 じてくれました。参加者全てのリストを掲げることは不可能ですが、彼らは特 に徹底的にテストしてくれました:
Michael Goddard, US Shih-Hua Chao, US Rene Baart, Netherlands Asad Khan, Jan Lien, Sweden |
また、LOADLIN で問題は起らなかったけど、私のもとに "動いたよ" とメール してくれた全ての人に感謝します(肯定的なフィードバックは最善のものです)
LOADLIN 1.5 ((C) 1994 lermen@elserv.ffm.fgan.de)
and
Linux version: 0.99.14, 0.99.15, 1.0, 1.1.47
(翻訳:こじまみつひろ kojima@komae.denken.or.jp)
以下に示すものは認識されるコマンドラインパラメータです。
LOADLIN が解釈するもの
ramdisk=size (ramdisk のサイズ(KBytes)) or ramdisk=size,no (上と同じですが、ディスクを変えるように、 とのプロンプトは出ません) 例: ramdisk=1440,no vga=mode |
Linux のカーネルが解釈するもの
mem=number (0.99pl15 以上では物理的なメモリの終り) root=device ro rw no387 debug コンソールに出力されるログレベルを 10 にセット no-hlt 起動時の HLT チェックを中止 |
init が解釈するもの
single auto ro,rw,no387 (カーネルから渡される) |
各種のドライバが解釈するもの
reserve=port1,num1,...,port5,num5 # 80x86 の io ポート予約用 ether=irq,base_addr,mem_start,mem_end,dev_name # イーサネット用 hd=cyl,head,sect # HDD 用。2 ドライブあればこれを 2 度繰りかえす # 1 つめがドライブ 0 に対応 bmouse=irq # バスマウスの IRQ の指定 max_scsi_luns=n # (n は 1 から 8 の間) st0x=base_address,irq # SEAGATE controller ST01/ST02 tmc8xx=base_address,irq # Future Domain TMC-885,TMC-950 t128=address,irq # Trantor T128/T128F/T228 ncr5380=port,irq,dma # Generic NCR5380 driver aha152x=portbase,irq,scsiid,reconnect # Adaptec AHA-152x driver xd=type,irq,iobase,dma # xd ハードディスク用 mcd=port,irq # Mitsumi CD 用 sound=0x0TTPPPID, .. sbpcd=sbport,SoundBlaster sbpcd=LMport,LaserMate sbpcd=SpeaFXport,SPEA |
環境変数になるもの
name=xxxx の形式になっているパラメータで、カーネルにもドライバにも認識 されないものは環境変数に登録されます。
LOADLIN 自身は BOOT_IMAGE=imagefile を環境変数に登録します。ユーザー自 身でその他の環境変数を利用して /etc/rc などで条件に合せた動作をさせる ことが可能です。
以下に示すものはより詳細な説明です:
LOADLIN で認識されるパラメータ:
root=device ----------- device "/dev/hda2" のようなシンボリックなデバイス名か 16 進で示されるデバイスナンバー(上位バイトがメジャーナ ンバーで、下位バイトがマイナーナンバー) 認識されるシンボリックデバイス名(とそのパーティション) は以下の通り: "hda", "hdb", "sda", "sdb", "sdc", "sdd", "sde", "fd", "xda", "xdb" ここには問題もあります: Linus は /dev/hda の後に続く数字を 16 進と解釈しています。とこ ろが、Slackware では Linus がしたであろう /dev/hda1 .. hda9 .. hdaa .. hdaf ではなく、 /dev/hda1 .. hda9 .. hda10 .. hda16 という番号付けになっていま す。 このため、LOADLIN のバージョン 1.3 以降では、ルートデバイスを 自ら解釈して数字でブートセクターに渡すようにしています。私の妥 協的な命名法が、多少なりとも役にたてば、と願っています。 私の命名法は: もし "/dev/hda, hdb, sda .." に続く数字が 0, 0x あるいは a..f ならば 16 進数と考え、1..9 で始まっていれば 10 進数とみなしま す。もし、どちらにもあてはまらなければ、その文字列はそのままコ マンドラインへと渡されます(より新しいバージョンのカーネルではま た違うデバイス名を用意しているかも知れません) 例: root=302 root=0x201 root=/dev/hda2 root=/dev/sdaa は root=/dev/sda10 、 /dev/sda0xa と同じ。 ramdisk=size ------------ size Kbytes 単位で表した RAMDISK の容量です。ラムディスクの イメージは root=/dev/fdx が指定された場合、カーネルの 起動時にフロッピードライブから読みこまれます。イメージ を読みこんだ後、 カーネルはラムディスク(フロッピーでは ありません)をルートデバイスにします。(カーネルがロード された後など)起動用のフロッピーディスクが不要になれば、 LOADLIN 自身がラムディスクにコピーすべきディスクを入れる ようにプロンプトを出します。 vga=mode -------- mode -3 VGA モードをユーザーに問いあわせる。 ask でも同じ -2 80x50 拡張 VGA モード extended でも同じ -1 80x25 標準モード normal でも同じ 0 ブートプロンプトが出ている時に 0 を入れたと同じ . . n ブートプロンプトが出ている時に n を入れたと同じ ro "ro" を指定するとルートデバイスはリードオンリーモードで マウントされます(UMSDOS 用ではありません!) rw "rw" を指定するとルートデバイスをリード/ライト可能で マウントします |
カーネルにのみ理解されるパラメータ
mem=number ---------- number 物理的な RAM の終りを示します。0.99.15 以上のカーネルで利用で き、インストールされている RAM のサイズを自動的に認識できない ときに使うと便利です。 root=device ----------- device "/dev/hda2" といったシンボリックデバイスかデバイス番号を示す数 字(上位バイトがメジャー番号、下位バイトがマイナー番号)。認識可 能なシンボリックデバイス名(パーティションも含めて)は: "hda","hdb","sda","sdb","sdc","sdd","sde","fd","xda","xdb" 注意:1.1.47 以前のカーネルでは xda=0xC00, xdb=0xC40 だったが それ以降のカーネルでは xda=0xD00, xdb=0xD40 に変更 例: root=302 root=/dev/hda2 !!注意:古いカーネル(1.0.5 以前)には init/main.c に小さなバグが !! あります。もっとも、ほとんど問題になることはありませんが: !! シンボッリックデバイス名の最後("hda2")が init にオプション !! パラメータとして渡されてしまい、init が "illegal option" と !! 文句を言います。しかし、エラーにはならずにそのまま実行されます。 !! !! もっと注意すべきことは、コマンドラインの静的バッファが小さすぎる !! ことです(init/main.c では 80 バイトに設定されています)。このバッ !! ファのサイズを 512 にしてカーネルを再構築するのがいいでしょう。 !! !! このバグは Linux 1.0.5 以降では修正されており、"command_line" も !! 最近のカーネルで 256 バイトがデフォルトになり、必要ならば !! init/main.c の #define COMMAND_LINE_SIZE xxxx を変更することで簡 !! 単に変更することができます(上限は 2047 です) no387 ----- "no387" を指定するとハードウェア浮動小数点コ・プロセッサを使用しません。 1.1.47(より以前かも)以降では、ro,rw,no387 のオプションは init へは渡さ れなくなりました。 次のオプションは新しく設定されたものです。 debug コンソールに出力されるログレベルを 10 に設定します。 ----- no-hlt 起動時に HLT コマンドのチェックをしません。もし 486 ------ クローンチップを使っていれば、このオプションは*きわめて* 有益でしょう。 |
"init" に認識されるパラメータ:
single 起動時に "シングルユーザー・モード" になります。 ------ auto ---- ro,rw,no387 (1.1.47 以前のカーネル用。上記のコメントを見てください) ----------- |
イーサネットの設定
ether=irq,base_addr,mem_start,mem_end,dev_name --------------------------------------------- irq 数字、IRQ 番号(3..15) base_addr 数字、IO ベースアドレス(0x280,...) mem_start 数字、シェアードメモリーの開始 mem_end 数字、シェアードメモリーの終り dev_name 文字列 eth0..3 all configured ethernetcards dl0 D-Link DE600 ポケットアダプタ atp0 AT-LAN-TEC (RealTek) ポケットアダプタ plip0..2 パラレルIP (PLIP) sl0..3 シリアルIP (SLIP) 例: ether=10,0x280,0xc8000,0xcbfff,eth0 関係するファイル: net/inet/eth.c, drivers/net/Space.c |
I/O ポートの予約
reserve=port1,num1,...,port5,num5 --------------------------------- portn 対象となる IO ポートの範囲番号 numn その番号で予約するアドレス(これらのアドレスは "ioport_register" で "1" にセットされる) 関連するファイル: kernel/ioport.c (v1.2 以降では arch/i386/kernel/ioport.c) |
ルートデバイスのハードディスクパラメーターの設定
hd=cyl,head,sect --------------- # 注意:もし 2 つのドライバを持っていれば、hd= パラメータを 2つ 書くこ # と。1 つめがドライブ 1 に、2 つめがドライブ 2 に対応する。 # 例:loadlin zimage hd=1001,15,17 hd=989,15,56 root=/dev/hdb2 ro # これは私のマシンの例ですが、実際には不要です。もし Linux が BIOS か # ら正しくドライブのパラメータを取得できないときにのみ必要です。 関係するファイル: drivers/block/hd.c 設定: CONFIG_BLK_DEV_HD |
バスマウス用の IRQ の設定:
bmouse=irq ---------- 関係するファイル:drivers/char/busmouse.c 設定: CONFIG_BUSMOUSE |
SCSI コントローラー用のパラメーター:
max_scsi_luns=n lun の最大値(1 から 8 までの間) st0x=base_address,irq SEAGATE ST01/ST02 用の設定 tmc8xx=base_address,irq Future Domain TMC-885, TMC-950 用 t128=address,irq Trantor T128/T128F/T228 用 ncr5380=port,irq,dma NCR5380 用 aha152x=portbase,irq,scsiid,reconnect Adaptec AHA-152x 用 関連ファイル: drivers/scsi/seagate.c, t128.c, g_NCR5380.c, aha152x.c 設定: CONFIG_SCSI_SEAGATE, CONFIG_SCSI_T128, CONFIG_SCSI_GENERIC_NCR5380, CONFIG_SCSI_AHA152X |
SCSI テープ用のパラメータ:
st=buffer_size,write_threshould,max_buffers buffer_size Kbyte 単位で示したテープバッファのサイズ(ST_BLOCK_SIZE) write_threshould バッファを書きだすまでの大きさ(buffer_size より小 さくすること) max_buffers 予約しておくバッファの数 関連ファイル: drivers/scsi/st.c 設定: CONFIG_CHR_DEV_ST |
XT ハードディスコントローラ(DTC 5150X)用のパラメータ:
xd=type,irq,iobase,dma ---------------------- 関連ファイル: drivers/block/xd.c 設定: CONFIG_BLK_DEV_XD |
Mitsumi 製の CDROM ドライバ用のパラメータ:
mcd=port,irq ------------ 関連ファイル:drivers/block/mcd.c 設定: CONFIG_MCD |
サウンドカード用の設定:
sound=0x0TTPPPID, .. ---------------- 全ての値は 1 つの longint 値に埋めこまれる。上の例では、16 進のフォー マットになっており、それぞれ 16 進数で記述される。 TT サポートしているカードのタイプ 設定されているカードへのインデックス。もし全てのカードが設定され ていれば(普通あり得ない設定だが)、以下の順番になっている。 Roland MPU-401 Gravis Ultrasound ProAudio Spectrum SoundBlaster SoundBlaster 16 SB16 MPU-401 (SB16-MIDI port) AdLib PPP 使用するポートのアドレス I IRQ D DMA Channel 関連ファイル: drivers/sound/dev_table.h,dev_table.c 設定: CONFIG_SOUND |
IDEタイプ の CD-ROM(Kotobuki/Matsushita/Panasonic)用のパラメータ
sbpcd=sbport,SoundBlaster ------------------------ sbpcd=LMport,LaserMate ---------------------- sbpcd=SpeaFXport,SPEA ---------------------- sbport サウンドブラスタ用のドライバが使うベースアドレス + 0x10 (0x230 なら 0x220+0x10 を意味している) LMport MPU タイプのポートで、0x300 か同等のアドレス SpeaFXport SpeaFX カードのベースアドレス 関係ファイル: drivers/block/sbpcd.c 設定: CONFIG_SBPCD |
Quickstart for LOADLIN-1.5
LOADLIN のバージョン 1.5 は(それ以前のバージョンとは異なり)、たいてい 特別の設定は不要で、ALPHA テスターからは十分安定している、と報告されて います。だから、必要なものは、
LOADLIN.EXE,
LOADLINX.EXE
(LOADLIN.EXE の preprocessor で、入力されたパラメータを処理 し LOADLIN.EXE を実行します)
Linux を起動するためには"/vmlinuz" や "/usr/src/zImage" などの圧縮され たカーネルイメージが必要です。Slackware では、あなたが手に入れた ftp サイトの ..../slackware/kernels のディレクトリに(bare, scsi, modern 等 の)多くのカーネルが用意されています。
カーネルイメージも DOS パーティション(例えば C:\)にコピーします。
dos プロンプトから起動するには:
Linux のパーティション(ext2, minix, ...)をルートディレクトリとし てマウントするには、
loadlin c:\vmlinuz root=/dev/hdb2 ro == |
UMSDOS ファイルシステムをルートディレクトリにするには、
loadlin c:\vmlinuz root=/dev/hda1 rw == or loadlinX c:\vmlinuz root=c: rw |
SlackWare がインストールされた A ドライブ にあるルートフロッピー からブートしてカーネルイメージはハードディスク上にある場合、
loadlinX c:bare root=a: rw ramdisk=1440,no |
loadlinX a:scsi root=b: rw ramdisk=1440,no |
loadlinX a:modern root=a: rw ramdisk=1440 |
注記: どのルートパーティションを使うかは知っておく必要があります。上の /dev/xxx とか C: は、あくまで例に過ぎません。
もしうまく行かなかった場合、MANUAL.TXT を読んでください。
この文書は、特に Slackware のユーザーのために、SlackWare 2.0.0 に附属 のPatrick Volkerding が書いた LODLIN14.TXT を修正して添付したものです。 多分、Pat 自身も文書を LOADLIN-1.5 用にバージョンアップするでしょうか ら、新しいLODLIN15.TXT は "-----" 以下に付けておきます。
注意してほしいことは、公式の LOADLIN は *.TGZ 形式になっていますが、 Pat's のものは*.ZIP になっていることです。ですから、すでに Slackware 2.0.0 をインストールしている場合、手順のうち "unzip ... pkunzip loadlin15.zip" の部分は飛ばし、(Linux のもとで) tar を使って LOADLIN-1.5 をインストールできます。
mount -t msdos /dev/hda1 /mnt cd /mnt mkdir loadlin cd loadlin tar -xzvf lodlin15.tgz |
Hans Lermen(訳注:loadin の作者)
elserv.ffm.fgan.de
============================================================================
----------------------------------------------------------------------------
これは Linux を MS-DOS から起動するためのユーティリティです。LILO を使っ て起動するのに取って替り得るもので、初心者には LILO よりもずっと安全で しょう。LILO では不可能な UMSDOS からの起動も難なくこなします。
Loadlin を使うためにはまず Linux をインストールする必要があります。 「LILO のインストール」はスキップしますが、「システム設定」の最初にた ずねられる bootdisk は作成しておきましょう。システムを起動し、 kernel(/vmlinuz)を DOSのパーティションにコピーします。Linux をインストー ルすればどこかにDOS のパーティションがマウントされていることでしょう。 もしマウントされていなれば、以下のようにして手動でマウントします。
mount /dev/hda1 /mnt -t msdos |
次に、カーネルを DOS のパーティション上にコピーします。
cp /vmlinuz /mnt/vmlinuz |
unzip -d lodlin15.zip or: pkunzip -d lodlin15.zip |
ここまで来れば loadlin.exe を使って Linux パーティションを起動するのは、
loadlin c:\vmlinuz root=/dev/hdb3 ro |
もし UMSDOS を使っていれば、このようにします:
loadlinx c:\vmlinuz root=c: rw |
それでは、Good luck
Patrick Volkerding (訳注:Slackware の作者です)
volkerdi@mhd1.moorhead.msus.edu
日本語訳:小島 三弘
kojima@komae.denken.or.jp
配布形態に関するお問い合わせなどは JF@linux.or.jp までお願いします。
日本語訳: | 小島三弘 <kojima@komae.denken.or.jp> | (1995/02/13) |
SGML 変換: | 森本淳 <morimoto@xantia.citroen.org> | (2000/05/12) |
千旦裕司 <ysenda@pop01.odn.ne.jp> | (2001/09/14) |
[1] | この LOADLIN のドキュメントも長すぎますよね! |