Loadlin v1.5 のドキュメント類

Hans Lermen

こじま みつひろ - 日本語訳

1994/08/07

Loadlin v1.5 のドキュメント類

Note: この文書は、Loadlin v1.5 の付属文書のうち、README.1ST, MANUAL.TXT, PARAMS.DOC, QUICKSTA.RT を翻訳したものです。 原文の日付は 1994年8月27日、訳文の日付は 1995年2月13日 となっています。Loadlin は 2001年9月時点で v1.6 が出ています。なお、本書は、 訳者小島三弘さんが作成された文書を SGML に変換したものです。 (JF Project)


Table of Contents
1. REAEME.1ST
2. MANUAL.TXT
2.1. Copyright
2.2. なぜ(LILO ではなく) LOADLIN や BOOTLIN を使うのか?
2.3. BOOTLIN があるのになぜ LOADLIN か?
2.4. LOADLIN の使い方
2.5. LOADLIN のコマンドラインパラメータ
2.6. 問題が起れば
2.7. UMSDOS システムをブートするためのプリプロセッサ LOADLINX
2.8. コメントやバグレポートの送り先
2.9. 協力者と謝辞
3. PARAMS.DOC
3.1. loadlin のコマンドパラメタ
3.2. コマンドパラメタの詳細
4. QUICKSTA.RT
5. 日本語訳について

Chapter 1. REAEME.1ST

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 の形に変換します。

ローダーのプログラムは以下の条件の元で DOS のプロンプトか CONFIG.SYS から起動できます。

  1. プログラムがロードされるメモリ番地と 0x90000 番地の間に圧縮された カーネルイメージを置けるスペースがあること(ヘッダーとセットアップ プログラムは別にして)

  2. 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 に対するパッチ


Chapter 2. MANUAL.TXT


2.1. Copyright

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.


2.2. なぜ(LILO ではなく) LOADLIN や BOOTLIN を使うのか?

LOADLIN や BOOTLIN はハードディスクから Linux(0.99.14 以上)をブートす るためのもっとも安全な方法です。多くの Linux の初心者は、詳しいけれど 長すぎる [1] LILO のドキュメントを読むのに耐えきれず、LILO を誤って動か し、、、バン !! DOS とはさようなら、、、してしまいます。

(FDISK /MBR はディスクを修復するためのスーパーマンではありません)


2.3. BOOTLIN があるのになぜ LOADLIN か?

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 ドライ バを使っている時はこれが普通です)から起動することも可能です。


2.4. LOADLIN の使い方


2.4.2. DOS プロンプトからの起動

2.4.2.1. 手早く始めるために

これから先、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
注意:以前からの LOADLIN ユーザーは -ja オプションを使って BIOSINTV/REALBIOS を無効にするか、それらを削除すべきでしょう:
  C:\LOADLIN> LOADLIN zimage -ja /dev/hdb1 ro vga=extended
あるいは、もし DOS のコマンドラインの上限の 128 バイトを越えるようなパ ラメータを渡す場合は、
    C:\LOADLIN> LOADLIN @params
とします。パラメータファイルの一例が "test.par" です。ぜひ読んでみてく ださい。現時点では LOADLINX はパラメータファイルをサポートしていません。

[訳注:6.1 章に LOADLINX でパラメータファイルを使う例が出てくるので、 今のバージョンではサポートしていると思います(私は試していませんが)]

(カーネルソースから抜きだした)より詳細なコマンドラインのパラメーターに ついては PARAMS.DOC にあります。


2.4.2.2. 簡単なヘルプ

  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


2.4.2.4. フロッピーとラムディスク

もし 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 をインストールす れば自動的に組みこまれます。


