<!--
     The FreeBSD Documentation Project
     The FreeBSD Japanese Documentation Project

     Original revision: 1.123
     $FreeBSD$
-->

<chapter id="kernelconfig">
  <chapterinfo>
    <authorgroup>
      <author>
	<firstname>Jim</firstname>
	<surname>Mock</surname>
	<contrib>改訂および再構成</contrib>
	<!-- Mar 2000 -->
      </author>
    </authorgroup>
    <authorgroup>
      <author>
	<firstname>Jake</firstname>
	<surname>Hamby</surname>
	<contrib>原作</contrib>
	<!-- 6 Oct 1995 -->
      </author>
    </authorgroup>
  </chapterinfo>

  <title>FreeBSD カーネルのコンフィグレーション</title>

  <sect1 id="kernelconfig-synopsis">
    <title>この章では</title>

    <!--
    <para><emphasis>訳: &a.jp.tomo;、&a.jp.yoshiaki; 1996 年 11 月 2 日</emphasis></para>
    -->
    <indexterm>
      <primary>カーネル</primary>
      <secondary>カスタムカーネルの構築</secondary>
    </indexterm>

    <para>カーネルは &os; オペレーティングシステムの中核をなすもの
      です。カーネルは、メモリ管理、セキュリティ制御の強制、ネットワー
      ク、ディスクアクセスなどを担っています。&os; はどんどん動的に
      構成することができるようになっていますが、まだ、時にはカーネルコ
      ンフィグレーションをやり直して、再構築する必要があります。</para>

    <para>この章では、以下のことを扱っています。</para>

    <itemizedlist>
      <listitem>
	<para>なぜカスタムカーネルの構築が必要になることがあるのか。</para>
      </listitem>

      <listitem>
	<para>コンフィグレーションファイルの書き方や、既存のコンフィグ
	  レーションファイルの置き換え。</para>
      </listitem>

      <listitem>
	<para>カーネルコンフィグレーションファイルから新しいカーネルを構
	  築する方法。</para>
      </listitem>

      <listitem>
	<para>新しいカーネルのインストール方法。</para>
      </listitem>

      <listitem>
	<para><filename>/dev</filename> 下に必要となる項目を作成する方法。</para>
      </listitem>

      <listitem>
	<para>うまく行かないときの問題解決法。</para>
      </listitem>
    </itemizedlist>
  </sect1>

  <sect1 id="kernelconfig-custom-kernel">
    <title>なぜカスタムカーネルを作るか?</title>

    <para>伝統的に、&os; のカーネルは <quote>モノリシック</quote>
      (monolithic) カーネルと呼ばれるものでした。
      これは、カーネルが単一の巨大なプログラムで、
      扱えるデバイスは固定されていて、
      カーネルの振る舞いを変えたければ新しいカーネルを構築して、
      コンピュータを再起動して新しいカーネルを動かさなれければならなかった
      ということです。</para>

    <para>今日では &os; は、カーネルの機能のかなりが必要に応じて動
      的にカーネルに組み込んだり外したりできるモジュールにおかれている
      モデルへと、急速に移行しています。こうしてカーネルは (ノート PC 
      の PCMCIA カードのように) 突如使えるようになったハードウェアに対
      応したり、カーネルが作成された時点では必要なかった新たな機能を取
      り入れられるようになります。このようなカーネルはモジュラ (modular)
      カーネルと呼ばれます。くだけた表現では、KLD とも呼ばれます。</para>

    <para>しかしながら、いまだにいくらかは静的にカーネルを構成する必要
      があります。ある場合においては、機能がカーネルとあまりに密接に結
      びついているため、動的に組み込むことができません。ほかには、単に
      まだ誰もその機能に対する組み込み可能なカーネルモジュールを書く時
      間をとっていないだけということもあります。</para>

    <para>システムに合わせたカーネルの構築はほとんどすべての
      &unix; ユーザが
      避けて通ることのできない最も重要な通過儀礼の1つです。
      この作業は、多くの時間を必要としますが、あなたの &os;
      システムに多くの利益をもたらします。
      広範囲のハードウェアをサポートしなければならない
      <filename>GENERIC</filename>カーネルとは異なり、
      システムに合わせたカーネルは
      <emphasis>あなたの</emphasis> PC
      のハードウェアのみをサポートします。これは、
      次にあげるような利益をもたらします。</para>

    <itemizedlist>
      <listitem>
	<para>素早く起動します。
	  カーネルはあなたのシステム上にあるハードウェアしか
	  検出を行わないので、
	  あなたのシステムの起動にかかる時間は劇的に短くなります。
	</para>
      </listitem>

      <listitem>
	<para>メモリの消費量が減少します。
	  システムに合わせたカーネルは、大抵
	  <filename>GENERIC</filename>
	  カーネルより少ないメモリしか消費しません。
	  カーネルは常に実メモリ上に存在しなければならないので、
	  これは重要なことです。
	  したがって、RAM が少ないシステムでは、
	  カーネルの再構築は大変重要です。</para>
      </listitem>

      <listitem>
	<para>追加のハードウェアをサポートします。
	  システムに合わせたカーネルは、サウンドカードなど
	  <filename>GENERIC</filename>
	  カーネルに存在しないデバイスのサポートを追加することができます。</para>
      </listitem>
    </itemizedlist>
  </sect1>

  <sect1 id="kernelconfig-building">
    <title>カスタムカーネルの構築とインストール</title>
    <indexterm>
      <primary>カーネル</primary>
      <secondary>構築 / インストール</secondary>
    </indexterm>

    <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 のための開発ブランチです)のいずれかを表します。
      各アーキテクチャのディレクトリ内部にあるファイルはすべて
      そのアーキテクチャでのみ使用され、残りのコードは
      &os; が他のプラットフォームに移植される際に共有されます。
      サポートされているデバイス、ファイルシステム、オプションが、
      それぞれ各々のサブディレクトリに分かれている、
      という論理的な構成に注意してください。&os; 5.X 以降では
      <filename>sparc64</filename> に対応しています。
      また、その他のアーキテクチャの開発も行われています。</para>

    <note>
      <para>もし、あなたのシステムに<filename>/usr/src/sys</filename>
	以下のディレクトリが<emphasis>なければ</emphasis>、
	カーネルのソースが インストールされていません。
	もっとも簡単な方法は (<username>root</username>で)
	<command>/stand/sysinstall</command>
	を用いて以下のようにすることです。
	<guimenuitem>設定 (Configure)</guimenuitem>
	を選んでから
	<guimenuitem>配布ファイル (Distribution)</guimenuitem>
	を選択し、<guimenuitem>src</guimenuitem>
	の中の <guimenuitem>sys</guimenuitem>
	をインストールしてください。
	<application>sysinstall</application>
	が嫌いで、<quote>公式</quote> &os; CDROM を利用できるなら、
	コマンドラインからソースコードをインストールすることもできます。
      </para>

      <screen>&prompt.root; <userinput>mount /cdrom</userinput>
