The Linux BootPrompt-HowTo by Paul Gortmaker. v1.2, May 15, 1999 堀江誠一と JF プロジェクト v1.2j, November 15, 1999 この BootPrompt-HOWTO は、Linux カーネルに起動時に引き渡すことのできる すべての起動時引数をまとめたものです。この文書には、カーネルおよびデバ イスのためのすべての引数を集めました。カーネルが起動時引数をどのように 扱うかとか、おなじみの Linux 起動ソフトウェアについてもここで述べま す。 ______________________________________________________________________ 目次 1. 始めに 1.1 免責、および著作権について 1.2 想定している読者と適用できる分野 1.3 関連文書 1.4 Linux 関連ニュースグループ 1.5 この文書の最新版の入手方法 2. 起動時引数の概要 2.1 LILO (LInux LOader) 2.2 LoadLin 2.3 The ``rdev'' ユーティリティ 2.4 カーネルによる引数の分類方法 2.5 環境変数の設定 2.6 `init' プログラムへの引数の引渡し 3. 一般的なデバイス非依存の起動時引数 3.1 ルートファイルシステムのオプション 3.1.1 `root=' 引数 3.1.2 `ro' 引数 3.1.3 `rw' 引数 3.2 RAM ディスク管理に関係するオプション 3.2.1 `ramdisk_start=' 引数 3.2.2 `load_ramdisk=' 引数 3.2.3 `prompt_ramdisk=' 引数 3.2.4 `ramdisk_size=' 引数 3.2.5 `ramdisk=' 引数 (廃止) 3.2.6 `noinitrd' (初期 RAM ディスク) 引数 3.3 メモリの取り扱いに関する起動時引数 3.3.1 `mem=' 引数 3.3.2 `swap=' 引数 3.3.3 `buff=' 引数 3.4 NFS ルートファイルシステムに関する起動時引数 3.4.1 `nfsroot=' 引数 3.4.2 `nfsaddrs=' 引数 3.5 その他のカーネル起動時引数 3.5.1 `debug' 引数 3.5.2 `init=' 引数 3.5.3 `kbd-reset' 引数 3.5.4 `maxcpus=' 引数 3.5.5 `mca-pentium' 引数 3.5.6 `md=' 引数 3.5.7 `no387' 引数 3.5.8 `no-hlt' 引数 3.5.9 `no-scroll' 引数 3.5.10 `noapic' 引数 3.5.11 `nosmp' 引数 3.5.12 `panic=' 引数 3.5.13 `pci=' 引数 3.5.14 `pirq=' 引数 3.5.15 `profile=' 引数 3.5.16 `reboot=' 引数 3.5.17 `reserve=' 引数 3.5.18 `vga=' 引数 4. PCI バスの動作を制御する起動時引数 (`pci=') 4.1 `pci=bios' 引数と `pci=nobios' 引数 4.2 `pci=conf1' 引数と `pci=conf2' 引数 4.3 `pci=io=' 引数 4.4 `pci=nopeer' 引数 4.5 `pci=nosort' 引数 4.6 `pci=off' 引数 4.7 `pci=reverse' 引数 5. ビデオフレームバッファドライバ用の起動時引数 5.1 `video=map:...' 引数 5.2 `video=scrollback:...' 引数 5.3 `video=vc:...' 引数 6. SCSI 機器用の起動時引数 6.1 中位のドライバのための引数 6.1.1 LUN の最大検出数 (`max_scsi_luns=') 6.1.2 SCSI ロギング (`scsi_logging=') 6.2 SCSI ホストアダプタ用の引数 6.2.1 Adaptec aha151x, aha152x, aic6260, aic6360, SB16-SCSI (`aha152x=') 6.2.2 Adaptec aha154x (`aha1542=') 6.2.3 Adaptec aha274x, aha284x, aic7xxx (`aic7xxx=') 6.2.4 AdvanSys SCSI ホストアダプタ (`advansys=') 6.2.5 Always IN2000 ホストアダプタ (`in2000=') 6.2.6 AMD AM53C974 ベースのハードウェア (`AM53C974=') 6.2.7 v1.2 カーネル用 BusLogic SCSI ホストドライバ (`buslogic=') 6.2.8 v2.x カーネル用 BusLogic SCSI ホストドライバ (`BusLogic=') 6.2.9 EATA SCSI カード (`eata=') 6.2.10 Future Domain TMC-8xx, TMC-950 (`tmc8xx=') 6.2.11 Future Domain TMC-16xx, TMC-3260, AHA-2920 (`fdomain=') 6.2.12 IOMEGA パラレルポート / ZIP ドライブ (`ppa=') 6.2.13 NCR5380 ベースのコントローラ (`ncr5380=') 6.2.14 NCR53c400 ベースのコントローラ (`ncr53c400=') 6.2.15 NCR53c406a ベースのコントローラ (`ncr53c406a=') 6.2.16 Pro Audio Spectrum (`pas16=') 6.2.17 Seagate ST-0x (`st0x=') 6.2.18 Trantor T128 (`t128=') 6.2.19 Ultrastor SCSI カード (`u14-34f=') 6.2.20 Western Digital WD7000 カード (`wd7000=') 6.3 起動時引数を取らない SCSI ホストアダプタ 7. ハードディスク 7.1 IDE ディスク/IDE CD-ROM ドライバの引数 7.2 標準 ST-506 ディスクドライブ用の引数 (`hd=') 7.3 XT ディスクドライバのオプション (`xd=') 8. CD-ROM (非 SCSI/ATAPI/IDE) 8.1 Aztech インターフェース (`aztcd=') 8.2 CDU-31A および CDU-33A Sony インタフェース (`cdu31a=') 8.3 CDU-535 Sony インタフェース (`sonycd535=') 8.4 GoldStar インタフェース (`gscd=') 8.5 ISP16 インタフェース (`isp16=') 8.6 Mitsumi 標準インタフェース(`mcd=') 8.7 Mitsumi XA/マルチセッションインターフェース (`mcdx=') 8.8 Optics Storage インタフェース(`optcd=') 8.9 Phillips CM206 インタフェース (`cm206=') 8.10 Sanyo インタフェース(`sjcd=') 8.11 SoundBlaster Pro インタフェース(`sbpcd=') 9. シリアルドライバと ISDN ドライバ 9.1 ICN ISDN ドライバ (`icn=') 9.2 PCBIT ISDN ドライバ (`pcbit=') 9.3 Teles ISDN ドライバ (`teles=') 9.4 DigiBoard ドライバ (`digi=') 9.5 RISCom/8 マルチポートシリアルドライバ (`riscom8=') 9.6 Baycom シリアル・パラレル無線モデム (`baycom=') 10. 他のハードウェアデバイス 10.1 イーサネットデバイス (`ether=') 10.2 フロッピーディスクドライバ (`floppy=') 10.3 サウンドドライバ (`sound=') 10.4 バスマウスドライバ (`bmouse=') 10.5 MS バスマウスドライバ(`msmouse=') 10.6 プリンタドライバ (`lp=') 11. 著作権、翻訳、結びの言葉など 11.1 著作権と免責事項 11.2 終わりに 11.3 日本語訳について ______________________________________________________________________ 1. 始めに 通常のプログラムが引数リストを受け取れるように、カーネルにも制限付きで はありますが起動時に「コマンドライン」としていくらかの情報を受け取る機 能があります。普通は、こういった機能はカーネル自身が検出することのでき ないハードウェア情報を渡すことに使われたり、カーネルによる検出を押さえ たり、あるいは検出した情報を書き換えるのに使用されます。 しかし、単にカーネルをフロッピーに(例えば cp zImage /dev/fd0 で) コピ ーしてしまうと、カーネルに引数を与えられません。そこで、ほとんどの Linux 利用者は LILO や loadlin といったソフトを使って、引数をカーネル に渡した後に起動を行います。 この文書は、現在の版では v2.2.9 までのカーネルについて記述しています。 また、 v2.3.2 までの開発・試験カーネルに固有の機能については、一部対応 しています。 BootPrompt-HOWTO は、 Paul Gortmaker, p_gortmaker@yahoo.com が書きました。 1.1. 免責、および著作権について この文書は Paul Gortmaker の著作物です(Copyright (c) 1995-1999)。この 文書の末尾にある免責と著作権に関する情報 (``copyright'')を見て、この文 書の再配布に関する情報と、お約束の「あなたが何か損害を受けても我々の責 任ではありません…」といった種類の法的事項に関する情報を確認してくださ い。 1.2. 想定している読者と適用できる分野 ほとんどの Linux ユーザはこの文書を見る必要さえないはずです。 Linux は ほとんどのハードウェアを非常にうまく検出し、ほとんどのパラメータに適切 なデフォルト値を設定してくれます。この文書に書かれている情報は、特定の マシン向けにカーネルを最適化するためにデフォルト設定をいくらか変えたい と思っているユーザや、あまり一般的でなく現時点では自動検出ができないハ ードウェアをサポートするために独自のカーネルを作っている人のためのもの です。 重要な注意: ドライバ関連の起動時引数は、直接カーネルに組み込まれたドラ イバにしか適用されません。つまりモジュールとしてロードされたカーネルに 対しては無効です。ほとんどの Linux ディストリビューションに付属してい る基本カーネルは「骨と皮」だけであり、ドライバはカーネルが初期化された 後にロードされる小さなモジュールの集まりになっています。モジュールを 使っているかどうかがよくわからなければ、 man depmod と man modprobe の オンラインマニュアルと /etc/conf.modules ファイルの内容を合わせてみて ください。 1.3. 関連文書 カーネルソースこそが常に最新の情報です。ちょっと待った。そこでおじけづ かないでください。ソースファイルのコメントを読むのに、プログラミングの 知識は不要です。例えば、AHA1542 SCSI ドライバにどんな引数を渡せるのか 知りたければ、linux/drivers/scsi ディレクトリに移動して、 aha1542.c を 見ましょう。そして、先頭の 100 行ほどの部分に簡単な英語で書かれている 1542 ドライバ用の引数の説明を読めばいいのです。 linux ディレクトリは大抵のディストリビューションでは普通、 /usr/src/ にあります。本文書では、カーネル付属の文書への参照は、パス名を linux と省略します。したがって linux の前には /usr/src/ や、お使いのシステム に合ったパス名を加えなければなりません。(ファイルのある場所が分からな ければ、find コマンドか locate コマンドを使ってください。) 次善の文書はカーネルといっしょに配布されている文書類です。現在は少なく ない数のファイルがあり、そのほとんどは linux/Documentation ディレクト リとそのサブディレクトリにあります。README.foo といった名前のファイル が関連するドライバのディレクトリにあることもあります(例: linux/drivers/???/, ここで ??? は scsi, char, net など)。 どの起動時引数を使えばよいかが分かり、次にこれをどうやってカーネルに渡 せばいいかが知りたくなったら、あなたがお使いになっているカーネル起動ソ フトウェア(例: LILO や loadlin )に付属している文書を参照してください。 以下でも簡単に説明しますが、起動ソフトウェア付属の文書に代わりうるもの ではありません。 1.4. Linux 関連ニュースグループ カーネルに渡す起動時パラメータに関して疑問がある場合、まずはこの文書を 読んでください。この文書やすでに紹介した関連文書があなたの疑問に答えら れない場合は、Linux ニュースグループで質問するとよいでしょう。システム の設定方法に関する一般的な質問は、comp.os.linux.setup に出すべきです。 ここに挙げた一般的な方針を守り、他のニュースグループへ多重投稿しないよ う、お願いします。 もちろん、何も考えないで質問を出すのではなく、ニュースグループをよく チェックすべきでしょう。というのも、あなたの質問はよくある質問 (Frequently Asked Question, FAQ)かもしれないからです。質問の前に Linux FAQ にざっと目を通しておくのは良いことです。また、あなたがこの文書を入 手した場所の近くにも、FAQ があるはずです。あなたの質問が FAQ でなけれ ば、http://www.dejanews.com のようなニュースグループのアーカイブを使っ てここ数年の投稿を簡単に調べ、あなたの質問を投稿すべきどうかを確認して ください。あなたが抱えている疑問について誰か別の人が質問している(そし て誰かが回答している!)可能性があります。 1.5. この文書の最新版の入手方法 この文書の新版は、Linux 関係の FTP サイトの /pub/Linux/docs/HOWTOディ レクトリから anonymous FTP を使用して入手できます。新しい情報が入った り、新しいドライバができたりしたときに、更新を行います。今、あなたが読 んでいるこの文書が 6 ヶ月前のものでしたら、新しい版がないかどうかを調 べるべきでしょう。筆者はこの文書は WWW ブラウザで読む か、PostScript/DVI 形式で読むことをお勧めします。これらの形式は、単純 なテキストファイルでは欠落してしまう相互参照を利用できるからです。 正式な版が欲しければ、以下の URL から入手してください。 BootPrompt-HOWTO (訳注: 日本語版の正式 URL は です。) 2. 起動時引数の概要 この節ではカーネルに対して起動時引数を渡すことのできるソフトの例をいく つか紹介します。また、どのように引数が処理されるのか、起動時引数にはど のような制限があるのか、引数がどのようにしてしかるべきデバイスに渡され るのかも説明します。 起動時引数では空白を使ってはならず、空白は各々の引数を分けるためだけに 使う点を肝に命じておいてください。ある一つの引数に値のリストを渡す時に は、値はコンマで区切ります。くどいようですが、空白ではありません。以下 の例を見てください。 ______________________________________________________________________ ether=9,0x300,0xd0000,0xd4000,eth0 root=/dev/hda1 *正しい* ether = 9, 0x300, 0xd0000, 0xd4000, eth0 root = /dev/hda1 *誤り* ______________________________________________________________________ 一度 Linux カーネルが起動し、動作していれば、起動時に指定されたコマン ドライン引数は単に cat /proc/cmdline をシェルプロンプトで実行するだけ で見ることができます。 2.1. LILO (LInux LOader) Werner Almesberger による LILO (LInux LOader)プログラムは、もっともよ く使われている起動プログラムです。このプログラムは様々なカーネルを起動 でき、設定情報をテキストファイルで持っています。ほとんどの Linux の配 布は、デフォルトの起動プログラムとして LILO を使っています。LILO は DOS、 OS/2、Linux、FreeBSD などを起動できます。ぜんぜん難しい点はな く、非常に柔軟です。 よく見る設定は、コンピュータを起動した直後に LILO が 「LILO:」というプ ロンプトを出して停止するものです。その後数秒間、利用者からの入力を待 ち、入力が無ければデフォルト指定されたシステムを起動します。よく使われ ているシステムラベルとしては、Linux, backup, msdos などがあります。起 動時引数を与えたいときには、ここで入力します。引数を入力する位置 は、LILO に起動させるシステムのシステムラベルの後ろです。以下の例を見 てください。 ______________________________________________________________________ LILO: linux root=/dev/hda1 ______________________________________________________________________ LILO には良くできた文書がついています。また、ここで説明する起動時引数 に関しては、引数を LILO の設定ファイルに追加するための append= コマン ドが特に重要です。使い方は、/etc/lilo.conf ファイルに append = "foo=bar" といった行を単に追加するだけです。この行をファイルの先頭に置 くと設定ファイルの全ての節に適用できますし、 image= 節の内側に書けば一 つの節だけに適用できます。より詳細な解説については、LILO の文書を参照 してください。 2.2. LoadLin 他によく使われる Linux 起動プログラムとしては、`LoadLin' があります。 これは DOS のプログラムであり、必要な資源がそろっているものと仮定し て、DOS プロンプトから(起動時引数つきで) Linux カーネルを起動します。 これは、 DOS から Linux を起動したい人にとって便利です。 また、LoadLin はメーカーが提供している DOS ドライバを使って特定の状態 に設定しなければならないハードウェアを持っているときにも便利です。よく ある例としては、DOS ドライバを使って特定のレジスターをいじらないと SB 互換にならない 「SoundBlaster 互換」カードがあります。DOS で起動してメ ーカー提供のドライバを使用し、その後で LOADLIN.EXE を使って DOS プロン プトから Linux を起動すれば、再起動によってカードが初期状態に戻ること を防げます。この結果、カードは SB 互換モードにとどまり、Linux で使用で きます。 この他にも、Linux を起動するプログラムがいくつかあります。全てのプログ ラムを見たいなら、お近くの Linux 関連 FTP ミラーサイト に行って、 system/Linux-boot/ ディレクトリを覗いてください。 2.3. The ``rdev'' ユーティリティ カーネル起動時引数には、カーネルイメージ自身の中にデフォルト値を持って いるものがあります。ほとんどのシステムには rdev と呼ばれるソフトがあ り、これはカーネル内のデフォルト値の置き場所と、値の変更方法を知ってい ます。また、デフォルトのビデオモードのように、対応するカーネル起動時引 数がないものも変更できます。 rdev は普通は swapdev, ramsize, vidmode, rootflags のような別名を持っ ています。これら 5 つは rdev で変更できる設定です。つまり swap デバイ ス、RAM disk 引数、デフォルトのビデオモード、root デバイスの読み出し専 用/読み書き両用の設定を変更できます。 rdev に関する詳しい情報については、rdev -h を実行するか、付属の man ペ ージを見てください(man rdev)。 2.4. カーネルによる引数の分類方法 ほとんどの起動時引数は次のような形式です: ______________________________________________________________________ name[=value_1][,value_2]...[,value_11] ______________________________________________________________________ ここで、"name" は、その後ろに続く値が(もしあれば)カーネルのどの部分に 適用されるかを表す一意なキーワードです。起動時引数を複数与えるには、上 の形式の引数を単に空白で区切って与えます。付け加えておきますと、11 個 の制限は本当にある点に注意してください。というのも、現在のコードはコン マで区切られた引数を 1 キーワードあたり 11 個しか取り扱えないからで す。(しかし、ほとんどないような複雑な状況の場合には、同じキーワードを もう一度使うことによって、もう 11 個まで引数を追加できます。ただ し、setup 関数がこれを許すと仮定してですが)。もうひとつ付け加えると、 カーネルはこのリストを最大 10 個までのコンマで区切られた整数型引数と、 残りの文字列という形に分割してしまいます。したがって、ドライバが 11 番 目の引数を自分で文字列から整数に変換しない限り、11 個の整数を引数とし て渡すことはできません。 分類は大部分 linux/init/main.c で行われます。最初に、カーネルは引数が 次の特別な引数のうちのどれかに当たらないか調べます。特別な引数は "root=", "ro", "rw", "debug" です。これらの特別な引数の意味は後で説明 します。 それから、カーネルは setup 関数(bootsetups 配列 に入っています) を見 て、与えられた引数文字列 (例えば "foo" としましょう) がカーネルの特定 の場所や何らかのデバイスの setup 関数(foo_setup()) と関連付けられてい ないかを調べます。例えばカーネルに foo=3,4,5,6,bar という引数を与えた とすると、カーネルは bootsetups 配列を見て "foo" が登録されていないか どうか調べます。これが登録されていると、カーネルは "foo" と関連付けら れている setup 関数(foo_setup())を呼び出して、コマンドラインで与えられ た整数型引数 3、4、5、6 と文字列型引数 bar を与えます。 2.5. 環境変数の設定 "foo=bar" という形式を持っており、前述のように setup 関数に受け付けら れなかった引数は、設定すべき環境変数と解釈されます。例えば、TERM=vt100 や BOOT_IMAGE=vmlinuz.bak を起動時引数として渡すことが考えられます。こ ういった環境変数は普通、初期化スクリプトで調べられ、さまざまな設定を有 効または無効にするために使われます。 2.6. `init' プログラムへの引数の引渡し カーネルに受け入れられず、環境変数とも解釈されなかった引数は全てプロセ ス 1 に引き渡されます。プロセス 1 は普通 init プログラムです。プロセス 1 に渡される引数のうち最も一般的なのは、single です。この引数は init に対してシステムをシングルユーザモードで起動し、普通起動するデーモンを 一切起動しないよう指示します。どのような引数が許されるかは、お使いのシ ステムに導入されている init の man ページを参照してください。 3. 一般的なデバイス非依存の起動時引数 デバイスやペリフェラルに依存しない引数もあります。これらはデバイス等で はなく、特定の内部カーネルパラメータに関連しています。たとえば主記憶の 取り扱い、RAM ディスクの取り扱い、ルートファイルシステムの取り扱いなど です。 3.1. ルートファイルシステムのオプション 以下のオプションは、カーネルがどのようにルートファイルシステムを選ぶ か、また、どのように扱うかに関連しています。 3.1.1. `root=' 引数 この引数はカーネルに起動時にどのデバイスをルートファイルシステムとして 使用するかを指定します。この設定のデフォルト値は、システムのカーネルが 組み込まれていたルートデバイスです。例えば、`/dev/hda1' をルートパー ティションとして使っているシステムに問題のカーネルが 組み込まれていた なら、デフォルトのルートデバイスは、`/dev/hda1' です。このデフォルト値 ではなく 2 番目のフロッピーをルートデバイスとして使用するときには `root=/dev/fd1" を使用してください。 以下に有効なルートデバイスを示します: (1) /dev/hdaN から /dev/hddN: これは ST-506 互換ディスク a から d のパ ーティション N である。 (2) /dev/sdaN から /dev/sdeN: これは SCSI 互換ディスク a から e のパー ティション N である。 (3) /dev/xdaN から /dev/xdbN: これは XT 互換ディスク a から b のパー ティション N である。 (4) /dev/fdN: これは番号 N のフロッピードライブである。 N=0 なら DOS の A: ドライブで、N=1 なら B: ドライブとなる。 (5) /dev/nfs: これは実際はデバイスではなく、ネットワークからルートファ イルシステムを持ってくるようカーネルに指示するためのフラグである。 不細工で可搬性に欠けますが、上に挙げた有効なディスクデバイスをメジャー /マイナー番号で指定する方法も許されています(例えば /dev/sda3 はメジャ ー番号 8、マイナー番号 3 なので、root=0x803 とも指定できます)。 root= は、カーネル内部にデフォルト値がある起動時引数の一つです。した がって、この値は rdev ユーティリティ で変更できます。 3.1.2. `ro' 引数 カーネルの起動時、基本的な部分を読み込むためのルートファイルシステムが 必要になります。これが起動時にマウントされるルートファイルシステムで す。しかし、このファイルシステムが読み書き可能な状態でマウントされてい ると、書き込み途中のファイルがあるためにファイルシステムの一貫性を確実 に調べられません。`ro'オプションは、カーネルに対してルートファイルシス テムを「読み取り専用」でマウントするよう指示しますので、ファイルの一貫 性を調べるプログラム (fsck) は調査中に書き込み途中のプログラムがないも のと仮定して安全に動作できます。当該ファイルシステムは、読み書き可能を 指定して再マウントされるまで、どんなプログラムやプロセスからも書き込み できません。 `ro=' は、カーネル内部にデフォルト値がある起動時引数の一つです。した がって、この値は rdev ユーティリティで変更できます。 3.1.3. `rw' 引数 これは上で説明したものとは正反対で、カーネルにルートファイルシステムを 読み書き可能としてマウントすることを指示します。ただし、デフォルトの動 作ではいずれにせよルートファイルシステムは読み書き可能でマウントされま す。読み書き可能でマウントされているファイルシステムに "fsck" の類を適 用してはいけません。 上の節で説明したカーネルイメージの中の値が、このパラメータでも使用され ています。したがって、rdev を使用して変更できます。 3.2. RAM ディスク管理に関係するオプション 以下のオプションは、すべてカーネルが RAM ディスクをどのように扱うかを 指定します。RAM ディスクは普通、インストール時のマシンの起動に用いられ たり、ルートファイルシステムを読み書きするのにモジュール化されたドライ バを必要とするマシンで使用されます。 3.2.1. `ramdisk_start=' 引数 カーネルイメージをフロッピーディスクに置いて圧縮 ramdisk イメージとと もに配置するために、"ramdisk_start=" コマンドが追加されまし た。圧縮された ramdisk ファイルシステムのイメージにカーネルを含めるこ とはできません。というのは、BIOS にブートセクターを読ませてカーネル自 身を起動するには、ブロック 0 からの位置に配置しないといけないからで す。 注意: 非圧縮の ramdisk イメージを使用する場合には、カーネルを ramdisk に読み込むファイルシステムイメージの一部としておき、LILO を使ってフ ロッピーから起動できます。あるいは、イメージを圧縮イメージの時と同じよ うに 2 つに分けておくこともできます。 起動ディスクとルートディスクの 2 枚を使う構成(ディスク 1 にカーネル、 ディスク 2 に ramdisk イメージ)をとる場合には、ramdisk はブロック 0 に 配置し、オフセットとして 0 を指定します。これはデフォルト値なので、実 際にはこのような指定をする必要はありません。 3.2.2. `load_ramdisk=' 引数 この引数はカーネルに ramdisk イメージを読み込むか読み込まないかを指示 します。"load_ramdisk=1" を指定すると、カーネルはフロッピーを ramdisk に読み込みます。デフォルト値は 0 であり、カーネルは ramdisk イメージを 読み込みません。 最新の起動時引数とその使用方法については、 linux/Documentation/ramdisk.txt を参照してください。`rdev' を使ってこ の引数をカーネルイメージに設定する方法は、ここに書いてあります。 3.2.3. `prompt_ramdisk=' 引数 このパラメータは、ramdisk イメージが入ったフロッピーの挿入を求めるプロ ンプトをユーザに出すかどうかをカーネルに指定します。フロッピー 1 枚の 構成であれば、ramdisk イメージはロード/起動用のカーネルが入っているの と同じフロッピーに入っていますから、プロンプトは不要です。この場合 は、"prompt_ramdisk=0" とします。フロッピー 2 枚の構成であれば、フロッ ピーを差し替える操作が必要です。ですから、 "prompt_ramdisk=1" としま す。これはデフォルト値なので、実際には指定する必要はありません(歴史的 経緯に関する注釈: 悪知恵の働く人たちは、ブートプロセスを一時的に止め、 ブートフロッピーをルートフロッピーに差し替えられるようにするために LILO の "vga=ask" オプションを使っていました)。 最新の起動時引数とその使用方法については、 linux/Documentation/ramdisk.txt を参照してください。"rdev" を使ってこ の引数をカーネルイメージに設定する方法についてもここに書いてあります。 3.2.4. `ramdisk_size=' 引数 ramdisk は要求に応じて動的に大きくなっていきますから、大きさの上限が設 けられています。このおかげで、有効な RAM を全部使い切って、利用者がわ けのわからない災難に遭うことがないようになっています。デフォルトの上限 は 4096 (つまり 4MB) で、ほとんどの場合はこれで十分なはずです。 "ramdisk_size=" 起動時引数を使うと、この値を好きな値に変更することがで きます。 最新の起動時引数とその使用方法については、 linux/Documentation/ramdisk.txt を参照してください。 "rdev" を使ってこ の引数をカーネルイメージに設定する方法についても、ここに書いてありま す。 3.2.5. `ramdisk=' 引数 (廃止) (注意: この引数は廃止されているので、バージョン 1.3.47 以前のカーネル にだけ使用してください。 ramdisk デバイス用に使用すべきコマンドは先に 説明した通りです。) このオプションは、RAM ディスクデバイスの大きさを kB 単位で指定します。 例えば、1.44MB フロッピーに入っているルートファイルシステムを RAM ディ スクにロードしたければ以下のようにします。 ______________________________________________________________________ ramdisk=1440 ______________________________________________________________________ "ramdisk=" は、カーネルが内部にデフォルト値を持っている起動時引数の一 つです。したがって、この値は rdev ユーティリティで変更できます。 3.2.6. `noinitrd' (初期 RAM ディスク) 引数 バージョン 2.x 以降のカーネルが持つ機能として、ルートファイルシステム を最初は RAM ディスクに置いて、その RAM イメージ上でカーネルに /linuxrc を実行させられます。この機能が使われるのは普通、実際に使うル ートファイルシステムをマウントするために必要なモジュールをロードできる ようにする場合です(例えば、SCSI ドライバモジュールをRAM ディスクイメー ジに読み込んで、SCSI 上の実際のルートファイルシステムを読むような場合 です)。 実際の "noinitrd" 引数は、カーネルが起動した後に initrd データがどうな るのかを指示します。これが指定されると、initrd データを RAM ディスクに 移すのではなく、/dev/initrd を通して扱えるようになります。これは、RAM が解放されてシステムに返却されるまで読むことができます。 RAM ディスク の詳細については linux/Documentation/initrd.txt を参照してください。ま た、 LILO や LOADLIN の最新版にも役に立つ情報が入っているはずです。 3.3. メモリの取り扱いに関する起動時引数 以下の引数は、システムの物理および仮想メモリの Linux による検出・取り 扱いの方法を変更します。 3.3.1. `mem=' 引数 この引数には二つの目的があります。本来の目的は積んでいる主記憶の総量 (または、Linux で使える主記憶の量を制限したければ、これより小さい数)を 指定することでした。二番目の(そしてあまり使われない)目的は mem=nopentium を指定して、Linux カーネルに 4MB ページテーブル実行機能 を使わせないようにすることです。 PC の仕様における本来の BIOS 呼び出しは、組み込まれている主記憶の総量 を最大 64MB までしか報告できないよう設計されています(そう、ディスクで 起こる 1024 シリンダー問題と同種の、将来に関する洞察力の欠如です…タメ イキ)。 Linux は起動時にこの BIOS 呼び出しを用いて、積まれている主記憶 の量を調べます。もし 64MB 以上の主記憶を積んでいるならば、積まれている 主記憶の量を mem= 起動時引数を使って Linux に知らせられます。 mem= 引 数の使い方に関する Linus の言葉を引用しましょう。 「カーネルはどんな `mem=xx' 引数を指定されても受け付けます。そして指定 が間違っていることが明らかになると、遅かれ早かれクラッシュします。この 引数は利用可能な最上位の RAM アドレスを示します。ですから、例えば `mem=0x1000000' は 16MB の主記憶があるという意味です。96MB のマシンな ら、これは `mem=0x6000000' です。実際に積んでいるよりも多くの主記憶が あるように指定すると、まずいことが起こるでしょう。すぐには起きないかも しれませんが、いつか必ず起こるでしょう」 引数は必ずしも 16 進数である必要はありません。また、後ろに `k' や `M' (大文字・小文字は関係ありません)を付けることにより、キロバイト単位やメ ガバイト単位の指定がそれぞれ可能です(`k' は値を 10 ビットシフトさせ、 `M' は 20 ビットシフトさせます)。128MB のマシンでは普通、 "mem=128m" といった指定になるでしょう。 3.3.2. `swap=' 引数 この引数を使うと、ディスクへのスワッピングに関連する仮想記憶(virtual memory, VM)のパラメータを調整できます。この引数は以下の 8 つのパラメー タを受け取ります。 ______________________________________________________________________ MAX_PAGE_AGE PAGE_ADVANCE PAGE_DECLINE PAGE_INITIAL_AGE AGE_CLUSTER_FRACT AGE_CLUSTER_MIN PAGEOUT_WEIGHT BUFFEROUT_WEIGHT ______________________________________________________________________ 興味のあるハッカーは linux/mm/swap.c を読んでください。ま た、/proc/sys/vm の中ものぞいてみるといいでしょう。カーネルの linux/Documentation/vm/ ディレクトリには、これに関して役立つ文書が入っ ています。 3.3.3. `buff=' 引数 `swap=' と同様の引数です。この引数は、利用者がバッファのメモリ管理に関 するパラメータを調整することを許します。これは以下の 6 つのパラメータ を受け付けます: ______________________________________________________________________ MAX_BUFF_AGE BUFF_ADVANCE BUFF_DECLINE BUFF_INITIAL_AGE BUFFEROUT_WEIGHT BUFFERMEM_GRACE ______________________________________________________________________ 興味のあるハッカーは linux/mm/swap.c を読んでください。ま た、/proc/sys/vm の中ものぞいてみるとよいでしょう。カーネルの linux/Documentation/vm/ ディレクトリには、これに関する役に立つ文書が 入っています。 3.4. NFS ルートファイルシステムに関する起動時引数 Linux は、ルートファイルシステムを NFS (Network File System)から取得す るディスクレスワークステーションのようなシステムに対応しています。以下 の引数を用いると、ディスクレスワークステーションに対してどのマシンから システムを持ってくるのかを指示できます。引数 root=/dev/nfs が必要な点 にも注意してください。NFS ルートファイルシステムの使い方の詳しい情報 は、linux/Documentation/nfsroot.txt にあります。このファイルは読むべき です。というのも、以下の説明はこのファイルからの要約に過ぎないからで す。 3.4.1. `nfsroot=' 引数 この引数はどのマシン、どのディレクトリ、どの NFS オプションをルート ファイルシステムとして使用するのかをカーネルに指示します。この引数の書 式は以下の通りです: ______________________________________________________________________ nfsroot=[:][,] ______________________________________________________________________ nfsroot 引数がコマンドラインから与えられない場合、デフォルト値として `/tftpboot/%s' が使用されます。その他のオプションは以下の通りです: -- NFS サーバの IP アドレスを指定します。これが与えられて いない場合、デフォルト値として nfsaddrs (後述)変数が使用されます。この 引数の用途は例えば、RARP と NFS を別のサーバにする場合です。普通はこの 部分は空のままでかまいません。 -- ルートとしてマウントする、サーバ上のディレクトリの名前で す。文字列に `%s' トークンが使用されている場合、このトークンはクライア ントの IP アドレスの ASCII 文字列表現で置き換えられます。 -- 標準の NFS オプションです。全てオプションはコンマで区 切ります。このオプションが与えられない場合には、以下のデフォルト値が使 用されます: port = サーバの portmap デーモンによって与えられた値 rsize = 1024 wsize = 1024 timeo = 7 retrans = 3 acregmin = 3 acregmax = 60 acdirmin = 30 acdirmax = 60 flags = hard, nointr, noposix, cto, ac 3.4.2. `nfsaddrs=' 引数 この起動時引数はネットワーク越しに通信を行うために必要な各種ネットワー クインターフェースアドレスを設定します。この引数が与えられない場合、カ ーネルは RARP か BOOTP のいずれか、または両方を使用してこの値を得よう とします。形式は以下の通りです: ______________________________________________________________________ nfsaddrs=:::::: ______________________________________________________________________ -- クライアントの IP アドレスです。無指定の場合はアドレスが RARP か BOOTP によって決定されます。どのプロトコルが使用されるかは、カ ーネル設定の時に有効にした項目と パラメータによります。このパラ メータを指定していれば、RARP も BOOTP も使用されません。 -- NFS サーバの IP アドレスです。クライアントアドレスを決定 するのに RARP が用いられていており、かつこのパラメータが無指定ではない 場合、指定したサーバからの応答だけが受け付けられます。異なる RARP サー バおよび NFS サーバを使用したければ、ここで RARP サーバを指定(あるいは 無指定にしておいて)して、nfsroot パラメータ(前述)で NFS サーバを指定し てください。このパラメータが無指定の場合、サーバのアドレスは RARP リク エストか BOOTP リクエストに対して返答したサーバのアドレスが使用されま す。 -- サーバが違うサブネットにある時に指定するゲートウェイアドレ スです。これが無指定であり、かつこの値が BOOTP で受信されなければ、ゲ ートウェイは使用されずサーバはローカルなネットワークにあるものと仮定さ れます。 -- ローカルネットワークインターフェースのネットマスクです。 これが無指定であり、かつこの値が BOOTP によって受信されなければ、ネッ トマスクはクライアントの IP アドレスから求められます。 -- クライアントの名前です。これが無指定であれば、クライアントの IP アドレスの ASCII 表記か、BOOTP によって受信された値が使われます。 -- 使用するネットワークデバイスの名前です。これが無指定の場合に は、全てのデバイスが RARP リクエストに使用され、最初に見つかったものが BOOTP に使用されます。NFS の場合は、RARP リクエストか BOOTP リクエスト の応答を受け取ったデバイスが使用されます。デバイスが一つしかないなら、 このパラメータを無指定にしても大丈夫です。 -- 自動設定の方法を指定します。この引数が `rarp' か `bootp' の 時には、指定されたプロトコルが使用されます。値が `both' か無指定の場合 は、カーネル設定時に有効にされていれば、両者が用いられます。`none' を 指定すると、自動設定は行われません。この場合、先に説明した引数のうち必 要なものを全て自分で設定しなければなりません。 パラメータは nfsadrs 引数の値として単独で(前に `:' が付くことな く)使用できます。この場合は自動設定が行われます。しかし、この場合には 値 `none' は指定できません。 3.5. その他のカーネル起動時引数 以下に示す各種の起動時引数を用いて、カーネルの内部パラメータをユーザが 調整できます。 3.5.1. `debug' 引数 カーネルは利用者に対して重要な(あるいはそうでもない)メッセージを printk() 関数を通して提示します。メッセージが重要な場合、 printk() 関 数は現在のコンソールに表示するとともに、そのメッセージをディスクに記録 するために klogd() 機能に引き渡します。ディスクに記録を保管するだけで なくコンソールに表示するのは、不幸にしてメッセージがディスクに記録され ず失われるような場合(例えばディスクの不良など)を考慮してのことです。 重要なものと重要でないものを区別するための閾値値は console_loglevel 変 数によって設定されます。デフォルトでは、 DEBUG (レベル7)よりも重要なも のをコンソールに送ります(こういったレベルはインクルードファイル kernel.h で定義されています)。 debug を起動時引数として与えると、コン ソールログレベルを 10 に設定します。その結果、全てのカーネルメッセージ がコンソールに現れます。 コンソールログレベルは通常、klogd() プログラムのオプションとして実行時 に設定されます。設定の方法については、システムにインストールされている klogd() の man ページを参照してください。 3.5.2. `init=' 引数 カーネルは、デフォルトでは起動時に `init' プログラムを実行します。これ はユーザのためにコンピュータの設定を行うプログラムであり、getty プログ ラムの起動や `rc' スクリプトの実行などを行います。カーネルは最初に /sbin/init を参照し、これが無ければ /etc/init(このファイルは使わないほ うがいいでしょう)を参照し、さらに最後の手段として /bin/sh を(多分 /etc/rc の次に)実行しようとします。例えば、init プログラムに何らかの不 具合があり、そのために起動ができない場合には、単にブートプロンプトに init=/bin/sh と書けば、起動時にいきなりシェルに入れます。そして、その 後で壊れているプログラムを取り換えられます。 3.5.3. `kbd-reset' 引数 i386 ベースのマシンにおいては普通、Linux カーネルは起動時にキーボード コントローラのリセットを行いません。なぜなら、BIOS がキーボードコント ローラをリセットするはずだからです。しかし普通は、必ずしも全てのマシン がリセットを行うことにはなっていません。キーボードの動作に問題がある場 合には、このオプションを指定すると解決するかもしれません。このオプショ ンは単に、初期化の際にリセットを行うことを強制します(このオプションを とにかくデフォルトの動作にすべきだと言う人もいます)。 3.5.4. `maxcpus=' 引数 この引数に指定した数値は、SMP モードで有効になる CPU の最大数を制限し ます。0 を指定するのは、nosmp オプションを指定するのと同じ意味です。 3.5.5. `mca-pentium' 引数 IBM model 95 Microchannel マシンは、CPU と組み合わせて使う数値演算チッ プの種類を Linux が検出するために通常行うテストによって固まってしまう ようです。全ての Pentium チップには数値演算プロセッサが組み込まれてい るので、この起動オプションを使うことによりこのテスト(および固まってし まう問題)を避けられます。 3.5.6. `md=' 引数 ルートファイルシステムが MD デバイス(Multiple Device)にある場合には、 このオプションを使ってカーネルに MD デバイスの構成を教えられます (カー ネルには MD デバイスからの起動の対応が組み込まれているものとします)。 フォーマットは以下の通りです (linux/Documentation/md.txt からの引用で す): md=md_device_num,raid_level,chunk_size_factor,fault_level,dev0,dev1,...,devN ここで md_device_num は MD デバイスの数です(つまり 0 は md0, 1 は md1 のようになります)。raid_level は、リニアモードで使うなら -1 を、ストラ イピングモードで使うなら 0 を指定してください。他のモードは現在、サポ ートされていません。chunk_size_factor は RAID-0 と RAID-1 専用のオプ ションで、PAGE_SIZE を指定された量だけ左にシフトした値をチャンクのサイ ズとして設定します。fault_level は RAID-1 だけ専用のオプションで、指定 された値を最大フォールト数に設定します。 (現在は RAID-1 からの起動がサ ポートされていないため、サポートされていません。) dev0-devN は、MD デ バイスを構成する個々のデバイスをコンマで区切って並べたリストです。例え ば /dev/hda1,/dev/hdc1,/dev/sda1 のように指定します。 3.5.7. `no387' 引数 i387 コプロセッサの中には 32 ビット保護モードで発現するバグを持ったも のがあります。例えば、初期の ULSI-387 は浮動小数点演算の実行中に凍り付 いてしまいます。 恐らくこれは FRSAV/FRRESTOR 命令のバグのせいで す。`no387' 起動時引数を受け取ると、Linux はたとえ数値演算コプロセッサ が組み込まれていても、これを無視します。もちろん、この場合はカーネルを 数値演算エミュレーション対応にコンパイルしておかなければなりません! また、コプロセッサとして 287 を使っているような恐ろしく古い 386 マシン を持っている場合も有用でしょう。Linux は 80287 を使えないからです。 3.5.8. `no-hlt' 引数 i386 (とその後継チップ)系のチップには(キーボード、モデム、ディスクなど の)外部機器から仕事をするよう CPU が呼ばれるまで実行を停止するための `hlt' 命令があります。これにより、CPU を「低消費電力」モードにさせ、外 部機器が CPU を(通常は割り込みなどで)起こすまで CPU を死んだように眠ら せておけます。初期の i486DX-100 の中には、`hlt' 命令に問題があるものが あります。この場合、hlt 命令が使用されると通常の実行モードにちゃんと戻 れなくなります。`no-hlt' 命令を用いると、Linux は何もすることがない時 には無限ループに入ります。そして、他に何もすることがなくても、CPU を hlt 状態に入れません。この引数によって、このような不具合を持つ CPU で も Linux を使えます。もっとも、メーカー補償があるのならそれを使って交 換することをお勧めしますが。 3.5.9. `no-scroll' 引数 この引数を起動時に使うと、点字端末を使いやすいようにスクロールを禁止し てしまいます。 3.5.10. `noapic' 引数 このオプションを使うと、SMP カーネルはマルチプロセッサマシンで高度な割 り込み制御機能の一部を使わなくなります。詳しくは linux/Documentation/IO-APIC.txt を見てください。 3.5.11. `nosmp' 引数 このオプションを使うと、SMP カーネルは SMP マシンをシングルプロセッサ で動作させます。このオプションを使うのは普通、デバッグの時と、ある問題 が SMP 関連のものかどうかを調べるときだけです。 3.5.12. `panic=' 引数 滅多にないカーネルパニックが起きた場合(つまり、カーネルが内部エラーを 検出し、大声でうめきながら何もかも中止するほど重要であると判断した場 合)、誰かがやってきて、スクリーン上のパニックメッセージを読み、マシン を再起動するのを何もしないで待つというのがデフォルトの動作です。しか し、機械が孤立した場所にあって人がついていない場合は、マシンが自動的に 自分自身をリセットして、動作状態に復帰する方が望ましいかもしれません。 例えば、panic=30 と起動時に指定すると、カーネルはカーネルパニックが生 じてから 30 秒後に自分自身を再起動しようと試みます。値として 0 を指定 するとデフォルトの動作を行います。つまり、人が来るのを待ち続けます。 この値は /proc/sys/kernel/panic sysctl インターフェースを通して読み書 き可能であることも知っておくとよいでしょう。 3.5.13. `pci=' 引数 3.5.14. `pirq=' 引数 このオプションを用いると、未知の(またはブラックリストに載っていること が知られている) SMP マザーボードに対して、PCI スロットと IRQ 設定の競 合に関する情報が SMP カーネルに伝えられます。詳しくは linux/Documentation/IO-APIC.txt を参照してください。 3.5.15. `profile=' 引数 カーネル開発者は、このオプションを有効にすることにより、カーネルがどこ にどれだけの CPU 時間を費しているかのプロファイルを得られます。これは カーネルの効率と性能を高めるために用いられます。このオプションを使用し て、ユーザはプロファイルシフトカウントを起動時に指定します。通常は、こ れには 2 が設定されます。また、最初からプロファイルを有効にした状態で カーネルを設定することもできます。いずれの場合にも、/proc/profile の出 力を使用する readprofile.c 等が必要です。 3.5.16. `reboot=' 引数 このオプションは、Linux がコンピュータをリセットする(よくある例として は Control-Alt-Delete を処理する /sbin/init によって) ときに、どのよう にリブートするかを制御します。バージョン 2.0 のカーネルのデフォルトは 「コールド(cold)」リブート (完全なリセットであり、BIOS はメモリチェッ ク等を行います)であり、「ウォーム(warm)」リブート(完全なリブートではな く、メモリチェックは行いません)ではありません。デフォルトの動作がコー ルドリブートに変更されたのは、ウォームリブートを要求するとリブートに失 敗する安物や不具合のあるハードウェアでは、コールドリブートの方がうまく 動作するようだからです。リセット時に以前のような振る舞い(つまりウォー ムリブート)を行うには、 reboot=w と指定してください。実際には、w で始 まる言葉であれば何であれウォーム指定したことになります。 なぜわざわざウォーム指定なんてわずらわしいことをするかですって? キャッシュメモリを持っているディスクコントローラの中には、ウォームリブ ートを検出でき、キャッシュデータを全部ディスクに書き出すものがありま す。ところがコールド再起動となるとカードがリセットされてしまい、カード のキャッシュメモリに上にあってディスクに書き戻される予定のデータが消え てしまうかもしれません。また、システムによっては、コールドリブートをす るとメモリチェックや SCSI BIOS の処理化処理に長い時間がかかるという話 もあります。これはウォームリブートを選ぶ十分な理由でしょう。 3.5.17. `reserve=' 引数 これは、 I/O ポート領域を検出させないために使います。書式は以下の通り です: reserve=iobase,extent[,iobase,extent]... 機種によっては、特定領域にあるデバイスをデバイスドライバがチェックしな いようにしなければならないことがあります。これは設計のまずいハードウェ アのせいで、(どこかの イーサネットカードのように)起動中に凍り付いてし まったり、間違って検出されてしまったり、前の検出によって状態が変わって しまうことがあるからです。あるいは単に、そのハードウェアをカーネルに初 期化させたくないといった場合もあるかもしれません。 reserve 起動時引数は、検出してはならない I/O ポート領域を指定すること によってこの問題を回避します。指定された領域は、カーネル内部のポート登 録テーブル内に予約され、その領域で既にデバイスが検出されたかのように扱 われます(登録名は reserved です)。ただし、この機構はほとんどのマシンで は不要であることを覚えておいてください。この機構を使うのは、何らかの問 題や、この機構を使わなければならない特別な事情がある場合だけにすべきで す。 指定した範囲の I/O ポートは、領域内の I/O 空間を闇雲に探る前に check_region() を行うデバイス検出から保護されています。これは NE2000 で止まってしまうドライバがあるときや、別のデバイスを誤検出したときに使 うために追加されました。正しいデバイスドライバは、他の起動時引数によっ て明示的に指示されない限り、reserve によって指定された範囲を検出しませ ん。これは、reserve が他の起動時引数と組み合わせて使われることが多いこ とを暗示しています。つまり、reserve 領域を指定して特定のデバイスを保護 するならば、そのデバイスは普通、明示的に検出させなければなりません。ほ とんどのドライバは、明示的にアドレスを指定するとポート登録テーブ ル(port registration table)を無視します。 例えば、起動時に ______________________________________________________________________ reserve=0x300,32 blah=0x300 ______________________________________________________________________ を与えると `blah' 用ドライバ以外の全てデバイスドライバは 0x300-0x31f を避けるようになります。 普通の起動時引数と同じく、引数の数は 11 個までという制限があります。し たがって、reserve キーワード 1 つにつき、 5 個しか領域を予約できませ ん。えらく面倒なことをしたければ reserve を複数個指定すればうまくいく でしょう。 3.5.18. `vga=' 引数 これは本当は起動時引数ではないことに注意してください。これは LILO が解 釈するオプションであって、他の起動時引数のようにカーネルが解釈するわけ ではありません。しかしながら、この引数を使うのが大変広まったので、ここ で取り上げることにします。この引数はまた、rdev -v やこれと同等の vidmode を使っても vmlinuz ファイルに設定できます。このオプションは Linux カーネルが実際に起動する前に、ビデオ BIOS を使ってデフォルトの表 示モードを変更します。よく用いられるモードは、80x50 や 132x44 等です。 このオプションの一番いい使い方は、vga=ask であり、これは使用しているビ デオアダプタで選択できるモードの一覧をカーネルの起動前にユーザに示し、 どれを使うかを選ばせます。与えられたモードの中からいいものが見つかった ら、今度は先のオプションの `ask' をその値で置き換えます。詳しい情報に 関しては、linux/Documentation/svga.txt を参照してください。この文書は 最新版のカーネルと一緒に配布されています。 ついでながら、新しいカーネル (v2.1以降) はビデオモードを選ぶ機能をオプ ションとして持っています。これはカーネルの設定時にビデオモード選択のサ ポート(Video mode selection support) として示されます。したがって、こ の機能を使いたければ、このオプションを有効にする必要があります。 4. PCI バスの動作を制御する起動時引数 (`pci=') `pci=' 引数(バージョン 2.0 のカーネルでは使えません)を使うと、PCI バス のデバイス検出の動作とデバイスの動作を変えられます。まず、 linux/drivers/pci/pci.c はアーキテクチャ非依存の pci= オプションを調べ ます。指定可能な残りの引数は linux/arch/???/kernel/bios32.c が処理しま す。これらのオプションのうち、???=i386 であるものについては後述しま す。 4.1. `pci=bios' 引数と `pci=nobios' 引数 これらの引数は、PCI 検出を PCI BIOS 経由で行うかどうかを示すフラグを設 定/クリアします。デフォルトでは BIOS を使用します。 4.2. `pci=conf1' 引数と `pci=conf2' 引数 PCI 直接モードが有効ならば、これらの引数により Type1 か Type2 の設定が 有効になります。これらの引数はまた、PCI BIOS の検出フラグを暗黙的にク リアします(つまり `pci=nobios' と同じ)。 4.3. `pci=io=' 引数 PCI: Unassigned IO space for.../ といったメッセージが出力される場合、 このオプションを使って I/O 値を指定する必要があるかもしれません。ソー スコードから引用すると 「BIOS の中には、アドレスを I/O 範囲に割り当てるのを忘れるやつがある。 僕らは、0x5800 から始まる空きアドレスがあることを期待してこれを直そう とした。ちくしょう、でもこれはもっといいリソース管理ができるようになる までの、単純な回避策に過ぎないんだ」とのことです。 4.4. `pci=nopeer' 引数 この引数は、デフォルトのピアによるブリッジの調停を無効にします。ソース コードによると、これは以下のことを行います: 「ピアホストブリッジがある場合、それらの背後にあるバスをスキャンする。 いくつかの資料によると、ホストブリッジはタイプ 1 のヘッダを持ち、 PCI2PCI ブリッジの場合と同様にバス番号が割り当てられるべきだとされてい る。しかし、現実にはこれではテストに通らないので、空いている最初の番号 を BIOS がバス番号に割り当てるのが普通である」 4.5. `pci=nosort' 引数 この引数を用いると、カーネルは検出フェーズにおいて PCI デバイスのソー トを行いません。 4.6. `pci=off' 引数 このオプションを用いると、PCI バスの検出が無効になります。ハードウェア の検出と初期化に PCI の機能を利用する全てのデバイスドライバは、ほぼ確 実に動作しなくなるでしょう。 4.7. `pci=reverse' 引数 このオプションは、PCI バス上の PCI デバイスの並び順を逆にします。 5. ビデオフレームバッファドライバ用の起動時引数 `video=' 引数(バージョン 2.0 のカーネルでは使えません)は、フレームバッ ファデバイスの抽象化層をカーネル内に作るときに使います。難しそうに聞こ えるかもしれませんが、そんなに手に負えないものではありません。これは基 本的に、それぞれのビデオカード用に異なるビデオプログラム (X11R6 のサー バ)を用意する(例: XF86_S3, XF86_SVGA, …)のではなく、カーネル内に各ビ デオカード用のドライバを組み込み、ビデオプログラム用には単一のインタ フェースを提供します。これにより、必要な X11R6 のサーバはひと つ(XF86_FBDev)だけになります。これは現在のネットワークのやりかたに似て います。ネットワークについては、カーネルが各種ネットワークカードのドラ イバを持ち、単一のネットワークインタフェースを提供します。これにより、 インタフェースの背後にあるネットワークカードの種類に関わらず全てのシス テムで、単一のプログラム(Netscape 等)が動作します。 この引数の標準的な形式は video=name:option1,option2,... です。ここで name は汎用的なオプションか、フレームバッファデバイス固有のオプション です。video= は linux/init/main.c から linux/drivers/video/fbmem.c に 渡され、さらに処理されます。ここで、既知のドライバ名とのマッチングが試 みられる前に、汎用的なオプションのいくつかがチェックされます。一旦ドラ イバ名のマッチングが行われると、コンマ区切りのオプションリストは、特定 のドライバに渡されてから最終的に処理されます。有効なドライバ名のリスト は、前述の fbmem.c ファイルにある fb_drivers 配列を順に読むことによっ て得られます。 それぞれのドライバがサポートしているオプションに関する情報は、いつかは linux/Documentation/fb/ で見つけられるようになると思いますが、現在(バ ージョン 2.2 時点)はここには少ししか情報がありません。残念ながら、ビデ オドライバの数とそれぞれに対するオプションの数は別の文書が書けるほど多 いので、ここに示すことができません。 お使いのカードに関する文書ファイルがなければ、ドライバから直接オプショ ンに関する情報を得なければなりません。linux/drivers/video/ に行き、適 切な ???fb.c ファイルを見てください(??? はカード名に基づいています)。 ここで、_setup という文字列が名前に含まれている関数を探し、ドライバが どんなオプションを調べているかを見てください。 font や mode 等が調べて いるでしょう。 5.1. `video=map:...' 引数 このオプションを使うと、コンソールからフレームバッファデバイスへのマッ ピングの設定/上書きができます。数値をコンマで区切って並べたリストで マッピングを設定します。すなわち、オプション N の値が、コンソール N に 対応するフレームバッファデバイスの番号となります。 5.2. `video=scrollback:...' 引数 コロンの後の数値により、スクロールバックバッファに割り当てるメモリの量 を設定します。(スクロールさせるためには Shift キーと PageUp, PageDown キーを使ってください。) 数値の後に `k' または `K' を付けると、その数は バイト単位でなくキロバイト単位と解釈されます。 5.3. `video=vc:...' 引数 数値、あるいは数値の範囲(例: video=vc:2-5)により、最初、あるいは最初と 最後のフレームバッファ仮想コンソールを指定します。このオプションを使う と、フレームバッファコンソールをデフォルトのコンソールでなくする効果も あります。 6. SCSI 機器用の起動時引数 この節では、導入されている SCSI ホストアダプタと SCSI デバイスに情報を 渡すための起動時引数の説明を行います。 6.1. 中位のドライバのための引数 中位のドライバはディスクや CD-ROM、テープなどをホストアダプタ固有の事 情に立ち入ることなしに取り扱います。 6.1.1. LUN の最大検出数 (`max_scsi_luns=') SCSI デバイスは、それぞれいくつかの「下位のデバイス」を持つことができ ます。もっとも良くある例は複数の CD を同時に使える最近の SCSI CD-ROM です。各々の CD は そのデバイスの `Logical Unit Number' (LUN) で識別さ れます。しかしハードディスクやテープドライブ等のほとんどデバイスは、内 部に一つしかデバイスを持っておらず、LUN として 0 を割り当てています。 問題が起こるのは、不具合があるファームウェアを持つ単一 LUN のデバイス を使うときです。設計がよくないSCSI デバイス(古いものと、不幸なことに新 しいものも含みます)は、0 以外の LUN で検出されることに耐えられません。 このような場合、システムが動作停止したり、SCSI バスがダウンしてしまい ます。 カーネルには検出を行うときの最大 LUN を設定するオプションがあります。 デフォルトの動作では LUN 0 しか検出しません。これは前述の問題を避ける ためです。 検出を行う LUN を起動時に指定するには、`max_scsi_luns=n' を起動時引数 として与えます。ここで n は 1 から 8 までの数です。前述の問題を避ける ためには、n=1 として、いかれたデバイスによるごたごたを回避します。 6.1.2. SCSI ロギング (`scsi_logging=') 0 以外の値をこの起動時引数に与えると、全てのSCSI イベント(error, scan, mlqueue, mlcomplete, llqueue, llcomplete, hlqueue, hlcomplete)のロギン グが行われるようになります。/proc/ ファイルシステムのアクセスが可能に なる前に起こるイベントに興味がないのであれば、 /proc/scsi/scsi インタ フェースを使うとログに残されるイベントをもっと細かく制御できることを 知っておくとよいでしょう。 いくつかの SCSI テープドライバの起動時設定は、以下のようにして行えま す: ______________________________________________________________________ st=buf_size[,write_threshold[,max_bufs]] ______________________________________________________________________ 最初の二つの数は kB 単位で指定します。デフォルトの buf_size の値は 32kB です。また、指定できる最大の値は 16384kB です。 write_threshold はバッファがテープに渡される時の値で、デフォルト値は 30kB です。バッ ファの最大数は検出されたドライブの数によります。初期値は 2 です。使用 例を以下に示します: ______________________________________________________________________ st=32,30,2 ______________________________________________________________________ 詳細はカーネルソースツリーの SCSI ディレクトリの README.st に書いてあ ります。 6.2. SCSI ホストアダプタ用の引数 この節での表記法について: iobase -- SCSI ホストが占有する最初の I/O ポート。 16 進数で表記され、 通常は 0x200 から 0x3ff の範囲にあります。 irq -- カードが使うように設定されているハードウェア割り込み。有効な値 は問題になっているカードに依存しますが、普通は 5, 7, 9, 10, 11, 12, 15 です。その他の値は普通は IDE ハードディスクやフロッピー、シリアルポー トといった広く使われている周辺機器に使われます。 dma -- カードが使用する DMA (Direct Memory Access) チャネル。普通はバ スマスタリングを行うカードだけに適用されます。PCI や VLB カードは普通 はバスマスタリングを行います。しかし、ISA は普通はバスマスタリングを行 いません。 scsi-id -- SCSI バス上でのホストアダプタが自分自身を識別するために用い る ID です。ほとんどのアダプタは内部でこの値を固定してしまっていますの で、この値を変えることのできるアダプターはあまりありません。普通、デ フォルト値は 7 です。しかし Seagate と Futre Domain TMC-950 は 6 を 使っています。 parity -- SCSI ホストアダプタが、接続されているデバイスが情報交換の際 に必ずパリティ値を付けていることを期待しているかどうか。 1 を指定する とパリティ検査が行われ、0 の時には行われません。繰り返しになりますが、 必ずしも全てのアダプタにおいて起動時にパリティの振舞いを選択できるとは 限りません。 6.2.1. Adaptec aha151x, aha152x, aic6260, aic6360, SB16-SCSI (`aha152x=') aha で始まる名前はカードの名前を表わし、aic で始まる名前は基板の上の実 際の SCSI チップの名前を表わします。後者には Soundblaster-16 SCSI など があります。 これらの SCSI ホスト用の検出用コードは、BIOS が導入されているかどうか を調べます。もしも BIOS がない場合には、カードを探すことはできません。 その場合、起動時引数を使わなければならないでしょう。その書式は以下の通 りです: ______________________________________________________________________ aha152x=iobase[,irq[,scsi-id[,reconnect[,parity]]]] ______________________________________________________________________ ドライバがデバッグ対応にコンパイルされているなら、6 番目の値を使ってデ バッグレベルを設定できます。 全てのパラメータはこの節の最初に説明した通りです。また、reconnect に 0 以外の値が指定されると、デバイスは切断/再接続を行うことが許可されま す。使用例を以下に示します: ______________________________________________________________________ aha152x=0x340,11,7,1 ______________________________________________________________________ 引数は順番通りに書かなければなりません。つまり、パリティを設定したけれ ば、iobase, irq, scsi-id, reconnect も指定しなければなりません。 6.2.2. Adaptec aha154x (`aha1542=') これらは aha154x 系のカードです。aha1542 系のカードは i82077 フロッピ ーコントローラを内蔵していますが、aha1540 系のカードは内蔵していませ ん。このシリーズはバスマスタカードで、他のデバイスとバスを共有するとき の「公平さ」を設定するパラメータがあります。起動時引数は以下のようにな ります。 ______________________________________________________________________ aha1542=iobase[,buson,busoff[,dmaspeed]] ______________________________________________________________________ 有効な iobase は、普通 0x130、0x134、0x230、0x234、0x330、0x334 のいず れかです。互換カードでは他の値も指定できるかもしれません。 buson, busoff の値は、カードが ISA バスを占有する時間をマイクロ秒で指 定します。デフォルトでは、11us の間オン、4us の間オフです。これによ り、他の(ISA LANCE イーサネットカード等の)デバイスも ISA バスにアクセ スできます。 dmaspeed の値は DMA (Direct Memory Access) の転送速度を MB/s で指定し ます。デフォルト値は 5MB/s です。最近のカードはこの値をソフトで設定で きますが、古いカードではジャンパで設定します。この値は最大 10MB/s を指 定できますが、これはマザーボードの性能にもよります。5MB/s 以上を指定す るときには、注意深く実験してください。 6.2.3. Adaptec aha274x, aha284x, aic7xxx (`aic7xxx=') これらのボードは以下の引数を受け付けます: ______________________________________________________________________ aic7xxx=extended,no_reset ______________________________________________________________________ extended が 0 でない値の時には、大容量ディスクのための拡張変換が有効に なります。no_rest が 0 でない値の時には、起動時のホストアダプタの設定 時に SCSI バスがリセットされません。 6.2.4. AdvanSys SCSI ホストアダプタ (`advansys=') AdvanSys ドライバは AdvanSys SCSI カードを検出するための I/O アドレス を 4 つまで受け付けます。なお、これらの値を使用しても EISA や PCI のカ ードの検出には影響を与えません。ISA および VLB のカードのみが影響を受 けます。加えて、ドライバがデバッグ用にコンパイルされている場合、デバッ グ出力レベルの指定を 0xdeb[0-f] パラメータによって指示できます。 0-f の値によってどれだけ詳細な出力を行うかを 16 段階で指示します。 6.2.5. Always IN2000 ホストアダプタ (`in2000=') 他の SCSI ホストアダプタの起動時引数と違って、IN2000 ドライバはほとん どの整数型引数の前に ASCII による前置文字列を置きます。対応している引 数のリストを以下に示します: ioport:addr -- addr はカード(普通は ROM なし)の I/O アドレスです。 noreset -- 後に続く引数はありません。起動時に SCSI バスをリセットしな いようにします。 nosync:x -- x はビットマスクで、下位の 7 ビットが使用可能な 7 つの SCSI デバイスに対応します(ビット 0 がデバイス #0 です)。あるビットを立 てると、そのデバイスとの同期ネゴシエーションが禁止されます。デフォルト の動作では、ドライバは全てのデバイスの同期を無効にしています。 period:ns -- ns は SCSI データ転送周期の最小値で、単位はナノ秒です。デ フォルト値は 500、指定可能な値は 250 から 1000 までです。 disconnect:x -- x = 0 の時には切断を許しません。2 ならば常に許します。 x = 1 は、「適応的」に切断を行います。これはデフォルトの動作であり、普 通は一番いい選択です。 debug:x -- `DEBUGGING_ON' が定義されている場合は、x は表示するデバッグ 出力の種類を決めるビットマスクになります。 in2000.h における DB_xxx の 定義を見てください。 proc:x -- `PROC_INTERFACE' が定義されている場合は、x は /proc インター フェースの動作を決めるビットマスクになります。 in2000.h における PR_xxx の定義を見てください。 以下にいくつか例を示します: ______________________________________________________________________ in2000=ioport:0x220,noreset in2000=period:250,disconnect:2,nosync:0x03 in2000=debug:0x1e in2000=proc:3 ______________________________________________________________________ 6.2.6. AMD AM53C974 ベースのハードウェア (`AM53C974=') 他のデバイスとは異なり、このドライバは I/O、IRQ、DMA チャネルでの通信 に起動時引数を使いません(なぜかというと AM53C974 は PCI デバイスである ためで、これらを使う必要がないからです)。その代わりに、引数はホストと ターゲットデバイスの間の転送モードや速度を指定するために使用します。こ れらは例で説明するのが一番わかりやすいでしょう: ______________________________________________________________________ AM53C974=7,2,8,15 ______________________________________________________________________ これは以下のように解釈されます。「SCSI-ID が 7 であるコントローラと SCSI-ID が 2 であるデバイスの間は、同期転送モードにより転送速度 8MHz、 最大 15 バイトのオフセットをとるようネゴシエーションする」。より突っ込 んだ説明については linux/drivers/scsi/README.AM53C974 ファイルを参照し てください。 6.2.7. v1.2 カーネル用 BusLogic SCSI ホストドライバ (`buslogic=') 古いカーネルを使用している場合は、buslogicドライバは引数を一つだけとり ます。これは I/O ベース値を教えるために使います。値としては以下のうち の 1 つを指定します: 0x130, 0x134, 0x230, 0x234, 0x330, 0x334 6.2.8. v2.x カーネル用 BusLogic SCSI ホストドライバ (`BusLogic=') バージョン 2.x のカーネルでは、BusLogic ドライバはたくさんの引数を受け 付けます。(前節のドライバとは大文字と小文字が違うので注意。こちらは B, L が大文字です!!!) 引数が多すぎて、ここでは説明できません。完全な説明 はドライバ linux/drivers/scsi/BusLogic.c の中に書かれており、BusLogic= という文字列を検索すれば見つかります。 6.2.9. EATA SCSI カード (`eata=') 最新の v2.0 カーネルの時点では、EATA ドライバは検出のための I/O ベース アドレスを起動時引数として受け付けます。書式は以下の通りです: ______________________________________________________________________ eata=iobase1[,iobase2][,iobase3]...[,iobaseN] ______________________________________________________________________ このドライバは、指定した順番でアドレスを検査していきます。 6.2.10. Future Domain TMC-8xx, TMC-950 (`tmc8xx=') これらの SCSI ホスト用の検出コードは、SCSI BIOS がインストールされてい るか調べ、インストールされていなければカードを検出しません。また、BIOS のシグネチャ文字列が識別できなくてもカードを検出しません。これらの場 合、起動時引数を以下の形式で与える必要があります: ______________________________________________________________________ tmc8xx=mem_base,irq ______________________________________________________________________ mem_base 値は、カードが使用するメモリマップド I/O 領域のアドレスです。 これは普通、以下値のうちのいずれかです: 0xc8000, 0xca000, 0xcc000, 0xce000, 0xdc000, 0xde000 6.2.11. Future Domain TMC-16xx, TMC-3260, AHA-2920 (`fdomain=') このドライバは、既知の BIOS ROM シグネチャのリストに基づいてカードを検 出します。既知の BIOS の版の完全なリストについては、 linux/drivers/scsi/fdomain.c を見てください。というのも、このファイル の先頭に詳しい情報が載っているからです。BIOS がリストに載っていない場 合は、以下の形式で上書き指定できます: ______________________________________________________________________ fdomain=iobase,irq[,scsi_id] ______________________________________________________________________ 6.2.12. IOMEGA パラレルポート / ZIP ドライブ (`ppa=') これは、IOMEGA Zip ドライバに組み込まれているパラレルポート用 SCSI ア ダプタのためのドライバです。また、このドライバは、オリジナルの IOMEGA PPA3 デバイス用でも動作します。このドライバの起動時引数は以下の通りで す: ______________________________________________________________________ ppa=iobase,speed_high,speed_low,nybble ______________________________________________________________________ iobase 以外は省略できます。3 つの省略可能なパラメータのどれかの値を変 更したければ、linux/drivers/scsi/README.ppa を見て、このパラメータが何 を制御するのかを調べることをお勧めします。 6.2.13. NCR5380 ベースのコントローラ (`ncr5380=') ボードによって、5380 は I/O マップの場合とメモリマップの場合があります (0x400 以下のアドレスは通常は I/O マッピングです。しかし、PCI と EISA のハードウェアは 0x3ff より上のアドレスを使います)。いずれの場合も、ア ドレス、IRQ の値、DMA チャネルの値を指定してください。I/O マップのカー ドの指定例は、ncr5380=0x350,5,3 です。カードが割り込みを使用しない場合 は、IRQ の値として 255 (0xff)を指定すると、割り込みが禁止されます。IRQ に 254 を指定すると自動検出が行われます。より詳細な説明については linux/drivers/scsi/README.g_NCR5380 を参照してください。 6.2.14. NCR53c400 ベースのコントローラ (`ncr53c400=') 一般的な 53c400 への対応は、上で説明した一般的な 5380 への対応と同様に 行われます。起動時引数は前述の説明とほぼ同じですが、53c400 では DMA チャネルが使われない点だけが異なります。 6.2.15. NCR53c406a ベースのコントローラ (`ncr53c406a=') このドライバは以下の様な起動時引数を使用します: ______________________________________________________________________ ncr53c406a=PORTBASE,IRQ,FASTPIO ______________________________________________________________________ ここで IRQ と FASTPIO 引数は省略可能です。割り込みに 0 を指定すると、 割り込みを使わなくなります。FASTPIO 引数に 1 を指定すると、単一バイト 処理命令 inb および outb の代わりに insl および outsl が使われるように なります。また、このドライバは DMA を使用するようコンパイル時に指定で きます。 6.2.16. Pro Audio Spectrum (`pas16=') PAS16 は NCR5380 SCSI チップを使用しています。また、最近の機種はジャン パ無しの設定に対応しています。起動時引数の書式は以下の通りです: ______________________________________________________________________ pas16=iobase,irq ______________________________________________________________________ 唯一異なる点は、IRQ の値として 255 を指定できる点です。これは割り込み 無しでドライバを使用することを指定しますが、この場合も性能の劣化はあり ません。iobase は普通、0x388 です。 6.2.17. Seagate ST-0x (`st0x=') SCSI ホスト用の検出コードは、SCSI BIOS がインストールされているかを調 べ、導入されていなければカードを検出しません。また、BIOS のシグネチャ 文字列が識別できない場合もカードを検出しません。これらの場合、起動時引 数を以下の形式で与える必要があります: ______________________________________________________________________ st0x=mem_base,irq ______________________________________________________________________ mem_base は、カードが使用するメモリマップド I/O 領域のアドレスです。こ れは普通、以下の値のいずれかです: 0xc8000, 0xca000, 0xcc000, 0xce000, 0xdc000, 0xde000. 6.2.18. Trantor T128 (`t128=') このカードも NCR5380 チップを使用しています。以下のオプションを受け付 けます。 ______________________________________________________________________ t128=mem_base,irq ______________________________________________________________________ mem_base に対して有効な値を以下に示します: 0xcc000, 0xc8000, 0xdc000, 0xd8000 6.2.19. Ultrastor SCSI カード (`u14-34f=') このカードには別々の二つのドライバがあることに気をつけてください。カー ネルの設定の際に CONFIG_SCSI_U14_34F を指定すると u14-34f.c が使用さ れ、CONFIG_SCSI_ULTRASTOR を指定すると ultrastor.c が使用されま す。u14-34f の方は (バージョン 2.0 の最近のカーネルでは)、以下の形式の 起動時引数を受け付けます: ______________________________________________________________________ u14-34f=iobase1[,iobase2][,iobase3]...[,iobaseN] ______________________________________________________________________ ドライバは列挙された順番でアドレスを見ていきます。 6.2.20. Western Digital WD7000 カード (`wd7000=') このドライバの wd7000 検出ルーチンは、分かっている BIOS ROM のパターン を探します。また、標準的な設定をいくつか知っています。カードに正しくな い値が設定されている場合や認識できないバージョンの BIOS を使っている場 合は、以下の形式の起動時引数を使用できます: ______________________________________________________________________ wd7000=irq,dma,iobase ______________________________________________________________________ 6.3. 起動時引数を取らない SCSI ホストアダプタ 現在のところ、以下の SCSI カードは起動時引数を全く使いません。場合に よっては、必要ならばドライバそのものを編集して値を直接書き込むことがで きます。 Adaptec aha1740 (EISA の検出), NCR53c7xx,8xx (PCI, 両方のドライバとも) Qlogic Fast (0x230, 0x330) Qlogic ISP (PCI) 7. ハードディスク この節では標準の MFM/RLL, ST-506, XT, IDE ディスクドライブデバイスに関 わる起動時引数を説明します。IDE と 汎用 ST-506 HD ドライバはどちらも "hd=" オプションを受け付けます。 7.1. IDE ディスク/IDE CD-ROM ドライバの引数 IDE ドライバはたくさんの引数を受け付けます。引数はディスクのジオメトリ 指定のためのものから、先進的な制御チップや不具合のある制御チップに対応 するためのものまであります。以下に利用可能な起動時引数をまとめました。 完全な説明に関しては、 linux/Documentation ディレクトリにある ide.txt を参照するよう強く勧めます。以下のまとめはこのファイルから抽出しまし た。 ______________________________________________________________________ "hdx=" は "x" が "a"から "h" である場合に受け付けられます(例: "hdc")。 "idex=" は "x" が "0" から "3" である場合に受け付けられます(例: "ide1")。 "hdx=noprobe" : ドライブは存在するかもしれないが、検出しない。 "hdx=none" : ドライブは