2.4.2.5. システムの制約

  1. 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 と上位メモ リに読みこまれるドライバ用のデータ領域として、多分十分でしょう。

  2. DOS プログラムはいわゆるリアルモード(あるいは 386 以上のマシンでは 仮想 86 モード)でのみ稼働します。

    一方、Linux はプロテクトモードで動き、カーネルは特権レベル 0(P0, スー パーバイザーモード)に入れなくてはなりません。ところが、(DPMI の場合の ように) V86 モードのサーバーが許可しなければ、V86 モードからプロテクト モード(P0)へスイッチすることはできません。

    このため、

    • EMS ドライバで VCPI サーバーを利用する(これでも WINDOWS は使えません)

    必要があります。EMM386 を使っている場合、NOVCI オプションは使わないで ください。NOEMS は使っても大丈夫です。

    VCPI は P0 モードも利用でき、ほとんどの EMS ドライバでもサポートされて います(もし EMS が使えるならば)が、MS-WINDOWS の元では利用できません (MICROSOFT はユーザーが P0 モードを使うことを嫌っています)。

    物理メモリと仮想メモリのマッピングも最初の 640K のRAM 領域 では同一で ある必要があります。普通はそうなっているはずですが、EMS ドライバに以下 のようなオプションを与えることで、強制的にこのように設定することができ ます。
       EXCLUDE=1000-A000     (386MAX 用)
    あるいは
       B=A000                (EMM386.EXE 用。たいていの場合は不要です)
    詳しくは EMS ドライバのマニュアルを見てください。でも、もし何か忘れて いても LOADLIN が指摘してくれるのでご心配なく。

    注意: 特に何メガバイトもメモリをつんでいるシステムの場合、プロテクトモードに 移行する前に VCPI サーバーがガーベッジコレクションを始めて、しばらく時 間がかかることもありますが、しんぼう強く待ってやってください。

  3. もちろん LOADLIN を Linux の DOSEMU から使うことはできません。例え 実行したところで、幸いなことに DOSEMU 自身が V86 チェック・インストラ クション(IOPL の変更)のために general protection fault を起して終了し てしまいます。ですから、ファイルシステムには影響しません。しかし、 Linux の DOSEMU でWINDOWS 3.0 を動かし、その DOS prompt から LOADLIN を使ったときは(...うぎゃ..)、、DOS-FAT に何が起るかわかりません。


2.4.2.6. カーネルへのパッチ?

現時点(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 が実際 に受けとったコマンドライン・パラメータを表示させることができます。


2.4.3. CONFIG.SYS からの起動

DOS のバージョン 6.0 からは MSDOS の起動時に異なる設定で起動することが 可能になりました。これは CONFIG.SYS を解釈する時に行なわれますので、 LOADLIN/LOADLINX/Linux を設定するにも便利です。

たとえ DOS をブートしたとしても、後から DOS のコマンドライン、あるいは バッチファイルから Linux を起動することも可能です。


2.4.3.1. CONFIG.SYS の例

  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   ここから先にはその他の「一般的な」設定をします。


2.5. LOADLIN のコマンドラインパラメータ

もしパラメータファイルを使うなら(例えば @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 ファイルには記述しないこと!


2.6. 問題が起れば

私はいくつかのフィードバックを受けて 1.2 を 1.3 にバージョンアップし、 より徹底的なエラーチェック機能を付けました。いくつかのバグも見つかり、 修正しました。しかし、何千もの可能性がありうる PC のハードウェア/ソフ トウェアの組み合せの元では、完璧にバグを無くすことは不可能でしょう。で すから、あなたの直面した問題についてぜひとも私にフィードバックしてくだ さい。

もしバグに気づいたら、それに時間を費すことはせず、私あてに mail してく ださい!

しかし、問題をレポートしていただく際には詳しい情報が必要です。「私のス クリーンは真っ青になってしまいますが、何が悪いのでしょう?」だけでは十 分ではありません。

-d か -t オプションを使えば、LOADLIN は私(あなたにも)に有益な情報を示 してくれます。


2.6.2. 典型的なトラブルの例その 2

   C:\LOADLIN>loadlin zimage root=/dev/sda1 ro mem=0xFF0000
カーネルはロードする(LOADING....)が、Linux は "<2M RMA system halted" のメッセージとともに "パニック" して、ハードリセットするしかない。

間違いをチェックするために以下のように入力します。
  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
  ..
  ..
これは LOADLIN のバグかも知れません。なぜなら、"mem=0xFF0000" は コマンドラインの "BOOT_IMAGE=zimage" 以前に現われないといけないからで す。

何が起ったかについて私にメールしてください。メールには "report.dmp" ファ イルと CONFIG.SYS を含めておいてください。そうしていただければ、どこが 間違っているかをチェックできます。


2.6.3. デバイスファイルのマイナー番号についての混乱

以下に示すものはデバイスファイルのマイナー番号についての問題を示すもの です。

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 進数と解釈されます。

もしそれ以外の文字列ならば、そのままコマンドラインに渡されます(より新 しいバージョンのカーネルはもっと違うデバイス名を持っているかも知れませ んから)


2.6.4. ある種の DOS のメモリマネージャーやデバイスドライバに関する問題

LOADLIN がカーネルイメージをロードして、Linux へ制御を渡す前にどちらか 条件が必要です。

  1. Linux がプロテクトモードに切り替る寸前にセットアップコードに割りこ む(Javier 法を使って)機会があること

  2. あるいは割り込みベクター(といくつかの BIOS データ)を "起動時の" 状 態を模倣するために修正すること

a) のためには 0.99pl14 以上のカーネルが必要です。setup.dif パッチをあ てる方がいいでしょう(このパッチを Linus に送って公式のカーネルに採用し てもらうことを希望しています)。まず始めに Javier 法を試してみるべきで す。この方法はほとんど全てのマシンや設定で動くはずです。この方法を使え ば、DOS 用にどんな事前の設定も必要ありません。特にもう一度、以前から LOADLIN の古いバージョンを使っていた人に注意します。

Javier 法を使うためには、設定から BIOSINTV/REALBIOS を外すか LODLIN に -ja オプションを付ける必要があります!

Javier 法でうまく行かない場合、b) の方法を試してみてください。b) の方 法を試すには、CONFIG.SYS の最初に次の一行を加えてください。
  DEVICE=C:\LOADLIN\BIOSINTV.SYS