&prompt.root; <userinput>mkdir -p /usr/src/sys</userinput>
&prompt.root; <userinput>ln -s /usr/src/sys /sys</userinput>
&prompt.root; <userinput>cat /cdrom/src/ssys.[a-d]* | tar -xzvf -</userinput></screen>
    </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>慣習として、この名前はすべて大文字でつづられます。もし、
      いくつかの異なるハードウェアの &os; マシンを扱うなら、
      この名前にホスト名を含めるとよいでしょう。ここでは、例として
      <filename>MYKERNEL</filename> と呼ぶことにします。</para>

    <tip>
      <para>カーネルコンフィグレーションファイルを、直に
	<filename>/usr/src</filename> の下に置くのはよい考えとはいえま
	せん。なにか問題が起きたときに、
	<filename>/usr/src</filename> を消してやり直したいと思うかもし
	れません。その後で、あなたがカスタマイズしたカーネルコンフィグ
	レーションファイルを消してしまったことに気づくのに時間はかから
	ないでしょう。
	また、<filename>GENERIC</filename> ファイルを直接編集しないでください。
	なぜなら、編集後に
	<link linkend="cutting-edge">ソースツリーをアップデート</link>
	すると、ファイルが上書きされ、変更点が失われてしまいます。</para>

      <para>カーネルコンフィグレーションファイルは他の場所において、
	<filename>i386</filename> ディレクトリにシンボリックリンクを張
	る方がよいでしょう。</para>

      <para>たとえば、次のようにします。</para>

      <screen>&prompt.root; <userinput>cd /usr/src/sys/i386/conf</userinput>
