<!-- The FreeBSD Documentation Project The FreeBSD Japanese Documentation Project Original revision: 1.39 $FreeBSD: doc/ja_JP.eucJP/books/handbook/kernelconfig/chapter.sgml,v 1.14 2001/03/03 05:02:14 hrs Exp $ --> <chapter id="kernelconfig"> <title>FreeBSD カーネルのコンフィグレーション</title> <sect1> <title>この章では</title> <para><emphasis>更新/再構成: &a.jim;, 2000 年 3 月. 寄稿: &a.jehamby;, 1995 年 10 月 6 日.</emphasis></para> <para><emphasis>訳: &a.jp.tomo;, &a.jp.yoshiaki;. 1996 年 11 月 2 日.</emphasis></para> <para>この章では, 自分のシステムに合わせた カーネルを構築する方法について扱います. カーネルの再構築によりどんなメリットがあるのか不思議に思っていたり, 自分用のカーネルを設定し, コンパイルし, インストールする方法を 知りたいと思っているのなら, この章が役に立つでしょう. </para> </sect1> <sect1> <title>なぜカスタムカーネルを作るか?</title> <para>システムに合わせたカーネルの構築はほとんどすべての UNIX ユーザが 避けて通ることのできない最も重要な通過儀礼の1つです. この作業は, 多くの時間を必要としますが, あなたの FreeBSD システムに多くの利益をもたらします. 広範囲のハードウェアをサポートしなければならない <filename>GENERIC</filename>カーネルとは異なり, システムに合わせたカーネルは <emphasis>あなたの</emphasis> PC のハードウェアのみをサポートします. これは, 次にあげるような利益をもたらします.</para> <itemizedlist> <listitem> <para>素早く起動します. カーネルはあなたのシステム上にあるハードウェアしか 検出を行わないので, あなたのシステムの起動にかかる時間は劇的に短くなります. </para> </listitem> <listitem> <para>メモリの消費量が減少します. システムに合わせたカーネルは, 大抵 <literal>GENERIC</literal> カーネルより少ないメモリしか消費しません. カーネルは常にメモリ上に存在するプロセスなので, このことは重要になります. したがって, RAM が少ないシステムでは, カーネルの再構築は大変重要です.</para> </listitem> <listitem> <para>追加のハードウェアをサポートします. システムに合わせたカーネルは, サウンドカードなど <literal>GENERIC</literal> カーネルに存在しない デバイスのサポートを追加することができます.</para> </listitem> </itemizedlist> </sect1> <sect1 id="kernelconfig-building"> <title>カスタムカーネルの構築とインストール</title> <para>まず, カーネル再構築に必要なディレクトリをざっと見てみましょう. ここではディレクトリはすべて <filename>/usr/src/sys</filename> 以下の相対位置で示します. また, <filename>/sys</filename> からもアクセス可能です. ここには, カーネルの各部分を構成するサブディレクトリが いくつもあります. しかし, 私たちの目的で最も重要なのは <filename><replaceable>arch</replaceable>/conf</filename> です. ここで, あなたの システムに合わせてカーネルコンフィグレーションを編集します. それから <filename>compile</filename>ディレクトリ, ここはカーネルが作られる 場所です. <replaceable>arch</replaceable> は, <filename>i386</filename>, <filename>alpha</filename>, <filename>pc98</filename>(これは 日本で普及している PC のための開発ブランチです)のいずれかを表します. 各アーキテクチャのディレクトリ内部にあるファイルはすべて そのアーキテクチャでのみ使用され, 残りのコードは FreeBSD が他のプラットフォームに移植される際に共有されます. サポートされているデバイス, ファイルシステム, オプションが, それぞれ各々のサブディレクトリに分かれている, という論理的な構成に注意してください. </para> <note> <para>もし, あなたのシステムに<filename>/usr/src/sys</filename> 以下のディレクトリが<emphasis>なければ</emphasis>, カーネルのソースが インストールされていません. もっとも簡単な方法は (<username>root</username>で) <command>/stand/sysinstall</command> を用いて以下のようにします. <literal>設定(Configure)</literal> を選んでから <literal>配布ファイル(Distribution)</literal> を選択し, <literal>src</literal> の中の <literal>sys</literal> をインストールしてください. </para> </note> <para>つぎに, <filename><replaceable>arch</replaceable>/conf</filename>に移動して, <filename>GENERIC</filename> コンフィグレーションファイルをカーネルに与えたい名前に コピーしてください. たとえば次のようにします.</para> <screen>&prompt.root; <userinput>cd /usr/src/sys/i386/conf</userinput> &prompt.root; <userinput>cp GENERIC MYKERNEL</userinput></screen> <para>慣習として, この名前はすべて大文字でつづられます. もし, いくつかの異なるハードウェアの FreeBSDマシンを扱うなら, この名前にホスト名を含めるとよいでしょう. ここでは, 例として <filename>MYKERNEL</filename> と呼ぶことにします.</para> <note> <para>この作業は root権限でおこなう必要があります. そうでなければ, <errortype>permission denied</errortype>というエラーが出ます.</para> </note> <para>では, <filename>MYKERNEL</filename> をあなたの好きなエディタで編集してください. もし, システムをインストールしたばかりならば, 利用できるエディタは <command>vi</command>だけかもしれません. ここでは使い方 の説明はしませんが, <link linkend="bibliography">参考図書</link> にあるような多くの本で詳しく説明 されていますので, そちらを参照してください. FreeBSD にはより簡単なエディタとして <quote>ee</quote> があります. 初心者の方であればこちらをエディタ に選ぶとよいでしょう. まずファイルの最初の方のコメント行を編集し, あなたのコンフィグ レーションに合せて変更した点などを記述して <filename>GENERIC</filename> と区別がつく ようにしておきましょう.</para> <para>もし SunOSや他の BSDオペレーティングシステムでカーネルの 再構築をしたことがあれば, このファイルはとても親しみ やすいでしょう. しかし, DOSのようなその他の オペレーティングシステムしか知らない人から見れば, <filename>GENERIC</filename> コンフィグレーションファイルはとても なじみにくいものかもしれません. そのような場合は, <link linkend="kernelconfig-config"> コンフィグレーションファイル </link> の節をゆっくりと注意深く読んでください.</para> <note> <para>FreeBSD Project の最新のソースファイルと, あなたの ソースツリーを同期させている場合, アップデートを行う際には, 必ず <filename>/usr/src/UPDATING</filename> ファイルをチェックするように してください. このファイルには, FreeBSD をアップデートする際のすべての重要な情報 が書かれています. <filename>/usr/src/UPDATING</filename> は常にあなたの FreeBSD ソースファイルのバージョンと同期していますので, ハンドブックの情報よりも正確なものとなっています.</para> </note> <para>FreeBSD 4.0 より前の FreeBSD を使っていて, FreeBSD 4.0 以降へはアップグレードしない, もしくはリリース版の FreeBSD を使っていて <filename>/usr/src/</filename> ディレクトリには <filename>sys/</filename> しか無い場合, 編集し終ったら次のコマンドによってコンパイル, インストール を行ってください. </para> <note> <para>古いバージョンの FreeBSD からカーネルをアップグレードしようと している場合, 新しいカーネルのソースファイルを取ってきた場所と 同じところから, 新しいバージョンの &man.config.8; を取ってくる 必要があるでしょう. &man.config.8; は <filename>/usr/src/usr.sbin</filename> にあるので, これらのソースファイルもダウンロードする必要が あります. 次のコマンドを実行する前に, これを再構築してインストールして おいてください.</para> </note> <screen>&prompt.root; <userinput>/usr/sbin/config MYKERNEL</userinput> &prompt.root; <userinput>cd ../../compile/MYKERNEL</userinput> &prompt.root; <userinput>make depend</userinput> &prompt.root; <userinput>make</userinput> &prompt.root; <userinput>make install</userinput></screen> <para>4.X 以降の新しいバージョンにアップグレードした場合 (例えば 3.X から 4-STABLE へ, もしくは 4-STABLE から 最新版の 4-STABLE へなど), 予め <link linkend="cutting-edge">buildworld</link> を行なって, 以下のコマンドを実行してください:</para> <screen>&prompt.root; <userinput>cd /usr/src</userinput> &prompt.root; <userinput>make buildkernel KERNCONF=MYKERNEL</userinput> &prompt.root; <userinput>make installkernel KERNCONF=MYKERNEL</userinput></screen> <note> <para>FreeBSD-4.2 とそれ以前の場合は, <literal>KERNCONF=</literal> ではなく <literal>KERNEL=</literal> としなければなりません. 2001 年 2 月 2 日以降の 4.2-STABLE は KERNCONF= を認識します.</para> </note> <para>何らかの方法であなたのソースツリーをアップグレードして <emphasis>いない</emphasis> 場合 (<application>CVSup</application>, <application>CTM</application>, <application>anoncvs</application>, などを実行していない場合), <command>config</command>, <command>make depend</command>, <command>make</command>, <command>make install</command> の手順を実行してください.</para> <warning> <para>最後にカーネルを構築した後で, ソースをアップグレードした場合, カーネルを構築するには <command>make buildkernel</command> を使わなければ <emphasis>なりません</emphasis>. そうしないと, カーネルを構築するのに古いユーティリティが 使われてしまい, 失敗してしまうかもしれません. <emphasis>ソースを更新した場合には, カーネルを構築するのに <command>config</command>/<command>make</command> の手順は使わないでください!</emphasis></para> </warning> <para>新しいカーネルはルートディレクトリに <filename>/kernel</filename>という 名前でコピーされ, 今までのカーネルは <filename>/kernel.old</filename> という名前へ変更されます. では, システムをシャットダウン, リブー トして新しいカーネルを使ってください. うまく行かない場合は, この章の終りの <link linkend="kernelconfig-trouble">問題が起きた場合には</link> を参照してください. この章の新しい <link linkend="kernelconfig-noboot">カーネルが起動しない</link> 場合のリカバリの方法を注意深く読んでおいてください.</para> <note> <para>(サウンドカードのような)新しいデバイスを 追加した場合は, 使う前に <filename>/dev</filename>ディレクトリで デバイスノードを追加しなければならないかもしれません. 詳しくは, <link linkend="kernelconfig-nodes">デバイスノード </link> を読んでください.</para> </note> </sect1> <sect1 id="kernelconfig-config"> <title>コンフィグレーション ファイル</title> <para>コンフィグレーション ファイルの一般的なフォーマット はとてもシンプルです. 各行は1つのキーワードと1つ以上の 引数を含んでいます. 見やすくするために, ほとんどのキーワードは 引数を1つしか書いてありません. <literal>#</literal>に続くものはすべてコメントとして扱われ, 無視されます. ここでは, それぞれのキーワードについて だいたい <filename>GENERIC</filename> に出てくる順番で説明します. しかし, お互いに関係のあるキーワードは, 実際には <filename>GENERIC</filename> ファイル上に バラバラに現れていても, (ネットワーキングのように)1つにまとめ てあります. <anchor id="kernelconfig-options"> おびただしい数の オプションの一覧が <filename>GENERIC</filename>と同じディレクトリの <filename>LINT</filename> コンフィグ レーションファイルにあります. もし, ある行の目的や必要性に疑 問を持ったら最初に <filename>LINT</filename> をチェックしてください.</para> <important> <title>数字と二重引用符</title> <para> FreeBSD 3.x と, それまでの全てのバージョンの FreeBSD における &man.config.8; は, コンフィグレーションファイル中の テキストとして使われる数字を含む文字列が 全て二重引用符で括られていなければならないという制限があります. </para> <para>この制限は (このハンドブックが対象としている) 4.X ブランチでは取り除かれました. 4.X 以前のシステムを使っている場合には, サンプルとしてシステム上の <filename>/usr/src/sys/i386/conf/LINT</filename> と <filename>/usr/src/sys/i386/conf/GENERIC</filename> を参照してください.</para> </important> <para>以下は必要に応じてコメントを追加した <filename>GENERIC</filename> カーネルの コンフィグレーションファイルです. この設定例は <filename>/usr/src/sys/i386/conf/GENERIC</filename> に極めて近いものになっているはずです. その他に指定可能なカーネルオプションについては, <filename>/usr/src/sys/i386/conf/LINT</filename> を参照してください.</para> <programlisting># # GENERIC -- Generic kernel configuration file for FreeBSD/i386 # # このファイルについて更に情報が必要なら, ハンドブックのカーネル # コンフィグレーションファイルのセクションを参照して下さい. # # http://www.freebsd.org/handbook/kernelconfig-config.html # # doc ディストリビューションをインストールした場合, ハンドブックは # ローカルマシンの /usr/share/doc/handbook でも見ることができます. # 最新版は FreeBSD の WWW サーバ (http://www.FreeBSD.ORG/) を参照して # 下さい. # # ./LINT コンフィギュレーションファイルには, デバイス行に関する大量の # オプションと詳細な説明があります. もしある行の目的又は必要性について # 疑問がある場合はまず LINT をチェックして下さい. # # $FreeBSD: src/sys/i386/conf/GENERIC,v 1.246 2000/03/09 16:32:55 jlemon Exp $</programlisting> <para>以下は <emphasis>すべての</emphasis> カーネルの構築に 必須のキーワードです:</para> <programlisting>machine i386</programlisting> <para>マシンのアーキテクチャです. これは <literal>i386</literal>, <literal>alpha</literal>, <literal>pc98</literal> のいずれかでなければなりません.</para> <programlisting>cpu I386_CPU cpu I486_CPU cpu I586_CPU cpu I686_CPU</programlisting> <para>上記はあなたのシステムの CPU タイプを指定します. 複数の行を書いても構いません. (例: <literal>I586_CPU</literal> とすべきか <literal>I686_CPU</literal> とすべきかはっきり分からない場合. しかしながら, カスタムカーネルを作る場合, あなたの持つ CPU だけを指定するのがベストです. もしあなたがどのタイプの CPU を使っているか分からない場合, <command>dmesg</command> を使って起動メッセージを 調べるとよいでしょう.</para> <para>The Alpha architecture has different values for <literal>cpu_type</literal>. They include:</para> <para>Alpha アーキテクチャの場合は, <literal>cpu_type</literal> に異なった値を用います.</para> <programlisting>cpu EV4 cpu EV5</programlisting> <para>もしあなたが Alpha マシンを使っている場合, 上記の内のどれかを指定して下さい.</para> <programlisting>ident GENERIC</programlisting> <para>ここはカーネルの識別名を書きます. あなたがカーネルに付けたい名前に書き換えて下さい (<literal>MYKERNEL</literal>のように). <literal>ident</literal> に書いた名前はカーネルを起動する時に 表示されるので, 普段使っているカーネルと区別したいときは違う名前を付けると 良いでしょう(例: 実験的なカーネルを構築する場合).</para> <programlisting>maxusers 32</programlisting> <para><literal>maxusers</literal> オプションは重要なシステムテーブルの サイズを決定します. この数字はあなたのマシンを同時に使うと思われるユーザー数と おおよそ等しくするのが良いでしょう. しかしながら, 通常は X ウインドウシステムを使ったり, ソフトウエアをコンパイルするでしょうから, その場合は <literal>maxusers</literal> は最低 4 にして下さい. その理由は, <literal>maxusers</literal> によって計算される最も 重要なテーブルがプロセスの最大数で, それは <literal>20 + 16 * maxusers</literal> となります. もし, <literal>maxusers</literal> を 1 にすると, 同時に 36 プロセスしか利用できなくなりますが, システムは起動時に 18 ほどのプロセスを立ち上げ, X ウインドウシステムは 15 ほどのプロセスを立ち上げるので, man コマンドのような単純な仕事でさえフィルタ, 展開, 表示に 9 個のプロセスを利用するために, プロセス数不足になります. <literal>maxusers</literal> を 64 に設定すると, 1044 個のプロセスを同時に利用することができるので, 殆どのユーザには充分でしょう. もしあなたが別のプログラムを立ち上げる時, 恐れられている <errortype>proc table full</errortype> エラーが 発生する場合や, <hostid role="fqdn">ftp.FreeBSD.org</hostid> のように多数のユーザにより 同時に利用されるサーバを動かしている場合には, この数字を増やしてカーネルを再構築することができます.</para> <note> <para><literal>maxusers</literal> はあなたのマシンにログインする ユーザ数を制限するものでは <emphasis>ありません</emphasis>. それは単に, あなたのシステムを使うであろうユーザの最大数や それぞれのユーザがどれくらいのプロセスを走らせるかに 合わせて各種テーブルの大きさを設定するだけです. 同時にリモートログインする最大ユーザ数を制限するキーワードは <link linkend="kernelconfig-ptys"> <literal>pseudo-device pty 16</literal></link> です. </para> </note> <para>以下に続くすべては大体において追加設定項目です. 詳細は各項目の次に書かれている注意書きを参照して下さい.</para> <programlisting>#makeoptions DEBUG=-g #Build kernel with gdb(1) debug symbols options MATH_EMULATE #Support for x87 emulation</programlisting> <para>This line allows the kernel to simulate a math co-processor if your computer does not have one (386 or 486SX). If you have a 486DX, or a 386 or 486SX (with a separate 387 or 487 chip), or higher (Pentium, Pentium II, etc.), you can comment this line out.</para> <para>この行では, あなたのコンピュータが浮動小数点演算コプロセッサを 持たない場合(CPU が 386 又は 486SX), カーネルにシミュレートさせるよう設定します. あなたが 486DX, 又は (387 や 487 チップを別途搭載した) 386, 486SX 又は更に上位 (Pentium, Pentium II, 他) を持っている場合は コメントアウトして下さい.</para> <note> <para>FreeBSD の浮動小数点エミュレーションルーチンはあまり正確では <emphasis>ありません</emphasis>. もしあなたが浮動小数点コプロセッサを持っておらず, かつベストな演算精度が必要であれば, GNU の浮動小数点サポートを 利用する <literal>GPL_MATH_EMULATION</literal> を使ってみて下さい. このオプションはライセンス上の理由によりデフォルトでは 含まれていません.</para> </note> <programlisting>options INET #InterNETworking</programlisting> <para>ネットワークのサポート. ネットワークに接続する予定がなくてもこのオプションは残して下さい. 殆どのプログラムは少なくともループバックネットワーク (あなたの PC の中でのネットワーク接続) を必要としますので, 基本的にこの行は必須です.</para> <programlisting>options INET6 #IPv6 communications protocols</programlisting> <para>このオプションは IPv6 通信プロトコルを利用可能にします.</para> <programlisting>options FFS #Berkeley Fast Filesystem options FFS_ROOT #FFS usable as root device [keep this!]</programlisting> <para>これは標準のハードドライブファイルシステムです. ハードディスクから起動する場合は残して下さい.</para> <programlisting>options MFS #Memory Filesystem options MD_ROOT #MD is a potential root device</programlisting> <para>これはメモリ上にマップされたファイルシステムです. これは基本的に一時ファイルの高速格納用の RAM ディスクであり, あなたが有効に利用したい大量のスワップスペースを持っている 場合には有用でしょう. 多くのプログラムが一時データをここに保存することから, MFS パーティションをマウントする最適な場所は <filename>/tmp</filename> ディレクトリです. MFS RAM ディスクを <filename>/tmp</filename> にマウントするには 次の行を <filename>/etc/fstab</filename> に追加して下さい:</para> <informalexample> <programlisting>/dev/ad1s2b /tmp mfs rw 0 0</programlisting> </informalexample> <para>次に再起動するか, コマンド <command>mount /tmp</command> を実行して下さい.</para> <programlisting>options NFS #Network Filesystem options NFS_ROOT #NFS usable as root device, NFS required</programlisting> <para>ネットワークファイルシステム. UNIX ファイルサーバから TCP/IP を介してパーティションを マウントするのでない限り, これらの行をコメントアウトして下さい.</para> <programlisting>options MSDOSFS #MSDOS Filesystem</programlisting> <para>MS-DOS ファイルシステム. 起動時に DOS でフォーマットされたハードドライブを マウントするのでない限り, この行は安全にコメントアウトできます. この機能は最初に DOS パーティションをマウントする時に自動的に ロードされます. 又, 優秀な <application>mtools</application> (Ports コレクションにあります) を使ってもマウント, アンマウントすることなしに DOS フロッピーにアクセスすることができます. (<literal>MSDOSFS</literal> は必要としません)</para> <programlisting>options CD9660 #ISO 9660 Filesystem options CD9660_ROOT #CD-ROM usable as root, CD9660 required</programlisting> <para>CD-ROM 用の ISO 9660 ファイルシステム. もしあなたが CD-ROM ドライブを持っていないか, 時々データ CD をマウントするだけならこの行をコメントアウトしても 大丈夫です (データ CD を最初にマウントする時, 自動的にロードされます). 音楽 CD はこのファイルシステムを必要としません.</para> <programlisting>options PROCFS #Process filesystem</programlisting> <para>プロセスファイルシステム. これは <filename>/proc</filename> にマウントされる, ファイルシステムの <quote>ふりをする</quote> もので, &man.ps.1; のようなプログラムに, どんなプロセスが走っているか に関するより多くの情報を提供させる事ができます.</para> <programlisting>options COMPAT_43 #Compatible with BSD 4.3 [KEEP THIS!]</programlisting> <para>4.3BSD との互換機能です. 有効なままにして下さい. この行をコメントアウトするとおかしな動きをするプログラムがあります. </para> <programlisting>options SCSI_DELAY=15000 #Delay (in ms) before probing SCSI</programlisting> <para>この行は, カーネルがそれぞれの SCSI 機器を検出する前に 15 秒間待つようにします. あなたが IDE ドライブしか持たないなら無視して結構です. そうでないなら, 起動時間を短くするため, おそらく待つ時間を短く, 5 秒くらいにしたいでしょう. 勿論, そうした場合に FreeBSD が SCSI 機器を認識しなくなった場合は 時間を元に戻す必要があります.</para> <programlisting>options UCONSOLE #Allow users to grab the console</programlisting> <para>ユーザにコンソールを所有することを許可します. X のユーザには役に立ちます. たとえば <command>xterm -C</command> とコマンドを打つことにより, コンソール xterm を起動することができます. ここにはカーネルからのあらゆるコンソールメッセージとともに, <command>write</command>, <command>talk</command> による あらゆるメッセージを表示します. </para> <programlisting>options USERCONFIG #boot -c editor</programlisting> <para>このオプションは起動メニューからコンフィグレーションエディタ を起動することができるようにします.</para> <programlisting>options VISUAL_USERCONFIG #visual boot -c editor</programlisting> <para>このオプションは起動メニューからビジュアルコンフィグレーション エディタを起動できるようにします.</para> <programlisting>options KTRACE #ktrace(1) support</programlisting> <para>この行はデバッギングに役立つカーネルプロセスのトレースを 可能にします.</para> <programlisting>options SYSVSHM #SYSV-style shared memory</programlisting> <para>このオプションは System V 共有メモリを提供します. この機能の最も一般的な使用方法は X における XSHM 拡張です. 多くのグラフィックス重視のプログラムではこの機能を自動的に 描画のスピードアップに利用します. X を使っているなら, これを含めておいた方がいいでしょう.</para> <programlisting>options SYSVSEM #SYSV-style semaphores</programlisting> <para>System V セマフォのサポート. あまり使われませんが, カーネルサイズは数百バイト大きくなるだけです. </para> <programlisting>options SYSVMSG #SYSV-style message queues</programlisting> <para>System V のメッセージのサポート. これもカーネルサイズを数百バイト大きくするだけです.</para> <note> <para>&man.ipcs.1; コマンドを実行するとこれらの System V 機能を使っているプロセスのリストを表示します.</para> </note> <programlisting>options P1003_1B #Posix P1003_1B real-time extentions options _KPOSIX_PRIORITY_SCHEDULING</programlisting> <para>リアルタイム拡張が 1993 POSIX に追加されました. Ports コレクションの内のいくつかのアプリケーション (例えば Star Office) はこれを使っています.</para> <programlisting>options ICMP_BANDLIM #Rate limit bad replies</programlisting> <para>このオプションは ICMP エラー応答のバンド幅制限を可能にします. サービス不能パケットによる攻撃からマシンを保護するために必要です. </para> <programlisting># To make an SMP kernel, the next two are needed #options SMP # Symmetric MultiProcessor Kernel #options APIC_IO # Symmetric (APIC) I/O</programlisting> <para>上の行は両方とも SMP サポートのために必要です.</para> <programlisting># Optionally these may need tweaked, (defaults shown): #options NCPU=2 # number of CPUs #options NBUS=4 # number of busses #options NAPIC=1 # number of IO APICs #options NINTR=24 # number of INTs</programlisting> <para>これらは追加の SMP オプションです.</para> <programlisting>device isa</programlisting> <para>FreeBSD がサポートするすべての PC はこれらの内のひとつを 持っています. あなたが IBM PS/2 (マイクロチャネルアーキテクチャ) マシンを持っている場合, FreeBSD は現時点では動作しません (サポートには取組中です).</para> <programlisting>device eisa</programlisting> <para>あなたが EISA マザーボードを持っている場合, この行を含めて下さい. これは EISA バスに接続されているすべての デバイスの自動検出と設定を可能にします.</para> <programlisting>device pci</programlisting> <para>あなたが PCI マザーボードを持っている場合, この行を含めて下さい. これは PCI カードの自動検出と PCI から ISA バスへのゲートウエイを 可能にします.</para> <programlisting># Floppy drives device fdc0 at isa? port IO_FD1 irq 6 drq 2 device fd0 at fdc0 drive 0 device fd1 at fdc0 drive 1</programlisting> <para>これはフロッピーディスクコントローラです. <literal>fd0</literal> は <devicename>A:</devicename> フロッピードライブ, <literal>fd1</literal> は <devicename>B:</devicename> ドライブです.</para> <programlisting>device ata</programlisting> <para>このドライバはすべての ATA と ATAPI デバイスをサポートします. 最近のマシンでは <literal>device ata</literal> 行を 1 行書くだけで すべての PCI ATA/ATAPI デバイスを検出することができます.</para> <programlisting>device atadisk # ATA disk drives</programlisting> <para>ATAPI ディスクドライブには <literal>device ata</literal> と共にこの行が必要です.</para> <programlisting><anchor id="kernelconfig-atapi">device atapicd # ATAPI CDROM drives</programlisting> <para>ATAPI CDROM ドライブには <literal>device ata</literal> と共にこの行が必要です.</para> <programlisting>device atapifd # ATAPI floppy drives</programlisting> <para>ATAPI フロッピードライブには <literal>device ata</literal> と共にこの行が必要です.</para> <programlisting>device atapist # ATAPI tape drives</programlisting> <para>ATAPI テープドライブには <literal>device ata</literal> と共にこの行が必要です.</para> <programlisting>options ATA_STATIC_ID #Static device numbering</programlisting> <para>この行はコントローラ番号を (古いドライバのように) 静的に 割り当てます. そうでない場合, デバイス番号は動的に割り当てられます. </para> <programlisting>#options ATA_ENABLE_ATAPI_DMA #Enable DMA on ATAPI devices</programlisting> <para>この行は ATAPI デバイス上での DMA を可能にします. 多くの ATAPI デバイスは DMA をサポートすると表明していても 実際には機能しないので, デフォルトでオフにされています.</para> <programlisting># ATA and ATAPI devices device ata0 at isa? port IO_WD1 irq 14 device ata1 at isa? port IO_WD2 irq 15</programlisting> <para>上の行は古い, PCI ではないシステムの場合の形式です.</para> <programlisting># SCSI Controllers device ahb # EISA AHA1742 family device ahc # AHA2940 and onboard AIC7xxx devices device amd # AMD 53C974 (Teckram DC-390(T)) device dpt # DPT Smartcache - See LINT for options! device isp # Qlogic family device ncr # NCR/Symbios Logic device sym # NCR/Symbios Logic (newer chipsets) device adv0 at isa? device adw device bt0 at isa? device aha0 at isa? device aic0 at isa?</programlisting> <para>SCSI コントローラです. あなたのシステムにないデバイスはコメントアウトして下さい. もし IDE しかないシステムならこれらすべてを削除できます.</para> <programlisting># SCSI peripherals device scbus # SCSI bus (required) device da # Direct Access (disks) device sa # Sequential Access (tape etc) device cd # CD device pass # Passthrough device (direct SCSI access)</programlisting> <para>SCSI 周辺機器です. あなたが持っていないデバイスはコメントアウトして下さい. もし IDE しか持っていないならこれらを完全に削除できます.</para> <programlisting># RAID controllers device ida # Compaq Smart RAID device amr # AMI MegaRAID device mlx # Mylex DAC960 family</programlisting> <para>サポートされる RAID コントローラです. これらのどれも持っていない場合, すべてをコメントアウト又は 削除することができます.</para> <programlisting># atkbdc0 controls both the keyboard and the PS/2 mouse device atkbdc0 at isa? port IO_KBD</programlisting> <para>キーボードコントローラ (<literal>atkbdc</literal>) は AT キーボード及び PS/2 スタイルポインティングデバイスの I/O サービスを提供します. キーボードドライバ (<literal>atkbd</literal>) と PS/2 ポインティングデバイスドライバ (<literal>psm</literal>) はこのコントローラを必要とします.</para> <programlisting>device atkbd0 at atkbdc? irq 1</programlisting> <para><literal>atkbd</literal> ドライバ. <literal>atkbdc</literal> コントローラと協調して動作し, AT キーボードコントローラに接続された AT 84 キーボードや AT 拡張キーボードへのアクセスを提供します.</para> <programlisting>device psm0 at atkbdc? irq 12</programlisting> <para>あなたのマウスが PS/2 マウスポートに接続するタイプなら このデバイスを使って下さい.</para> <programlisting>device vga0 at isa?</programlisting> <para>ビデオカードドライバです.</para> <programlisting># splash screen/screen saver pseudo-device splash</programlisting> <para>起動時に画面がはじけます. スクリーンセーバもこのデバイスを必要とします.</para> <programlisting># syscons is the default console driver, resembling an SCO console device sc0 at isa?</programlisting> <para><literal>sc0</literal> はSCOに類似したデフォルトの コンソールドライバです. 殆どのフルスクリーンのプログラムは <filename>termcap</filename> のようなターミナルデータベールライブラリにアクセスするので, <literal>sc0</literal> を使うか <literal>VT220</literal> 互換のコンソールドライバである <literal>vt0</literal> を使うかは重要ではありません. ログイン時, このコンソールでフルスクリーンプログラムが動かないときは <envar>TERM</envar> 変数を <literal>scoansi</literal> に設定して下さい. </para> <programlisting># Enable this and PCVT_FREEBSD for pcvt vt220 compatible console driver #device vt0 at isa? #options XSERVER # support for X server on a vt console #options FAT_CURSOR # start with block cursor # If you have a ThinkPAD, uncomment this along with the rest of the PCVT lines #options PCVT_SCANSET=2 # IBM keyboards are non-std</programlisting> <para>これは VT220 互換のコンソールドライバで, VT100/102 と後方互換性があります. <literal>sc0</literal> とハード的に互換性がないラップトップでも 問題なく動きます. ここでもログイン時に <envar>TERM</envar> 変数を <literal>vt100</literal> 又は <literal>vt220</literal> と設定して下さい. このドライバは、<literal>sc0</literal> デバイス用の <filename>termcap</filename> や <filename>terminfo</filename> のエントリが無い, ネットワーク上の多くの異なったマシンに 接続する際にも有用です — <literal>vt100</literal> は仮想的にすべてのプラットフォームで有効であるべきです.</para> <programlisting># Floating point support - do not disable. device npx0 at nexus? port IO_NPX irq 13</programlisting> <para><literal>npx0</literal> は FreeBSD における 浮動小数点演算ユニットへのインターフェースで, それは実際には コプロセッサ又はソフトウエアエミュレータです. これはオプションでは<emphasis>ありません</emphasis>.</para> <programlisting># Power management support (see LINT for more options) device apm0 at nexus? disable flags 0x20 # Advanced Power Management</programlisting> <para>先進的な電源管理機能 (APM) のサポート. ラップトップでは役に立つでしょう.</para> <programlisting># PCCARD (PCMCIA) support device card device pcic0 at isa? irq 10 port 0x3e0 iomem 0xd0000 device pcic1 at isa? irq 11 port 0x3e2 iomem 0xd4000 disable</programlisting> <para>PCMCIA サポート. ラップトップにインストールする時は必要です.</para> <programlisting># Serial (COM) ports device sio0 at isa? port IO_COM1 flags 0x10 irq 4 device sio1 at isa? port IO_COM2 irq 3 device sio2 at isa? disable port IO_COM3 irq 5 device sio3 at isa? disable port IO_COM4 irq 9</programlisting> <para>これらは MS-DOS/Windows の世界では COM1からCOM4 と呼ばれている 4 つのシリアルポートです.</para> <note> <para>もしあなたが内蔵モデムを COM4 に, シリアルポートを COM2 に設定している場合, FreeBSD からアクセスするには, (IRQ2=IRQ9 という, 不明瞭な技術的理由により) モデムの IRQ を 2 に変更する必要があります. もしマルチポートシリアルカードを持っていてこれらの設定の正しい 数値に関する情報がほしい場合はマニュアルページ &man.sio.4; を参照して下さい. ビデオカードのいくつかは (S3 チップベースのものは特に) IO アドレスを <literal>0x*2e8</literal> と言う形式で表現する一方, 多くの安価なシリアルカードは 16 ビットの IO アドレスを完全に デコードしないので, これらのカードを使った場合衝突が起こり, 事実上 COM4 ポートを使用不可能にします.</para> <para>各々のシリアルポートは (共有割り込み番号をサポートする マルチポートカードを使っていない限り) 固有の IRQ を必要とします. 従って COM3 と COM4 用のデフォルト IRQ は利用できません.</para> </note> <programlisting># Parallel port device ppc0 at isa? irq 7</programlisting> <para>ISA バスパラレルポートインターフェースです.</para> <programlisting>device ppbus # Parallel port bus (required)</programlisting> <para>パラレルポートバスのサポートを提供します.</para> <programlisting>device lpt # Printer</programlisting> <para>パラレルポートプリンタのサポートです.</para> <note> <para>上の 3 つはすべてパラレルプリンタを利用可能にするために 必要です.</para> </note> <programlisting>device plip # TCP/IP over parallel</programlisting> <para>パラレルネットワークインターフェース用のドライバです.</para> <programlisting>device ppi # Parallel port interface device</programlisting> <para>汎用I/O (<quote>geek port</quote>) + IEEE1284 I/O です.</para> <programlisting>#device vpo # Requires scbus and da</programlisting> <para>Iomega の Zip ドライブ用です. <literal>scbus</literal> と <literal>da</literal> サポートが必要です. EPP 1.9モードを使うと最高の性能が得られます.</para> <programlisting># PCI Ethernet NICs. device de # DEC/Intel DC21x4x (<quote>Tulip</quote>) device fxp # Intel EtherExpress PRO/100B (82557, 82558) device tx # SMC 9432TX (83c170 <quote>EPIC</quote>) device vx # 3Com 3c590, 3c595 (<quote>Vortex</quote>) device wx # Intel Gigabit Ethernet Card (<quote>Wiseman</quote>)</programlisting> <para>PCI ネットワークカードのドライバです. あなたのシステムに ないものはコメントアウトするか削除して下さい.</para> <programlisting># PCI Ethernet NICs that use the common MII bus controller code. device miibus # MII bus support</programlisting> <para>MII バスサポートはいくつかの PCI 10/100 イーサネット NIC, すなわち MII に従うトランシーバや MII のようなトランシーバ制御 インターフェースを実装するもの, に必要となります. カーネルコンフィギュレーションに <literal>device miibus</literal> を追加することで, 汎用 miibus API のサポートと, 特定のドライバを必要としない場合に利用される汎用のものを含む すべての PHY ドライバが導入されます.</para> <programlisting>device dc # DEC/Intel 21143 and various workalikes device rl # RealTek 8129/8139 device sf # Adaptec AIC-6915 (<quote>Starfire</quote>) device sis # Silicon Integrated Systems SiS 900/SiS 7016 device ste # Sundance ST201 (D-Link DFE-550TX) device tl # Texas Instruments ThunderLAN device vr # VIA Rhine, Rhine II device wb # Winbond W89C840F device xl # 3Com 3c90x (<quote>Boomerang</quote>, <quote>Cyclone</quote>)</programlisting> <para>MII バスコントローラコードを利用するドライバです.</para> <programlisting># ISA Ethernet NICs. device ed0 at isa? port 0x280 irq 10 iomem 0xd8000 device ex device ep # WaveLAN/IEEE 802.11 ワイヤレス NIC. # 注: WaveLAN/IEEE は PCMCIA デバイスとしてしか実在しません. # なので ISAア タッチメントは必要なく, リソースは常に PC カードコードに # より動的に割り当てられます. device wi # Aironet 4500/4800 802.11 ワイヤレス NIC. # 注: 下の宣言は ISA PnP モード (工場出荷時設定) のISAカード, PCMCIA # 及び PCI カードにのみ働きます. もし, ISA カードの I/O アドレスと IRQ # を手動で設定している場合は, ここでそれらのパラメータを指定しなく # てはいけません. device an # これらの検出順序は現在 i386/isa/isa_compat.c により決められます. device ie0 at isa? port 0x300 irq 10 iomem 0xd0000 device fe0 at isa? port 0x300 device le0 at isa? port 0x300 irq 5 iomem 0xd0000 device lnc0 at isa? port 0x280 irq 10 drq 0 device cs0 at isa? port 0x300 device sn0 at isa? port 0x300 irq 10 # requires PCCARD (PCMCIA) support to be activated #device xe0 at isa?</programlisting> <para>ISA イーサネットドライバです. どのカードがどのドライバによりサポートされているかは <filename>/usr/src/sys/i386/conf/LINT</filename> を参照して下さい.</para> <programlisting># Pseudo devices - the number indicates how many units to allocated. pseudo-device loop # Network loopback</programlisting> <para>TCP/IP の汎用ループバックデバイスです. <hostid>localhost</hostid> (すなわち <hostid role="ipaddr">127.0.0.1</hostid>) に対して telnet や FTP を使う場合, この疑似デバイスを通して戻ってきます. これは <emphasis>必須</emphasis> です.</para> <programlisting>pseudo-device ether # Ethernet support</programlisting> <para><literal>ether</literal> はイーサネットカードを持っている場合に のみ必要です. 汎用イーサネットプロトコルコードを含みます.</para> <programlisting>pseudo-device sl 1 # Kernel SLIP</programlisting> <para><literal>sl</literal> は SLIP サポートを行います. SLIP は設定のより簡単な, モデム-モデム間の接続にはより適していて より高機能な PPP に殆ど取って代わられています. <literal>sl</literal> に続く <replaceable>数字</replaceable> には同時に持てる SLIP セッション数を指定します.</para> <programlisting>pseudo-device ppp 1 # Kernel PPP</programlisting> <para>これはダイアルアップ接続用のカーネル PPP サポートです. 他にも <literal>tun</literal> を利用し, デマンドダイアリングのような 柔軟性と機能を提供するユーザーランドのアプリケーションとして 実装された PPP が存在します. <literal>ppp</literal> に続く <replaceable>数字</replaceable> には同時に持てる PPP セッション数を 指定します.</para> <programlisting>pseudo-device tun # Packet tunnel.</programlisting> <para>これはユーザーランド PPP ソフトウエアにより利用されます. <literal>tun</literal> に続く <replaceable>数字</replaceable> には同時に持てる PPP セッション数を指定します. 詳細はこの本の <link linkend="userppp">PPP</link> セクションを 参照して下さい.</para> <programlisting><anchor id="kernelconfig-ptys">pseudo-device pty # Pseudo-ttys (telnet etc)</programlisting> <para>これは <quote>疑似ターミナル</quote> 或いはシミュレートされた ログインポートです. これは入ってくる <command>telnet</command> と <command>rlogin</command> セッション, <application>xterm</application> やその他の <application>emacs</application> のような アプリケーションにより利用されます. <replaceable>数字</replaceable> は生成される <literal>pty</literal> の数を示します. もし同時にデフォルトの 16 より多くの <application>xterm</application> ウィンドウやリモートログインが 必要な場合, 必要に応じてこの数字を増やして下さい. 最大は 256 です.</para> <programlisting>pseudo-device md # Memory <quote>disks</quote></programlisting> <para>メモリディスク疑似デバイス.</para> <programlisting>pseudo-device gif 4 # IPv6 and IPv4 tunneling</programlisting> <para>この行は IPv6 over IPv4 トンネル, IPv4 over IPv6 トンネル, IPv4 over IPv4 トンネル, IPv6 over IPv6 トンネルを提供します.</para> <programlisting>pseudo-device faith 1 # IPv6-to-IPv4 relaying (translation)</programlisting> <para>この疑似デバイスは自分宛に送られたパケットを受け取り, IPv4/IPv6 変換デーモンに渡します.</para> <programlisting># The `bpf' pseudo-device enables the Berkeley Packet Filter. # Be aware of the administrative consequences of enabling this! pseudo-device bpf # Berkeley packet filter</programlisting> <para>これはバークレーパケットフィルタです. この疑似デバイスはネットワークインターフェースを, イーサネットのような ブロードキャストネットワーク上ですべてのパケットを拾うことのできる promiscuous モードに設定できるようにします. これらのパケットはディスクに取り込むこともできますし, &man.tcpdump.1; を使ってチェックをすることもできます.</para> <programlisting># USB support #device uhci # UHCI PCI->USB interface #device ohci # OHCI PCI->USB interface #device usb # USB Bus (required) #device ugen # Generic #device uhid # <quote>Human Interface Devices</quote> #device ukbd # Keyboard #device ulpt # Printer #device umass # Disks/Mass storage - Requires scbus and da #device ums # Mouse # USB Ethernet, requires mii #device aue # ADMtek USB ethernet #device cue # CATC USB ethernet #device kue # Kawasaki LSI USB ethernet</programlisting> <para>様々なUSBデバイスのサポートです.</para> <para>より詳細な情報と, FreeBSD によりサポートされる他のデバイスに ついては <filename>/usr/src/sys/i386/conf/LINT</filename> を参照して下さい.</para> </sect1> <sect1 id="kernelconfig-nodes"> <title>デバイスノードを作る</title> <para>カーネル内のほとんどすべてのデバイスは対応する <quote>node</quote> エントリが <filename>/dev</filename> ディレクトリにあります. これらのノードは普 通のファイルのように見えますが, 実際にはプログラムがデバイスに アクセスするのに用いるカーネル内への特別なエントリです. シェルスクリプトである <filename>/dev/MAKEDEV</filename>はオペレーティング システムを最初にインストールする時に実行され, サポートされてい る大部分のデバイスのノードを作ります. しかし, <emphasis>すべての</emphasis> ノードが作られるわけではありませんので 新しいデバイスのサポートを加える時は対応するエントリがこのディ レクトリにあるかどうか確認してもしなければ, 作ってください. 以下に例を示します.</para> <para>IDE CD-ROMのサポートをカーネルに加えるとします. 次の行 を加えます.</para> <programlisting>device acd0</programlisting> <para>これにしたがって, <filename>/dev</filename>ディレクトリに <filename>acd0</filename>で始ま るエントリを捜してください. 1文字が後ろにつくかもしれません. 後 ろについた文字が <literal>c</literal>であるか先に <literal>r</literal>のつくエントリは <quote>raw</quote> デバ イスを示します. それらのファイルがないことが明らかになったとします. そこで <filename>/dev</filename> ディレクトリに移動して次のようにタイプします.</para> <screen>&prompt.root; <userinput>sh MAKEDEV acd0</userinput></screen> <para>スクリプトの実行が終ったら <filename>/dev</filename>に <filename>acd0c</filename> と <filename>racd0c</filename> エントリがあることを確認してください. これによ り正しく実行されたことがわかります.</para> <para>サウンドカードの場合, 以下のコマンドで対応する エントリが作成されます:</para> <screen>&prompt.root; <userinput>sh MAKEDEV snd0</userinput></screen> <note> <para>サウンドカードのようなデバイスのノードを作る場合で, もし他 の人がマシンにアクセスするようであれば, そのデバイスを <filename>/etc/fbtab</filename> ファイルに追加して外部からのアクセスから 保護するのが望ましいでしょう. このファイルの詳細については &man.fbtab.5; を参照してください.</para> </note> <para><filename>GENERIC</filename> に含まれていないデバイスはエントリがありませんから,以上 の簡単な手順をおこなうことになります.</para> <note> <para>すべての SCSI コントローラは同じ <filename>/dev</filename> の エントリを使用しますのでノードを作る必要はありません. またネッ トワークカードと SLIP/PPP 疑似デバイスは <filename>/dev</filename> にはエント リがありませんのでこれらについても作る必要がありません.</para> </note> </sect1> <sect1 id="kernelconfig-trouble"> <title>問題が起きた場合には</title> <para>カスタムカーネルを作る場合に起きるトラブルは, 次の 4 種類に分けられます.</para> <variablelist> <varlistentry><term><command>config</command> コマンドの失敗</term> <listitem> <para>カーネルコンフィグレーションファイルに設定を行なってから <command>config</command> コマンドが失敗したのであれば, おそらくファイルのどこかに単純な間違いがあります. さいわい, <command>config</command> はトラブルの起きた行番号を出力しますので <command>vi</command> で素早く見つけることができます. 例えば, 次のように出力された場合</para> <screen>config: line 17: syntax error</screen> <para><command>vi</command> のコマンドモードで <command>17G</command> とタイプすれば, 問題のところへ飛ぶことができます. <filename>GENERIC</filename> カーネルのファイルや, 他のリファレンスと比較して注意深く修正してください.</para> </listitem> </varlistentry> <varlistentry><term><command>make</command> コマンドの失敗</term> <listitem> <para><command>make</command> コマンドが失敗した場合には, カーネル設定で <command>config</command> がとらえられなかったような間違いをしていることが多いようです. もう一度コンフィグレーションファイルを見直してください. それでも問題を解決することができなければ, &a.questions; へあなたのカーネルコンフィグレーションファイルをつけてメールしてください. 誰かが素早く間違いを見つけてくれるでしょう.</para> </listitem> </varlistentry> <varlistentry><term>カーネルが起動しない <anchor id="kernelconfig-noboot"></term> <listitem> <para>新しいカーネルが起動しなかったり, デバイスの認識をしない場合でもあわてないでください! さいわい, BSDは 利用できないカーネルから復帰する 洗練されたメカニズムがあります. それは, FreeBSD のブートローダで起動したいカーネルを選択する (例えば <command>boot <filename>kernel.old</filename></command>) だけです. カーネルの再設定をおこなう場合にはいつも, 確実に動くことが分かっているカーネルを用意しておくようにすると良いでしょう. </para> <para>問題のないカーネルで起動した後に あなたのコンフィグレー ションファイルを調べ, 再び構築を試みてください. <filename>/var/log/messages</filename> ファイルにはすべての成功した 起動時のカーネルメッセージやその他の記録があり, これ は助けになる情報の一つでしょう. また, &man.dmesg.8; コマンドは現在の起動時のカーネルメッ セージを出力します.</para> <note> <para>カーネルの構築中にトラブルが起きた時に使うために GENERICや他のカーネルを次の構築で消されない ように異る名前で保存するようにしてください. <emphasis remap=tt>kernel.old</emphasis> は新しいカーネルをインストールする 時に, その一つ前にインストールしたうまく動かないかもしれ ないカーネルで上書きされてしまいますので当てにできませ ん. またできる限り早く動作しているカーネルを本来の <filename>kernel</filename>の位置に移動させてください. そうしないと &man.ps.1; のようなコマンドが正しく動きません. <command>make</command> でインストールされたカーネルのファイルを (別のカーネルに戻すために) <quote>アンロック</quote> するための特別 のコマンドは</para> <screen>&prompt.root; <userinput>chflags noschg /kernel</userinput></screen> <para>です. また, 新しい置き換えたカーネルあるいは重要ファイ ルを動かしたり変更されないように <quote>ロック</quote> するには 次のようにします. </para> <screen>&prompt.root; <userinput>chflags schg /kernel</userinput></screen> </note> </listitem> </varlistentry> <varlistentry><term>カーネルは動くが <command>ps</command> は動かない!</term> <listitem> <para>システムユーティリティと異る バージョンのカーネルをインストールした場合, 例えば 4.x のカーネルを 3.x システム上にインストールするような場合, &man.ps.1; や &man.vmstat.8; のような多くの システムステータスコマンドは動かなくなります. <filename>libkvm</filename> を再コンパイルして, これらのユーティリティを作りなおす必要があります. これは, カーネルとそれ以外で異なるバージョンを組み合わせて オペレーティングシステムを使用することが推奨されない理由の 一つとなっています.</para> </listitem> </varlistentry> </variablelist> </sect1> </chapter> <!-- Local Variables: mode: sgml sgml-declaration: "../chapter.decl" sgml-indent-data: t sgml-omittag: nil sgml-always-quote-attributes: t sgml-parent-document: ("../book.sgml" "part" "chapter") End: -->