このドライバは、割り込みベクター用にデフォルトの BIOS 値を保存します。 約 700 バイトほどのプログラムなので、コンベンショナルメモリー(low memory)をほとんど消費しないでしょう。BIOSINTV.SYS はどんなメモリマネー ジャーを使う場合でも、DOS の上部メモリにロードしてはいけません。

もし、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

REALBIOS.EXE があなたのマシンに作るファイルが REALBION.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 を作ったマシンでのみ使ってください。

ところで:多分 PS2 では拡張 BIOS データで問題が起きるはずです。すみませ んが、この問題については、私にはテストするすべがありません。


2.6.4.1. REALBIOS.INT の作り方


2.6.4.2. REALBIOS.INT の使い方

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" オプションを使って日付のチェックをスキップしてく ださい。


2.6.5. デバッグ情報(-v,-t,-d)に関する説明

-v,-t,-d オプションの情報は、ブートセクターとセットアッププログラムが ロードされて LODADLIN によって更新された時点で出力されます。出力される 情報は Linux から見えるものですが、-t と -d オプションの場合、zimage ファイルはロードされず、linux は起動しません。

説明:


2.7. UMSDOS システムをブートするためのプリプロセッサ LOADLINX

このプログラムは 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 のドライブ名の変換をバイパスす ることができます。


2.9. 協力者と謝辞

このプログラムは 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 で問題は起らなかったけど、私のもとに "動いたよ" とメール してくれた全ての人に感謝します(肯定的なフィードバックは最善のものです)


Chapter 3. PARAMS.DOC

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)


3.1. loadlin のコマンドパラメタ

以下に示すものは認識されるコマンドラインパラメータです。

  1. LOADLIN が解釈するもの
      ramdisk=size        (ramdisk のサイズ(KBytes))
      or
      ramdisk=size,no     (上と同じですが、ディスクを変えるように、
                                とのプロンプトは出ません)
      例:  ramdisk=1440,no
    
            vga=mode

  2. Linux のカーネルが解釈するもの
      mem=number       (0.99pl15 以上では物理的なメモリの終り)
      root=device
      ro
      rw
      no387
      debug            コンソールに出力されるログレベルを 10 にセット
      no-hlt           起動時の HLT チェックを中止

  3. init が解釈するもの
      single
      auto
      ro,rw,no387   (カーネルから渡される)

  4. 各種のドライバが解釈するもの
      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

  5. 環境変数になるもの

    name=xxxx の形式になっているパラメータで、カーネルにもドライバにも認識 されないものは環境変数に登録されます。

    LOADLIN 自身は BOOT_IMAGE=imagefile を環境変数に登録します。ユーザー自 身でその他の環境変数を利用して /etc/rc などで条件に合せた動作をさせる ことが可能です。