&prompt.root; <userinput>mkdir /root/kernels</userinput>
&prompt.root; <userinput>cp GENERIC /root/kernels/<replaceable>MYKERNEL</replaceable></userinput>	
&prompt.root; <userinput>ln -s /root/kernels/<replaceable>MYKERNEL</replaceable></userinput></screen>
    </tip>

    <note>
      <para>この作業は <username>root</username>
	権限でおこなう必要があります。そうでなければ、
	<errortype>permission denied</errortype>
	というエラーが出ます。</para>
    </note>

    <para>では、<filename>MYKERNEL</filename>
      をあなたの好きなエディタで編集してください。もし、
      システムをインストールしたばかりならば、利用できるエディタは
      <application>vi</application>
      だけかもしれません。ここでは使い方の説明はしませんが、
      <link linkend="bibliography">参考図書</link>
      にあるような多くの本で詳しく説明 されていますので、
      そちらを参照してください。&os; にはより簡単なエディタとして
      <application>ee</application>
      があります。初心者の方であればこちらをエディタに選ぶとよいでしょう。
      まずファイルの最初の方のコメント行を編集し、あなたのコンフィグ
      レーションに合せて変更した点などを記述して
      <filename>GENERIC</filename> と区別がつく
      ようにしておきましょう。</para>
    <indexterm><primary>SunOS</primary></indexterm>

    <para>もし &sunos; や他の BSD オペレーティングシステムでカーネルの
      再構築をしたことがあれば、このファイルはとても親しみ
      やすいでしょう。しかし、DOSのようなその他の
      オペレーティングシステムしか知らない人から見れば、
      <filename>GENERIC</filename>
      コンフィグレーションファイルはとても
      なじみにくいものかもしれません。そのような場合は、
      <link linkend="kernelconfig-config"> コンフィグレーションファイル
      </link> の節をゆっくりと注意深く読んでください。</para>

    <note>
      <para>&os; Project の最新のソースファイルと、<link
	linkend="cutting-edge">あなたのソースツリーを同期させている</link>
	場合、アップデートを行う際には、必ず
	<filename>/usr/src/UPDATING</filename>
	ファイルをチェックしてください。
	このファイルには、&os;
	をアップデートする際の重要な問題がすべて書かれています。
	<filename>/usr/src/UPDATING</filename> は常にあなたの &os;
	ソースファイルのバージョンと同期していますので、
	新しい情報については、ハンドブックよりも正確なものとなっています。</para>
    </note>

    <para>ここで、カーネルのソースコードをコンパイルしなくてはなりませ
      ん。手順は二つあり、どちらを使うかは、なぜカーネルを再構築するか
      と、動かしている &os; のバージョンによって決まります。</para>

    <itemizedlist>
      <listitem>
	<para>カーネルのソースコード<emphasis>だけ</emphasis>インストー
	  ルしているなら、手順 1 にしたがってください。</para>
      </listitem>

      <listitem>
	<para>4.0 より前の &os; を使っていて、
	  <maketarget>make world</maketarget> を行って &os;&nbsp;4.0
	  以上にアップグレードしないなら、
	  手順 1 にしたがってください。</para>
      </listitem>

      <listitem>
	<para>(<literal>IPFIREWALL</literal> オプションを追加するなど
	  のように) ソースコードを更新せずに新しいカーネルを構築するな
	  らどちらの手順を用いても構いません。</para>
      </listitem>
 
      <listitem>
	<para><maketarget>make world</maketarget>
	  の一環としてカーネルの再構築を行っているなら、
	  手順 2 にしたがってください。</para>
      </listitem>
    </itemizedlist>

    <procedure>
      <title>手順 1: <quote>伝統的な</quote> 方法によるカーネル構築</title>

      <step>
	<para>カーネルソースコードを生成するため、&man.config.8; を実
	  行します。</para>

	<screen>&prompt.root; <userinput>/usr/sbin/config <replaceable>MYKERNEL</replaceable></userinput></screen>
      </step>

      <step>
	<para>カーネルを構築するためのディレクトリに移動します。
	  ディレクトリの場所は、上のコマンドを実行した後に表示されます。</para>

	<screen>&prompt.root; <userinput>cd ../compile/<replaceable>MYKERNEL</replaceable></userinput></screen>

	<para>5.0 より前のバージョンの &os; では、
	  かわりに以下を実行してください。</para>
	
	<screen>&prompt.root; <userinput>cd ../../compile/<replaceable>MYKERNEL</replaceable></userinput></screen>
      </step>

      <step>
	<para>カーネルをコンパイルします。</para>

	<screen>&prompt.root; <userinput>make depend</userinput>
&prompt.root; <userinput>make</userinput></screen>
      </step>

      <step>
	<para>新しいカーネルをインストールします。</para>

	<screen>&prompt.root; <userinput>make install</userinput></screen>
      </step>
    </procedure>

    <procedure>
      <title>手順 2: <quote>新しい</quote> 方法によるカーネル構築</title>

      <step>
	<para><filename>/usr/src</filename> ディレクトリに移動します。</para>

	<screen>&prompt.root; <userinput>cd /usr/src</userinput></screen>
      </step>

      <step>
	<para>カーネルをコンパイルします。</para>

	<screen>&prompt.root; <userinput>make buildkernel KERNCONF=<replaceable>MYKERNEL</replaceable></userinput></screen>
      </step>

      <step>
	<para>新しいカーネルをインストールします。</para>

	<screen>&prompt.root; <userinput>make installkernel KERNCONF=<replaceable>MYKERNEL</replaceable></userinput></screen>
      </step>
    </procedure>

    <note>
      <para>&os;&nbsp;4.2 とそれ以前の場合は、
        <literal>KERNCONF=</literal>
        ではなく
        <literal>KERNEL=</literal>
        としなければなりません。
        2001 年 2 月 2 日より前の 4.2-STABLE では
	<literal>KERNCONF=</literal> を認識しません。</para>
    </note>

    <indexterm>
      <primary><command>cvsup</command></primary>
    </indexterm>
    <indexterm><primary>anonymous CVS</primary></indexterm>
    <indexterm><primary>CTM</primary></indexterm>
    <indexterm>
      <primary>CVS</primary>
      <secondary>anonymous</secondary>
    </indexterm>

    <para>何らかの方法であなたのソースツリーをアップグレードして
      <emphasis>いない</emphasis> 場合
      (<application>CVSup</application>, <application>CTM</application>,
      <application>anoncvs</application> などを実行していない場合)、
      <command>config</command>, <maketarget>make depend</maketarget>,
      <command>make</command>, <maketarget>make install</maketarget>
      の手順を実行してください。</para>

    <indexterm>
      <primary><filename>kernel.old</filename></primary>
    </indexterm> 

    <para>新しいカーネルはルートディレクトリに
      <filename>/kernel</filename>という 名前でコピーされ、
      今までのカーネルは <filename>/kernel.old</filename>
      という名前へ変更されます。では、システムをシャットダウン、
      リブートして新しいカーネルを使ってください。
      うまく行かない場合は、この章の終りの
      <link linkend="kernelconfig-trouble">問題が起きた場合には</link>
      を参照してください。この章の新しい
      <link linkend="kernelconfig-noboot">カーネルが起動しない</link>
      場合のリカバリの方法を注意深く読んでおいてください。</para>

    <note>
      <para>&os; 5.0 では、カーネルはモジュールとともに
	<filename>/boot/kernel</filename> にインストールされ、
	今までのカーネルは <filename>/boot/kernel.old</filename>
	にバックアップされます。
	ブート &man.loader.8; や設定などのブートプロセスに関係する他のファイルは、
	<filename>/boot</filename> に置かれます。
	サードパーティ製やカスタムモジュールを
	<filename>/boot/modules</filename> に置くこともできますが、
	コンパイルしたカーネルとモジュールを同期しておく必要があります。
	コンパイルしたカーネルとモジュールが対応しない場合には、
	システムが不安定になったり、正常に動作しなくなる可能性があります。</para>
    </note>

    <note>
      <para>&os;&nbsp;4.X 以前のバージョンを使っていて、
	(サウンドカードなど) 新しいデバイスを追加した場合は、
	使う前に <filename>/dev</filename>
	ディレクトリにデバイスノードを追加しなければならないかもしれません。
	詳しくは、この章で後ほど出てくる
	<link linkend="kernelconfig-nodes">デバイスノードの作成</link>
	をご覧ください。</para>
    </note>
  </sect1>

  <sect1 id="kernelconfig-config">
    <title>コンフィグレーションファイル</title>
    <indexterm>
      <primary>カーネル</primary>
      <secondary>LINT</secondary>
    </indexterm>
    <indexterm><primary>LINT</primary></indexterm>
    <indexterm>
      <primary>カーネル</primary>
      <secondary>コンフィグレーションファイル</secondary>
    </indexterm>

    <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>

    <note><para>&os; 5.X では <filename>LINT</filename> は存在しません。
      アーキテクチャ依存のオプションについては <filename>NOTES</filename>
      をご覧ください。
      主にアーキテクチャ非依存のいくつかのオプションは
      <filename>/usr/src/sys/conf/NOTES</filename> に記載されています。
      このファイルにも目を通すことをお奨めします。</para></note>

    <indexterm>
      <primary>カーネル</primary>
      <secondary>コンフィグレーションファイル例</secondary>
    </indexterm>

    <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 &os;/i386
#
# このファイルについて更に情報が必要なら、ハンドブックのカーネル
# コンフィグレーションファイルのセクションを参照して下さい。
#
#    http://www.&os;.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig-config.html
#
# doc ディストリビューションをインストールした場合、ハンドブックは
# ローカルマシンの /usr/share/doc/handbook でも見ることができます。
# 最新版は &os; の WWW サーバ (http://www.FreeBSD.org/) を参照して
# 下さい。
#
# ../../conf/NOTES および NOTES ファイルには、デバイス行に関する大量の
# オプションと詳細な説明があります。もしある行の目的又は必要性について
# 疑問がある場合はまず NOTES をチェックして下さい。
#
# &dollar;FreeBSD: src/sys/i386/conf/GENERIC,v 1.380 2003/03/29 13:36:41 mdodd Exp $</programlisting>

    <para>以下は <emphasis>すべての</emphasis> カーネルの構築に
      必須のキーワードです:</para>
    <indexterm>
      <primary>カーネルオプション</primary>
      <secondary>machine</secondary>
    </indexterm>

    <programlisting>machine		i386</programlisting>

    <para>マシンのアーキテクチャです。
      これは <literal>i386</literal>, <literal>pc98</literal>, 
      <literal>sparc64</literal>, <literal>alpha</literal>,
      <literal>ia64</literal>, <literal>amd64</literal> または
      <literal>powerpc</literal> のいずれかでなければなりません。</para>

    <indexterm>
      <primary>カーネルオプション</primary>
      <secondary>cpu</secondary>
    </indexterm>
    <programlisting>cpu          I486_CPU