3.2. コマンドパラメタの詳細

以下に示すものはより詳細な説明です:


Chapter 4. QUICKSTA.RT

Quickstart for LOADLIN-1.5

LOADLIN のバージョン 1.5 は(それ以前のバージョンとは異なり)、たいてい 特別の設定は不要で、ALPHA テスターからは十分安定している、と報告されて います。だから、必要なものは、

これらのファイルを DOS のパーティション(例えば C:\LOADLIN)にコピーしま す。2 つのファイルは同じディレクトリに置いてください。さもないと LOADLINX が LOADLIN を見つけられません。

Linux を起動するためには"/vmlinuz" や "/usr/src/zImage" などの圧縮され たカーネルイメージが必要です。Slackware では、あなたが手に入れた ftp サイトの ..../slackware/kernels のディレクトリに(bare, scsi, modern 等 の)多くのカーネルが用意されています。

カーネルイメージも DOS パーティション(例えば C:\)にコピーします。

dos プロンプトから起動するには:

  1. Linux のパーティション(ext2, minix, ...)をルートディレクトリとし てマウントするには、
      loadlin c:\vmlinuz root=/dev/hdb2 ro
                                        ==

  2. UMSDOS ファイルシステムをルートディレクトリにするには、
      loadlin c:\vmlinuz root=/dev/hda1 rw
                                        ==
         or
    
      loadlinX c:\vmlinuz root=c: rw
    とします。

  3. SlackWare がインストールされた A ドライブ にあるルートフロッピー からブートしてカーネルイメージはハードディスク上にある場合、
       
      loadlinX c:bare root=a: rw ramdisk=1440,no
    SlackWare がインストールされたルートフロッピーが B ドライブにあり、 カーネルイメージの入った DOS フロッピーが A ドライブにある場合、
      loadlinX a:scsi root=b: rw ramdisk=1440,no
    SlackWare がインストールされたルートフロッピーが A ドライブ、カー ネルイメージの入った DOS フロッピー*も* A ドライブにある場合、
      loadlinX a:modern root=a: rw ramdisk=1440
    (LOADLIN はカーネルをロード後、フロッピーを交換するように示します)

注記: どのルートパーティションを使うかは知っておく必要があります。上の /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 のパーティションかは 'fdisk -l' で確認できま す。

次に、カーネルを DOS のパーティション上にコピーします。
  cp /vmlinuz /mnt/vmlinuz
DOS を起動して、lodlin15.zip を unzip します。
  unzip -d lodlin15.zip

  or:  

  pkunzip -d lodlin15.zip
そして、C:\LOADLIN(あるいはあなたの決めた場所) にあるドキュメントを読 みます。それらは loadlin の作者自身が書いているので、私がどうこう言う よりも有益でしょう :^)

ここまで来れば loadlin.exe を使って Linux パーティションを起動するのは、
  loadlin c:\vmlinuz root=/dev/hdb3 ro
とするだけです。

もし UMSDOS を使っていれば、このようにします:
  loadlinx c:\vmlinuz root=c: rw
繰りかえしますが、全てのオプションに対する詳細については LOADLIN 附属 のドキュメントを見てください。それらには、私が見たなかでは最も完璧な起 動時にカーネルに渡されるオプションのリストも入っています :^)

それでは、Good luck

Patrick Volkerding (訳注:Slackware の作者です)
volkerdi@mhd1.moorhead.msus.edu

日本語訳:小島 三弘
kojima@komae.denken.or.jp


Chapter 5. 日本語訳について

配布形態に関するお問い合わせなどは 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)

Notes

[1]

この LOADLIN のドキュメントも長すぎますよね!