cpu          I586_CPU
cpu          I686_CPU</programlisting>

    <para>上記のオプションは、あなたのシステムの CPU タイプを指定します。
      複数の行を書いても構いません
      (例: <literal>I586_CPU</literal> とすべきか
      <literal>I686_CPU</literal> とすべきかはっきり分からない場合)。
      しかしながら、カスタムカーネルを作る場合、あなたの持つ CPU
      だけを指定するのがベストです。
      もしあなたの CPU がどのタイプか分からない場合、
      <filename>/var/run/dmesg.boot</filename>
      ファイルを確認して起動メッセージを調べるとよいでしょう。</para>

    <indexterm>
      <primary>カーネルオプション</primary>
      <secondary>cpu type</secondary>
    </indexterm>

    <para>&os; のソースはまだ <literal>I386_CPU</literal> に対応していますが、
      -STABLE および -CURRENT では、デフォルトで無効になっています。
      386 クラスの CPU に &os; をインストールするには、
      以下のような方法があります。</para>

    <itemizedlist>
      <listitem>
        <para>古い &os; リリースをインストールし、<xref linkend="kernelconfig-building">
	  で説明されている方法でソースコードから再構築する。</para>
      </listitem>

      <listitem>
        <para>新しいコンピュータでユーザランドとカーネルを構築し、
	  このコンパイルした <filename>/usr/obj</filename> ファイルを使って
	  386 のコンピュータにインストールする
	  (詳細については <xref linkend="small-lan"> をご覧ください)。</para>
      </listitem>

      <listitem>
        <para><literal>I386_CPU</literal> に対応しているカーネルを含む、自分用の
	  FreeBSD インストール CD-ROM を作成する。</para>
      </listitem>
    </itemizedlist>

    <para>この 3 つの方法の中で最も簡単なのは、おそらく一番目の方法ですが、
      386 クラスのコンピュータにとって用意することが難しいぐらい多くのディスク容量を必要とします。</para>

    <indexterm>
      <primary>カーネルオプション</primary>
      <secondary>ident</secondary>
    </indexterm>

    <programlisting>ident          GENERIC</programlisting>

    <para>ここはカーネルの識別名を書きます。
      あなたがカーネルに付けたい名前に書き換えて下さい
      (前記の例の <literal>MYKERNEL</literal> のように)。
      <literal>ident</literal> に書いた名前はカーネルを起動する時に
      表示されるので、
      普段使っているカーネルと区別したいときは、
      新しいカーネルに違う名前を付けると
      良いでしょう(例: 実験的なカーネルを構築する場合)。</para>
    <indexterm>
      <primary>カーネルオプション</primary>
      <secondary>maxusers</secondary>
    </indexterm>

    <programlisting>maxusers          <replaceable>n</replaceable></programlisting>

    <para><literal>maxusers</literal> オプションは重要なシステムテーブルの
      サイズを決定します。
      この数字はあなたのマシンを同時に使うと思われるユーザー数と
      おおよそ等しくするのが良いでしょう。</para>

    <para>&os;&nbsp;4.5 からは、これを明示的に <literal>0</literal>
      に設定すると、システムが設定を自動調整します<footnote>
	<para>自動調整アルゴリズムは、<literal>maxuser</literal>
	  を、最小値が 32、最大値が 384
	  の間で、システムのメモリ合計と等しく設定します。</para>
	</footnote>。
      &os;&nbsp;5.X では <literal>maxusers</literal> が指定されないと、
      デフォルトで <literal>0</literal> に設定されます。
      4.5 より前のバージョンの &os;
      を使っているか、自分で管理したい場合、特に
      X ウインドウシステムを使ったり、ソフトウエアをコンパイルするなら、
      <literal>maxusers</literal> は最低 4 にして下さい。
      その理由は、<literal>maxusers</literal> によって計算される最も
      重要なテーブルがプロセスの最大数で、それは
      <literal>20 + 16 * maxusers</literal> となります。
      もし、<literal>maxusers</literal> を 1 にすると、
      同時に 36 プロセスしか利用できなくなりますが、
      システムは起動時に 18 ほどのプロセスを立ち上げ、
      X ウインドウシステムは 15 ほどのプロセスを立ち上げるので、
      オンラインマニュアルを読むような単純なタスクでさえ
      フィルタ、展開、表示に 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>。
	それは単に、あなたのシステムを使うであろうユーザの最大数や
	それぞれのユーザがどれくらいのプロセスを走らせるかに
	合わせて各種テーブルの大きさを設定するだけです。
	同時に<emphasis>リモートログインするユーザと X 端末ウィンドウ</emphasis>の最大数を制限するキーワードは
	<link linkend="kernelconfig-ptys">
	  <literal>pseudo-device pty 16</literal></link> です。
      </para>
    </note>

    <programlisting># Floating point support - do not disable.
device          npx0     at nexus? port IO_NPX irq 13</programlisting>

    <para><literal>npx0</literal> はハードウェアコプロセッサか
      ソフトウエアエミュレータのどちらかである浮動小数点演算ユニットへの
      &os; におけるインタフェースです。
      これは任意選択では<emphasis>ありません</emphasis>。</para>

    <programlisting># Pseudo devices - the number indicates how many units to allocate.
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>

    <para>以下に続くすべては大体において追加設定項目です。
      詳細は各項目の次に書かれている注意書きを参照して下さい。</para>

    <programlisting>#To statically compile in device wiring instead of /boot/device.hints
#hints          "GENERIC.hints"         #Default places to look for devices.</programlisting>

    <para>&os; 5.X、およびそれより新しいバージョンでは、
      デバイスドライバのオプションは &man.device.hints.5;
      を用いて設定されます。
      &man.loader.8; は、起動時にデフォルトで
      <filename>/boot/device.hints</filename> を確認します。
      <literal>hints</literal> オプションを用いると、
      カーネルにこれらのヒント情報を静的に加えてコンパイルできます。
      その場合には、<filename>/boot</filename> に
      <filename>device.hints</filename>
      ファイルを作成する必要はありません。</para>

    <!-- XXX: Add a comment here that explains when compiling hints into the kernel is a good idea and why. -->

    <programlisting>#makeoptions     DEBUG=-g          #Build kernel with gdb(1) debug symbols</programlisting>

    <para>インストール先のディスク容量を節約するため、
      通常の &os; のビルド過程ではデバッグ情報は含まれません。
      また、作成されたカーネルをリンクした後で、ほとんどのシンボル情報は削除されます。
      もし、-CURRENT ブランチにあるカーネルをテストしようとしている、
      または自分で変更した &os; カーネルをテストしたいのであれば、
      この行のコメントをはずしてください。
      &man.gcc.1; の <option>-g</option> オプションを有効にし、
      デバッグ情報を生成するようにします。
      <quote>伝統的な</quote> 方法でカーネルを構築する場合
      (詳細については <xref linkend="kernelconfig-building"> をご覧ください)
      には、&man.config.8; の <option>-g</option>
      オプションを用いて同様のことができます。</para>

    <programlisting>options          MATH_EMULATE      #Support for x87 emulation</programlisting>

    <para>この行では、あなたのコンピュータが浮動小数点演算コプロセッサを
      持たない場合(CPU が 386 又は 486SX)、
      カーネルにシミュレートさせるよう設定します。
      あなたが 486DX, 又は (387 や 487 チップを別途搭載した) 386, 486SX
      又は更に上位 (&pentium;, &pentium&nbsp;II 他)
      を持っている場合はコメントアウトして下さい。</para>

    <note>
      <para>&os; の浮動小数点エミュレーションルーチンはあまり正確では
	<emphasis>ありません</emphasis>。
	もしあなたが浮動小数点コプロセッサを持っておらず、
	かつベストな演算精度が必要であれば、GNU の浮動小数点サポートを
	利用する <literal>GPL_MATH_EMULATE</literal> を使ってみて下さい。
	このオプションはライセンス上の理由によりデフォルトでは
	含まれていません。</para>

      <para>浮動小数点演算コプロセッサを搭載していないような古い
	CPU は標準ではなくなり、また、そのような CPU に対応するには、多くの場合、
	<filename>GENERIC</filename>
	カーネルに対して追加のオプションを設定する必要があるため、&os; 5.X では、
	浮動小数点エミュレーションはデフォルトで無効になっています。</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>

    <note><para>&os; 5.X では、<literal>FFS_ROOT</literal>
	はもう必要ありません。</para></note>

    <programlisting>options          UFS_ACL      #Support for access control lists</programlisting>

    <para>このオプションは、現時点で &os;&nbsp;5.X のみに存在しているもので、
      カーネルのアクセス制御リストのサポートを有効にします。
      この機能は拡張属性および <acronym>UFS2</acronym> が有効になっていることに依存し、
      <xref linkend="fs-acl"> で機能の説明が行われています。
      <acronym>ACL</acronym> はデフォルトで有効にされています。
      もし、これまでにファイルシステムで有効にしていたのであれば、
      カーネルの中で無効にすべきではありません。
      なぜならば、無効にするとアクセス制御リストが削除され、
      ファイルの保護が予想できない方法で行われるためです。</para>

    <programlisting>options          UFS_DIRHASH  #Improve performance on big directories</programlisting>

    <para>このオプションは、メモリを多少余分に食うものの、
      大きなディレクトリに対するディスク操作を高速化する機能を有効にします。
      大規模なサーバや対話的なワークステーションではこのオプションを残しておいて、
      ファイアウォールのように、メモリが貴重で
      ディスクアクセス速度がそれほど重要でない
      小規模なシステムでは削除するとよいでしょう。</para>

    <programlisting>options          SOFTUPDATES  #Enable FFS Soft Updates support</programlisting>

    <para>このオプションは、カーネル内の Soft Updates 機能を有効にし、
      ディスクへの高速な書き込みを支援します。
      カーネルがこの機能を提供していても、
      特定のディスクに対してはこのオプションを有効にする必要があります。
      &man.mount.8; の出力を見て、使用しているディスクで
      Soft Updates が有効になっているかどうかを確認してください。
      <literal>soft-updates</literal> オプションが見当たらなければ、
      (現在使用しているファイルシステムには) &man.tunefs.8; や、
      (新規のファイルシステムには) &man.newfs.8;
      コマンドで有効にする必要があります。</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>

    <note><para>&os; 5.X では、メモリファイルシステムとして、MFS に代わり
	&man.md.4; を使用した UFS ファイルシステムが使われます。
	メモリディスクを使用したファイルシステムの設定については
	&man.mdconfig.8;, &man.mdmfs.8; および <xref linkend="disks-virtual">
	をご覧ください。
	<literal>MFS</literal>
	オプションは今後サポートされません。</para></note>

    <indexterm>
      <primary>カーネルオプション</primary>
      <secondary>NFS</secondary>
    </indexterm>
    <indexterm>
      <primary>カーネルオプション</primary>
      <secondary>NFS_ROOT</secondary>
    </indexterm>
    <programlisting>options          NFS          #Network Filesystem
options          NFS_ROOT     #NFS usable as root device, NFS required</programlisting>

    <para>ネットワークファイルシステム。
      &unix; ファイルサーバから TCP/IP を介してパーティションを
      マウントするのでない限り、これらの行をコメントアウトして下さい。</para>

    <indexterm>
      <primary>カーネルオプション</primary>
      <secondary>MSDOSFS</secondary>
    </indexterm>
    <programlisting>options          MSDOSFS      #MSDOS Filesystem</programlisting>

    <para>&ms-dos; ファイルシステム。
      起動時に DOS でフォーマットされたハードドライブを
      マウントするのでない限り、この行は安全にコメントアウトできます。
      この機能は最初に DOS パーティションをマウントする時に自動的に
      ロードされます。
      又、優秀な <application>mtools</application>
      (Ports Collection にあります) を使ってもマウント、
      アンマウントすることなしに 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; のようなプログラムに、どんなプロセスが走っているか
      に関するより多くの情報を提供させる事ができます。
      &os; 5.X では、ほとんどのデバッグおよびモニタリングツールが
      <literal>PROCFS</literal> なしで起動するので、
      ほとんどの環境では <literal>PROCFS</literal> を必要としません。
      さらに、5.X-CURRENT のカーネルで <literal>PROCFS</literal> を使う場合には、
      <literal>PSEUDOFS</literal> を含む必要があります。</para>

    <programlisting>options          PSEUDOFS     #Pseudo-filesystem framework</programlisting>

    <para>&os; 4.X では、<literal>PSEUDOFS</literal> を利用できません。
      &os; 4.X とは異なり、&os; 5.X を新しくインストールした場合には、
      プロセスファイルシステムはデフォルトではマウントされません。</para>

    <programlisting>options          COMPAT_43    #Compatible with BSD 4.3 [KEEP THIS!]</programlisting>

    <para>4.3BSD との互換機能です。
      有効なままにして下さい。
      この行をコメントアウトするとおかしな動きをするプログラムがあります。
    </para>

    <programlisting>options          COMPAT_FREEBSD4     #Compatible with &os;4</programlisting>

    <para>このオプションは、&os;&nbsp;5.X &i386; および alpha システムにおいて、
      古いバージョンの &os; でコンパイルされた古いシステムコールインターフェースを用いるアプリケーションを利用する場合に必要とされます。
      古いアプリケーションを実行するすべての
      &i386; および alpha システムで、このオプションの利用を推奨します。
      5.X でのみサポートされている ia64 や &sparc64; といったプラットフォームでは、
      このオプションは必要ありません。</para>

    <programlisting>options          SCSI_DELAY=15000    #Delay (in ms) before probing SCSI</programlisting>

    <para>この行は、カーネルがそれぞれの SCSI 機器を検出する前に
      15 秒間待つようにします。
      あなたが IDE ドライブしか持たないなら無視して結構です。
      そうでないなら、起動時間を短くするため、おそらく待つ時間を短く、
      5 秒くらいにしたいでしょう。
      勿論、そうした場合に &os; が SCSI 機器を認識しなくなった場合は
      時間を元に戻す必要があります。</para>

    <programlisting>options          UCONSOLE            #Allow users to grab the console</programlisting>

    <para>ユーザにコンソールを所有することを許可します。
      X のユーザには役に立ちます。
      たとえば <command>xterm -C</command>
      と入力すれば、コンソール <application>xterm</application>
      を実行できます。ここにはあなたが受け取る
      &man.write.1;, &man.talk.1; などのメッセージや、
      カーネルからのコンソールメッセージが表示されます。</para>

    <note><para>&os; 5.X では、<literal>UCONSOLE</literal>
	はもう必要ありません。</para></note>

    <programlisting>options          USERCONFIG          #boot -c editor</programlisting>

    <para>このオプションは起動メニューからコンフィグレーションエディタ
      を起動することができるようにします。</para>

    <programlisting>options          VISUAL_USERCONFIG   #visual boot -c editor</programlisting>

    <para>このオプションは起動メニューからビジュアルコンフィグレーション
      エディタを起動できるようにします。</para>

    <note><para>&os; バージョン 5.0 以降では、新しく &man.device.hints.5;
      を利用する方法が採用され、<literal>USERCONFIG</literal> は使われなくなりました。
      &man.device.hints.5; に関する詳しい情報は
      <xref linkend="device-hints"> をご覧ください。</para></note>

    <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 extensions
options 	_KPOSIX_PRIORITY_SCHEDULING</programlisting>

    <para>リアルタイム拡張が 1993 &posix; に追加されました。
      Ports Collection の内のいくつかのアプリケーション
      (たとえば <application>&staroffice</application>)
      はこれを使っています。</para>

    <note><para>&os; 5.X では、
      <literal>_KPOSIX_PRIORITY_SCHEDULING</literal>
      オプションがすべての機能を提供しています。
      そのため <literal>P1003_1B</literal> はもう必要ありません。</para></note>

    <indexterm>
      <primary>カーネルオプション</primary>
      <secondary>ICMP_BANDLIM</secondary>
    </indexterm>
    <indexterm>
      <primary>サービス妨害 (DoS)</primary>
    </indexterm>
    <programlisting>options		ICMP_BANDLIM		#Rate limit bad replies</programlisting>

    <para>このオプションは ICMP エラー応答のバンド幅制限を可能にします。
      サービス不能パケットによる攻撃からマシンを保護するために必要です。
    </para>

    <note><para>&os; 5.X では、この機能はデフォルトで有効です。
      <literal>ICMP_BANDLIM</literal>
      オプションは必要ありません。</para></note>

    <indexterm>
      <primary>カーネルオプション</primary>
      <secondary>SMP</secondary>
    </indexterm>
    <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>device          isa</programlisting>

    <para>&os; がサポートするすべての PC はこれらの内のひとつを
      持っています。
      あなたが IBM PS/2 (マイクロチャネルアーキテクチャ)
      マシンを持っている場合、&os;
      は、現時点では限定的な対応を提供しています。
      MCA の対応状況に関する詳細は、
      <filename>/usr/src/sys/i386/conf/LINT</filename>
      をご覧ください。</para>

    <programlisting>device          eisa</programlisting>

    <para>あなたが EISA マザーボードを持っている場合、
      この行を含めて下さい。これは EISA バスに接続されているすべての
      デバイスの自動検出と設定を可能にします。</para>

    <programlisting>device          pci</programlisting>

    <para>あなたが PCI マザーボードを持っている場合、この行を含めて下さい。
      これは PCI カードの自動検出と PCI から ISA バスへのゲートウエイを
      可能にします。</para>

    <programlisting>device          agp</programlisting>

    <para>システムが AGP カードを搭載している場合には、
      この行を含めてください。
      これにより AGP および (これらの機能をボードが持っている場合には)
      AGP GART に対応します。</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>ATA ディスクドライブには <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># 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>
      のエントリが無い、ネットワーク上の多くの異なったマシンに
      接続する際にも有用です &mdash; <literal>vt100</literal>
      は仮想的にすべてのプラットフォームで有効であるべきです。</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
	に設定している場合、&os; からアクセスするには、
	(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>

    <indexterm><primary>zip ドライブ</primary></indexterm>
    <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-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>
      のようなアプリケーションにより利用されます。
      <literal>pty</literal> の後の <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</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 トンネルを提供します。
      &os;&nbsp;4.4 からは、<literal>gif</literal> デバイスは
      <quote>auto-cloning (自動複製)</quote> しますので、
      (<literal>gif</literal> のあとに数値がこない)
      はじめの例を使ってください。
      それより前のバージョンの &os; では、数値が必要です。</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>

    <note>
      <para><literal>bpf</literal> 疑似デバイスは、&man.dhclient.8;
	がデフォルトルータ (ゲートウェイ) の IP アドレスなどを取得する
	ためにも使われています。DHCP を使っているなら、これはコメント
	アウトしないでください。</para>
    </note>

    <programlisting># USB support
#device         uhci          # UHCI PCI-&gt;USB interface
#device         ohci          # OHCI PCI-&gt;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>より詳細な情報と、&os; によりサポートされる他のデバイスに
      ついては <filename>/usr/src/sys/i386/conf/LINT</filename>
      を参照して下さい。</para>
  </sect1>

  <sect1 id="kernelconfig-nodes">
    <title>デバイスノードを作る</title>

    <indexterm><primary>デバイス ノード</primary></indexterm>
    <indexterm>
      <primary><command>MAKEDEV</command></primary>
    </indexterm>

    <note><para>&os;&nbsp;5.0 以降を動かしているなら、
      この節を飛ばして構いません。そのバージョンでは &man.devfs.5;
      を用いて、ユーザに意識させずにデバイスノードを割り当てています。</para></note>

    <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>

    <indexterm>
      <primary><command>MAKEDEV</command></primary>
    </indexterm>
    <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>カスタムカーネルを作る場合に起きるトラブルは、
        次の 5 種類に分けられます。</para>

    <variablelist>
      <varlistentry>
	<term><command>config</command> コマンドの失敗</term>

	<listitem>
	  <para>カーネルコンフィグレーションファイルに設定を行なってから
	    &man.config.8; コマンドが失敗したのであれば、
	    おそらくファイルのどこかに単純な間違いがあります。
            さいわい、&man.config.8;
            はトラブルの起きた行番号を出力しますので
	    <application>vi</application> で素早く見つけることができます。
	    例えば、次のように出力された場合</para>

            <screen>config: line 17: syntax error</screen>

	  <para><application>vi</application> のコマンドモードで
	    <command>17G</command> とタイプすれば、
            問題のところへ飛ぶことができます。
	    <filename>GENERIC</filename> カーネルのファイルや、
            他のリファレンスと比較して注意深く修正してください。</para>
	</listitem>
      </varlistentry>

      <varlistentry><term><command>make</command> コマンドの失敗</term>
	<listitem>
	  <para><command>make</command> コマンドが失敗した場合には、
	    カーネル設定で &man.config.8;
	    がとらえられなかったような間違いをしていることが多いようです。
            もう一度コンフィグレーションファイルを見直してください。
            それでも問題を解決することができなければ、
            &a.questions;
            へあなたのカーネルコンフィグレーションファイルをつけてメールしてください。
            誰かが素早く間違いを見つけてくれるでしょう。</para>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term>新しいカーネルのインストールの失敗</term>

	<listitem>
	  <para>カーネルが無事コンパイルできたのに、インストールに失敗
	    (<command>make install</command> または
	    <command>make installkernel</command> に失敗)
	    したら、最初に確認すべきことは、システムがセキュアレベル 1
	    以上で動いていないかどうかです (&man.init.8; 参照)。
	    カーネルのインストール時には、カーネルから immutable
	    (変更不可) フラグを外して、
	    新しい方に変更不可フラグを設定しようとします。セキュアレベル 1
	    以上では、システム内のどのファイルからも変更不可フラグを外せないため、
	    カーネルのインストールはセキュアレベル 0
	    以下で行わなければなりません。</para>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term>カーネルが起動しない<anchor
	  id="kernelconfig-noboot"></term>
	<listitem>
	  <para>新しいカーネルが起動しなかったり、
	    デバイスの認識をしない場合でもあわてないでください!
	    さいわい、&os;
	    には利用できないカーネルから復帰する洗練されたメカニズムがあります。
	    それは、&os;
	    のブートローダで起動したいカーネルを選択するだけです。
	    システムが 10 からカウントダウンしている時に、この機能が使えます。
	    <keycap>Enter</keycap> キー以外の任意のキーを押して、
	    <command>unload</command> と入力してから、
	    <command>boot <replaceable>kernel.old</replaceable></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>です。これができないのなら、&man.securelevel.8; を 0 
	      より大きい値にしているのかもしれません。
	      <filename>/etc/rc.conf</filename> の
	      <literal>kern_securelevel</literal> を
	      <literal>-1</literal> に変更して再起動してください。新し
	      いカーネルに満足したら、前の設定に戻してよいでしょう。</para>

	    <para>また、
	      新しい置き換えたカーネルあるいは重要ファイ
	      ルを動かしたり変更されないように
	      <quote>ロック</quote> するには 次のようにします。</para>

	    <screen>&prompt.root; <userinput>chflags schg /kernel</userinput></screen>

	  <para>&os; 5.X では、インストールする際に、カーネルの
	      immutable (変更不可) フラグを有効にしませんので、
	    おそらくこのことは問題の原因ではないでしょう。</para>
	  </note>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term>カーネルは動きますが &man.ps.1; は動きません!</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:
-->