<?xml version="1.0" encoding="euc-jp"?>
<!--
     The FreeBSD Documentation Project
     The FreeBSD Japanese Documentation Project

     Original revision: r46043
     $FreeBSD$
-->
<chapter xmlns="http://docbook.org/ns/docbook"
  xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
  xml:id="kernelconfig">
<!--<chapterinfo>
    <authorgroup>
      <author>
	<firstname>Jim</firstname>
	<surname>Mock</surname>
	<contrib>改訂および再構成 (2000 年 3 月): </contrib>
      </author>
    </authorgroup>
    <authorgroup>
      <author>
	<firstname>Jake</firstname>
	<surname>Hamby</surname>
	<contrib>原作 (1995 年 10 月 6 日): </contrib>
      </author>
    </authorgroup>
  </chapterinfo>
  -->

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

  <sect1 xml: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>新しいカーネルのインストール方法。</para>
      </listitem>

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

    <para>この章で表示されているすべてのコマンドは、<systemitem
      class="username">root</systemitem> 権限で実行する必要があります。</para>
  </sect1>

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

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

    <para>今日では、&os;
      カーネルのかなりの機能はモジュールに含まれるようになり、
      必要に応じて動的にカーネルに組み込んだり外したりできるようになりました。
      この移行により、
      動作しているカーネルが新しいハードウェアに迅速に対応したり、
      カーネルに新たな機能を取り入れられるようになります。
      このようなカーネルは、モジュラ (modular) カーネルと呼ばれます。</para>

    <para>しかしながら、
      いまだにいくらかは静的にカーネルを構成する必要があります。
      機能がカーネルとあまりに密接に結びついているため、
      動的に組み込むことができない場合があるためです。
      環境によっては、セキュリティの観点から、
      カーネルモジュールを読み込んだり外すことができず、
      必要となる機能を静的にカーネルにコンパイルしなければならない場合もあります。</para>

    <para>システムに合わせたカーネルを構築することは、多くの場合、
      高度な知識を持つ BSD ユーザが避けて通ることのできない通過儀礼です。
      この作業は多くの時間を必要としますが、&os;
      システムに利益をもたらします。
      広範囲のハードウェアをサポートしなければならない
      <filename>GENERIC</filename> カーネルとは異なり、カスタムカーネルは、
      使用しているコンピュータのハードウェアのみをサポートするように、
      必要のない機能を省くことができます。これは、
      次にあげるような利益をもたらします。</para>

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

      <listitem>
	<para>メモリの消費量を減らすことができます。
	  システムに合わせたカーネルは、
	  使用しない機能やデバイスドライバを含まないので、
	  大抵 <filename>GENERIC</filename>
	  カーネルより少ないメモリしか消費しません。
	  カーネルコードは常に物理メモリ上に存在し、
	  アプリケーションはその容量分のメモリを使用できないので、
	  これは重要なことです。
	  したがって、メモリが少ないシステムでは、
	  カーネルの再構築は重要です。</para>
      </listitem>

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

    <para>カスタムカーネルを構築する前に、再構築する理由を考えてください。
      ある特定のハードウェアに対応する必要がある場合に、
      そのハードウェアに対応するためのモジュールがすでに用意されていることがあります。</para>

    <para>カーネルモジュールは
      <filename>/boot/kernel</filename>
      にあります。モジュールによっては &man.kldload.8; により、
      すでに実行中のカーネルに動的に読み込まれています。
      ほとんどのカーネルドライバには、
      読み込み可能なモジュールやマニュアルページが用意されています。
      たとえば、&man.ath.4;
      ワイヤレスイーサネットドライバのマニュアルページには以下のような記述があります。</para>

    <screen>Alternatively, to load the driver as a module at boot time, place the
following line in &man.loader.conf.5;:

    if_ath_load="YES"</screen>

    <para><filename>/boot/loader.conf</filename> に
      <literal>if_ath_load="YES"</literal> を追加すると、
      起動時にモジュールが読み込まれるようになります。</para>

    <para>対応するモジュールが <filename>/boot/kernel</filename>
      に存在しないこともあります。
      特定のサブシステムでは、ほとんど多くの場合存在しません。</para>
  </sect1>

  <sect1 xml:id="kernelconfig-devices">
    <!--
    <sect1info>
      <authorgroup>
	<author>
	  <firstname>Tom</firstname>
	  <surname>Rhodes</surname>
	  <contrib>寄稿: </contrib>
	</author>
      </authorgroup>
    </sect1info>
    -->
    <title>システムのハードウェアについて知る</title>

    <para>カーネルコンフィグレーションファイルの編集を始める前に、
      コンピュータのハードウェア一覧を作成すると良いでしょう。
      デュアルブートシステムでは、
      現在インストールされている別のオペレーティングシステムの設定を調べることで、
      一覧を作成できます。
      たとえば、&microsoft; の
      <application>デバイスマネージャ</application>
      は、インストールされているデバイスに関する情報を持っています。</para>

    <note>
      <para>&microsoft.windows; のバージョンによっては、
	<application>システム</application> アイコンを使って、
	<application>デバイスマネージャ</application>
	にアクセスできます。</para>
    </note>

    <para>インストールされているオペレーティングシステムが &os;
      だけであれば、&man.dmesg.8; を使い、
      起動時に検出されたハードウェアの一覧を調べてください。
      &os; のほとんどのデバイスドライバにはマニュアルページが用意され、
      対応しているハードウェアの一覧を提供しています。
      たとえば、以下の行は、&man.psm.4;
      ドライバがマウスを検出したことを示しています。</para>

    <screen>psm0: &lt;PS/2 Mouse&gt; irq 12 on atkbdc0
psm0: [GIANT-LOCKED]
psm0: [ITHREAD]
psm0: model Generic PS/2 mouse, device ID 0</screen>

    <para>このハードウェアはシステムに存在するので、
      カスタムカーネルコンフィグレーションファイルからこのドライバを外さないでください。</para>

    <para><command>dmesg</command> が起動時の検出結果を表示しない場合には、
      かわりに <filename>/var/run/dmesg.boot</filename>
      で出力を確認してください。</para>

    <para>ハードウェアを見つけるためのもうひとつのツールは、
      より冗長な出力を行う &man.pciconf.8; です。
      たとえば、以下のようになります。</para>

    <screen>&prompt.user; <userinput>pciconf -lv</userinput>
ath0@pci0:3:0:0:        class=0x020000 card=0x058a1014 chip=0x1014168c rev=0x01 hdr=0x00
    vendor     = 'Atheros Communications Inc.'
    device     = 'AR5212 Atheros AR5212 802.11abg wireless'
    class      = network
    subclass   = ethernet</screen>

    <para>この出力は、<filename>ath</filename>
      ドライバがワイヤレスイーサネットデバイスにあることを示しています。</para>

    <para>&man.man.1; を <option>-k</option> フラグで実行すると、
      有用な情報を得ることができます。たとえば、
      ある特定の単語を含むマニュアルページの一覧を表示するには、
      以下のようになります。</para>

    <screen>&prompt.root; <userinput>man -k <replaceable>Atheros</replaceable></userinput></screen>

    <programlisting>ath(4)                   - Atheros IEEE 802.11 wireless network driver
ath_hal(4)               - Atheros Hardware Access Layer (HAL)</programlisting>

    <para>ハードウェアの一覧を作成したら、
      この一覧を利用して、
      カスタムカーネルのコンフィグレーションファイルを編集している時に、
      インストールされているハードウェアのドライバが削除されていないことを確認してください。</para>
  </sect1>

  <sect1 xml:id="kernelconfig-config">
    <!--
    <sect1info>
      <authorgroup>
	<author>
	  <firstname>Joel</firstname>
	  <surname>Dahl</surname>
	  <contrib>改訂: </contrib>
	</author>
      </authorgroup>
    </sect1info>
-->
    <title>コンフィグレーションファイル</title>

    <para>カスタムカーネルのコンフィグレーションファイルを作成し、
      カスタムカーネルを構築するには、
      &os; の全ソースツリーがまずインストールされている必要があります。</para>

    <para>もし <filename>/usr/src/</filename>
      が存在していなかったり、空であれば、
      カーネルのソースはインストールされていません。
      <xref linkend="svn"/> で説明した
      <application>Subversion</application>
      を使ってソースをインストールしてください。</para>

    <para>ソースをインストールしたら、
      <filename>/usr/src/sys</filename> を確認して下さい。
      このディレクトリには、いくつものサブディレクトリがあります。
      その中には、サポートされている各アーキテクチャ
      <filename>amd64</filename>,
      <filename>i386</filename>, <filename>ia64</filename>,
      <filename>pc98</filename>, <filename>powerpc</filename> および
      <filename>sparc64</filename> のサブディレクトリがあります。
      各アーキテクチャのディレクトリ内部にあるファイルはすべてそのアーキテクチャでのみ使用されます。
      残りのコードは、アーキテクチャに依存しない、
      すべてのプラットフォームで共有されるコードです。
      サポートされている各アーキテクチャには、
      <filename>conf</filename> サブディレクトリがあり、
      そのアーキテクチャ用の <filename>GENERIC</filename>
      カーネルコンフィグレーションファイルが用意されています。</para>

    <para>この <filename>GENERIC</filename> は編集しないでください。
      かわりに、このファイルを別名でコピーし、コピーを編集してください。
      慣習として、この名前はすべて大文字でつづられます。もし、
      いくつかの異なるハードウェアの &os; マシンを扱うなら、
      この名前にホスト名を含めるとよいでしょう。ここでは、例として
      <filename>MYKERNEL</filename> という名前の
      <literal>amd64</literal> アーキテクチャ用の <filename>GENERIC</filename>
      コンフィグレーションファイルのコピーを作成します。</para>

    <screen>&prompt.root; <userinput>cd /usr/src/sys/<replaceable>amd64</replaceable>/conf</userinput>
&prompt.root; <userinput>cp GENERIC <replaceable>MYKERNEL</replaceable></userinput></screen>

    <para>これで、<filename><replaceable>MYKERNEL</replaceable></filename>
      を <acronym>ASCII</acronym> テキストエディタで編集できます。
      初心者に対してより簡単なエディタである
      <application>ee</application> も &os;
      とともにインストールされていますが、
      デフォルトのエディタは <application>vi</application> です。</para>

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

    <para>コンフィグレーションファイルのフォーマットはシンプルです。
      各行はデバイスやサブシステム、引数、または簡単な説明を含んでいます。
      <literal>#</literal> に続くテキストはすべてコメントとして扱われ、
      無視されます。
      カーネルからデバイスもしくはサブシステムのサポートを外すには、
      対応する行の最初に <literal>#</literal> を入れてください。
      理解していない行に対しては、<literal>#</literal>
      を追加したり削除しないでください。</para>

    <warning>
      <para>デバイスやオプションのサポートを外すことは簡単で、
	その結果、カーネルを壊すことがあります。
	たとえば &man.ata.4;
	ドライバをカーネルコンフィグレーションファイルから除くと、
	<acronym>ATA</acronym>
	ディスクドライバを用いているシステムは起動しません。
	確信が持てないものについては、
	カーネルにサポートを残したままにしてください。</para>
    </warning>

    <para>このファイルで与えられる説明の他に、
      そのアーキテクチャの <filename>GENERIC</filename>
      と同じディレクトリにある
      <filename>NOTES</filename> にも説明があります。
      アーキテクチャに依存しないオプションについては、
      <filename>/usr/src/sys/conf/NOTES</filename> をご覧ください。</para>

    <tip>
      <para>カーネルコンフィグレーションファイルの編集を終えたら、
	ファイルのバックアップを <filename>/usr/src</filename>
	以外の場所に保存してください。</para>

      <para>または、カーネルコンフィグレーションファイルは他の場所において、
	シンボリックリンクを張る方法もあります。</para>

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

    <para>コンフィグレーションファイルでは <literal>include</literal>
      ディレクティブを利用できます。
      コンフィグレーションファイルに他のファイルを取り込むことができるので、
      すでに存在するファイルに対する小さな変更の管理が簡単にできます。
      オプションやドライバの追加が少しだけの場合には、
      以下の例のように <filename>GENERIC</filename>
      からの差分による管理が可能になります。</para>

    <programlisting>include GENERIC
ident MYKERNEL

options         IPFIREWALL
options         DUMMYNET
options         IPFIREWALL_DEFAULT_TO_ACCEPT
options         IPDIVERT</programlisting>

    <para>この方法では、ローカルのコンフィグレーションファイルには、
      ローカルにある <filename>GENERIC</filename>
      カーネルとの差分が記述されています。
      アップグレードが行われると、
      <filename>GENERIC</filename> に追加された新しい機能は、
      (<literal>nooptions</literal> や <literal>nodevice</literal>
      によって外されない限り) ローカルのカーネルにも反映されます。
      コンフィグレーションの構成要素に関する包括的な一覧と説明は
      &man.config.5; にあります。</para>

    <note>
      <para>利用可能なすべてのオプションを含むファイルを構築するには、
	以下のコマンドを <systemitem
	  class="username">root</systemitem> 権限で実行してください。</para>

      <screen>&prompt.root; <userinput>cd /usr/src/sys/<replaceable>arch</replaceable>/conf &amp;&amp; make LINT</userinput></screen>
    </note>

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

This is outdated and specific to one architecture.

    <programlisting>ident          GENERIC</programlisting>

    <para>これはカーネルの識別名です。
      たとえば、<literal><replaceable>MYKERNEL</replaceable></literal>
      のように、新しいカーネルに付けたい名前に書き換えて下さい。
      <literal>ident</literal> に書いた値はカーネルを起動する時に表示されます。</para>

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

    <para>このオプションは &man.gcc.1;
      がデバッグ情報を生成するようにします。</para>

    <programlisting>options          SCHED_ULE         # ULE scheduler</programlisting>

    <para>&os; のデフォルトのスケジューラです。
      このオプションはこのままにしてください。</para>

    <programlisting>options          INET              # InterNETworking</programlisting>

    <para>ネットワークのサポート。
      ほとんどのプログラムは少なくともループバックネットワークを必要とするので、
      基本的にこの行は必須です。</para>

    <programlisting>options          INET6             # IPv6 communications protocols</programlisting>

    <para>このオプションは IPv6 通信プロトコルを利用可能にします。</para>

    <programlisting>options          FFS               # Berkeley Fast Filesystem</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          UFS_ACL           # Support for access control lists</programlisting>

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

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

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

    <programlisting>options          MD_ROOT           # MD is a potential root device</programlisting>

    <para>このオプションは、メモリディスクによる root デバイスのサポートを有効にします。</para>

    <indexterm>
      <primary>カーネルオプション</primary>
      <secondary>NFS</secondary>
    </indexterm>
    <indexterm>
      <primary>カーネルオプション</primary>
      <secondary>NFS_ROOT</secondary>
    </indexterm>
    <programlisting>options          NFSCLIENT         # Network Filesystem Client
options          NFSSERVER         # Network Filesystem Server
options          NFS_ROOT          # NFS usable as /, requires NFSCLIENT</programlisting>

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

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

    <para>&ms-dos; ファイルシステム。
      起動時に DOS でフォーマットされたハードドライブのパーティションをマウントするのでなければ、
      この行はコメントアウトできます。
      この機能は最初に DOS パーティションをマウントする時に自動的にロードされます。
      <package>emulators/mtools</package> package
      を使うと、マウント、アンマウントすることなしに DOS
      フロッピーにアクセスすることができ、
      <literal>MSDOSFS</literal> を必要としません。</para>

    <programlisting>options          CD9660            # ISO 9660 Filesystem</programlisting>

    <para>CD-ROM 用の ISO 9660 ファイルシステム。
      もしシステムが CD-ROM ドライブを持っていないか、
      ときどきデータ CD をマウントするだけなら、
      データ CD を最初にマウントする時に自動的にロードされるので、
      この行をコメントアウトしてください。
      音楽 CD はこのファイルシステムを必要としません。</para>

    <programlisting>options          PROCFS            # Process filesystem (requires PSEUDOFS)</programlisting>

    <para>プロセスファイルシステム。
      これは <filename>/proc</filename>
      にマウントされるもので、他のプログラムに、
      どんなプロセスが走っているかについて、
      より多くの情報を提供する事ができます。
      ほとんどのデバッグおよびモニタリングツールが
      <literal>PROCFS</literal> なしで起動するので、
      ほとんどの環境では <literal>PROCFS</literal> を必要としません。
      デフォルトのインストールではこのファイルシステムをマウントしません。</para>

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

    <para>カーネルで <literal>PROCFS</literal> を使う場合には、
      <literal>PSEUDOFS</literal> のサポートが必要です。</para>

    <programlisting>options          GEOM_PART_GPT     # GUID Partition Tables.</programlisting>

    <para><link xlink:href="http://en.wikipedia.org/wiki/GUID_Partition_Table">GUID
      パーティションテーブル</link> (<acronym>GPT</acronym>) に対応します。
      GPT では、1 つのディスクに数多くのパーティション
      (標準の構成では最大 128) を作成可能です。</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; でコンパイルされた古いシステムコールインターフェースを用いるアプリケーションを利用する場合に必要とされます。
      古いアプリケーションを実行するすべての
      &i386; システムで、このオプションの利用を推奨します。
      &os;&nbsp;4.X より後にサポートされた ia64 や &sparc64;
      といったプラットフォームでは、このオプションは必要ありません。</para>

    <programlisting>options          COMPAT_FREEBSD5   # Compatible with &os;5</programlisting>

    <para>このオプションは、
      &os;&nbsp;5.X でコンパイルされた &os;&nbsp;5.X
      のシステムコールインタフェースを用いるアプリケーションを利用する場合に必要とされます。</para>

    <programlisting>options          COMPAT_FREEBSD6   # Compatible with &os;6</programlisting>

    <para>このオプションは、
      &os;&nbsp;6.X でコンパイルされた &os;&nbsp;6.X
      のシステムコールインタフェースを用いるアプリケーションを利用する場合に必要とされます。</para>

    <programlisting>options          COMPAT_FREEBSD7   # Compatible with &os;7</programlisting>

    <para>このオプションは、&os;&nbsp;8 以降において、
      &os;&nbsp;7.X でコンパイルされた &os;&nbsp;7.X
      のシステムコールインタフェースを用いるアプリケーションを利用する場合に必要とされます。</para>

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

    <para>この行は、カーネルがそれぞれの <acronym>SCSI</acronym>
      機器を検出する前に 5 秒間待つようにします。
      もし、<acronym>SCSI</acronym> 機器が認識されなければ、
      この数字を増やしてください。
      システムが <acronym>SCSI</acronym> ドライブを持っていなければ、
      無視するか、この数字を小さく変更して起動時間を短くできます。
</para>

    <programlisting>options          KTRACE            # ktrace(1) support</programlisting>

    <para>この行はデバッグに役立つカーネルプロセスのトレースを可能にします。</para>

    <programlisting>options          SYSVSHM           # SYSV-style shared memory</programlisting>

    <para>このオプションは System&nbsp;V 共有メモリを提供します。
      この機能の最も一般的な使用方法は X における XSHM 拡張です。
      多くのグラフィックス重視のプログラムではこの機能を自動的に描画のスピードアップに利用します。
      <application>Xorg</application> がインストールされているなら、
      これを含めてください。</para>

    <programlisting>options          SYSVMSG           # SYSV-style message queues</programlisting>

    <para>System&nbsp;V のメッセージのサポート。
      このオプションはカーネルサイズを数百バイト大きくするだけです。
    </para>

    <programlisting>options          SYSVSEM           # SYSV-style semaphores</programlisting>

    <para>System&nbsp;V セマフォのサポート。
      あまり使われませんが、カーネルサイズは数百バイト大きくなるだけです。</para>

    <note>
      <para>&man.ipcs.1; を <option>-p</option>
	で実行すると、これらの System&nbsp;V
	機能を使っているプロセスのリストを表示します。</para>
    </note>

    <programlisting>options 	     _KPOSIX_PRIORITY_SCHEDULING # POSIX P1003_1B real-time extensions</programlisting>

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

    <programlisting>options          KBD_INSTALL_CDEV  # install a CDEV entry in /dev</programlisting>

    <para>キーボードデバイスノードを <filename>/dev</filename>
      に作成するにはこのオプションが必要です。</para>

    <indexterm>
      <primary>カーネルオプション</primary>
      <secondary>SMP</secondary>
    </indexterm>
    <programlisting>device          apic               # I/O APIC</programlisting>

    <para>このデバイスは、I/O APIC の割り込みを有効にします。
      ユニプロセッサおよび SMP カーネル両方で使用できますが、
      SMP カーネルでは必須です。
      マルチプロセッサに対応するには
      <literal>options SMP</literal> を追加してください。</para>

    <note>
      <para>このデバイスは &i386; アーキテクチャにのみ存在します。
	他のアーキテクチャでは、この行を含まないでください。</para>
    </note>

    <programlisting>device          eisa</programlisting>

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

    <programlisting>device          pci</programlisting>

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

    <programlisting># Floppy drives
device          fdc</programlisting>

    <para>これはフロッピーディスクコントローラです。</para>

    <programlisting># ATA and ATAPI devices
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>device          ataraid                 # ATA RAID drives</programlisting>

    <para>ATA RAID ドライブには
      <literal>device ata</literal> と共にこのデバイスが必要です。</para>

    <programlisting><anchor xml: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># SCSI Controllers
device          ahb        # EISA AHA1742 family
device          ahc        # AHA2940 and onboard AIC7xxx devices
options         AHC_REG_PRETTY_PRINT    # Print register bitfields in debug
                                        # output.  Adds ~128k to driver.
device          ahd        # AHA39320/29320 and onboard AIC79xx devices
options         AHD_REG_PRETTY_PRINT    # Print register bitfields in debug
                                        # output.  Adds ~215k to driver.
device          amd        # AMD 53C974 (Teckram DC-390(T))
device          isp        # Qlogic family
#device         ispfw      # Firmware for QLogic HBAs- normally a module
device          mpt        # LSI-Logic MPT-Fusion
#device         ncr        # NCR/Symbios Logic
device          sym        # NCR/Symbios Logic (newer chipsets + those of `ncr')
device          trm        # Tekram DC395U/UW/F DC315U adapters

device          adv        # Advansys SCSI adapters
device          adw        # Advansys wide SCSI adapters
device          aha        # Adaptec 154x SCSI adapters
device          aic        # Adaptec 15[012]x SCSI adapters, AIC-6[23]60.
device          bt         # Buslogic/Mylex MultiMaster SCSI adapters

device          ncv        # NCR 53C500
device          nsp        # Workbit Ninja SCSI-3
device          stg        # TMC 18C30/18C50</programlisting>

    <para>このセクションでは、
      システムにない SCSI コントローラはコメントアウトして下さい。
      もし IDE しかないシステムならこれらすべてを削除できます。
      <literal>*_REG_PRETTY_PRINT</literal> 行は、
      対応するドライバに対するデバッグオプションです。</para>

    <programlisting># SCSI peripherals
device          scbus      # SCSI bus (required for SCSI)
device          ch         # SCSI media changers
device          da         # Direct Access (disks)
device          sa         # Sequential Access (tape etc)
device          cd         # CD
device          pass       # Passthrough device (direct SCSI access)
device          ses        # SCSI Environmental Services (and SAF-TE)</programlisting>

    <para>システムにない SCSI 周辺機器はコメントアウトしてください。
      もし IDE しか持っていないならこれらを完全に削除できます。</para>

    <note>
      <para>USB &man.umass.4; ドライバ、およびその他のいくつかのドライバは、
	本当の SCSI デバイスではないにもかかわらず、
	SCSI サブシステムを利用します。
	そのようなドライバがカーネルコンフィグレーションに含まれている場合には、
	SCSI サポートを削除しないでください。</para>
    </note>

    <programlisting># RAID controllers interfaced to the SCSI subsystem
device          amr        # AMI MegaRAID
device          arcmsr     # Areca SATA II RAID
device          asr        # DPT SmartRAID V, VI and Adaptec SCSI RAID
device          ciss       # Compaq Smart RAID 5*
device          dpt        # DPT Smartcache III, IV - See NOTES for options
device          hptmv      # Highpoint RocketRAID 182x
device          hptrr      # Highpoint RocketRAID 17xx, 22xx, 23xx, 25xx
device          iir        # Intel Integrated RAID
device          ips        # IBM (Adaptec) ServeRAID
device          mly        # Mylex AcceleRAID/eXtremeRAID
device          twa        # 3ware 9000 series PATA/SATA RAID

# RAID controllers
device          aac        # Adaptec FSA RAID
device          aacp       # SCSI passthrough for aac (requires CAM)
device          ida        # Compaq Smart RAID
device          mfi        # LSI MegaRAID SAS
device          mlx        # Mylex DAC960 family
device          pst        # Promise Supertrak SX6000
device          twe        # 3ware ATA RAID</programlisting>

    <para>サポートされる RAID コントローラです。
      システムがこれらのどれも持っていない場合には、
      すべてをコメントアウトもしくは削除してください。</para>

    <programlisting># atkbdc0 controls both the keyboard and the PS/2 mouse
device          atkbdc     # AT keyboard controller</programlisting>

    <para><literal>atkbdc</literal> キーボードコントローラは
      AT キーボードおよび PS/2 スタイルポインティングデバイスの
      I/O サービスを提供します。
      &man.atkbd.4; および &man.psm.4;
      はこのコントローラを必要とします。</para>

    <programlisting>device          atkbd      # AT keyboard</programlisting>

    <para>&man.atkbd.4; ドライバ。
      &man.atkbdc.4; コントローラと協調して動作し、
      AT キーボードコントローラに接続された AT 84 キーボードや
      AT 拡張キーボードへのアクセスを提供します。</para>

    <programlisting>device          psm        # PS/2 mouse</programlisting>

    <para>マウスが PS/2
      マウスポートに接続するタイプならこのデバイスを使って下さい。</para>

    <programlisting>device          kbdmux        # keyboard multiplexer</programlisting>

    <para>標準のキーボードマルチプレクサのサポート。
      システムが 2 つ以上のキーボードを用いなければ、
      この行を削除してもかまいません。</para>

    <programlisting>device          vga        # VGA video card driver</programlisting>

    <para>&man.vga.4; ビデオカードドライバです。</para>

    <programlisting>device          splash     # Splash screen and screen saver support</programlisting>

    <para>起動時のスプラッシュスクリーンおよびスクリーンセーバが必要とします。</para>

    <programlisting># syscons is the default console driver, resembling a SCO console
device          sc</programlisting>

    <para>&man.sc.4; は SCO に類似したデフォルトのコンソールドライバです。
      殆どのフルスクリーンのプログラムは <filename>termcap</filename>
      のようなターミナルデータベールライブラリにアクセスするので、
      <literal>sc</literal> を使うか <literal>VT220</literal>
      互換のコンソールドライバである <literal>vt</literal>
      を使うかは重要ではありません。
      ログイン時、このコンソールでフルスクリーンプログラムが動かないときは
      <envar>TERM</envar> 変数を <literal>scoansi</literal> に設定して下さい。</para>

    <programlisting># Enable this for the pcvt (VT220 compatible) console driver
#device          vt
#options         XSERVER          # support for X server on a vt console
#options         FAT_CURSOR       # start with block cursor</programlisting>

    <para>これは VT220 互換のコンソールドライバで、
      VT100/102 と後方互換性があります。
      <literal>sc</literal> とハード的に互換性がないラップトップでも問題なく動きます。
      ログイン後、<envar>TERM</envar> を
      <literal>vt100</literal> 又は <literal>vt220</literal>
      と設定して下さい。
      <literal>vt100</literal>
      は仮想的にすべてのプラットフォームで有効であるため、
      <literal>sc</literal> デバイス用の
      <filename>termcap</filename> や <filename>terminfo</filename>
      のエントリが無い、ネットワーク上の多くの異なったマシンに接続する際に、
      このドライバは有用です。</para>

    <programlisting>device          agp</programlisting>

    <para>システムが AGP カードを搭載している場合には、
      この行を含めてください。
      AGP および (ボードが機能を持っている場合には) AGP GART
      に対応します。</para>

    <programlisting># Add suspend/resume support for the i8254.
device           pmtimer</programlisting>

    <para>APM および ACPI といった電源管理イベントのためのタイマデバイスドライバです。</para>

    <programlisting># PCCARD (PCMCIA) support
# PCMCIA and cardbus bridge support
device          cbb               # cardbus (yenta) bridge
device          pccard            # PC Card (16-bit) bus
device          cardbus           # CardBus (32-bit) bus</programlisting>

    <para>PCMCIA サポート。ラップトップを使っているなら必要でしょう。</para>

    <programlisting># Serial (COM) ports
device          sio               # 8250, 16[45]50 based serial ports</programlisting>

    <para>これらは &windows; では <filename>COM</filename>
      と呼ばれているシリアルポートです。</para>

    <note>
      <para>もしシステムが内蔵モデムを <filename>COM4</filename> に、
	シリアルポートを <filename>COM2</filename>
	に設定している場合、モデムの IRQ を 2 に変更してください。
	もしマルチポートシリアルカードを持っていて、
	<filename>/boot/device.hints</filename>
	に追加する正しい数値に関する情報がほしい場合は、
	マニュアルページ &man.sio.4; を参照して下さい。
	ビデオカードのいくつかは、特に S3 チップベースのものは、IO
	アドレスを <literal>0x*2e8</literal> と言う形式で表現します。
	多くの安価なシリアルカードは 16 ビットの IO
	アドレス空間を完全にデコードしないので、
	これらのカードを使った場合衝突が起こり、
	事実上 <filename>COM4</filename> ポートを使用不可能にします。</para>

      <para>各々のシリアルポートは固有の IRQ を必要とします。
	<filename>COM3</filename> と <filename>COM4</filename>
	用のデフォルト IRQ は利用できません。
	例外は、共有割り込み番号をサポートするマルチポートカードを使っている場合です。</para>
    </note>

    <programlisting># Parallel port
device          ppc</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          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>#device         puc</programlisting>

    <para>&man.puc.4; glue ドライバがサポートしている
      <quote>dumb</quote> シリアル、
      またはパラレル PCI カードをシステムが持っているのであれば、
      このデバイスを有効にしてください。</para>

    <programlisting># PCI Ethernet NICs.
device          de         # DEC/Intel DC21x4x (<quote>Tulip</quote>)
device          em         # Intel PRO/1000 adapter Gigabit Ethernet Card
device          ixgb       # Intel PRO/10GbE Ethernet Card
device          txp        # 3Com 3cR990 (<quote>Typhoon</quote>)
device          vx         # 3Com 3c590, 3c595 (<quote>Vortex</quote>)</programlisting>

    <para>PCI ネットワークカードのドライバです。
      システムにないものはコメントアウトするか削除して下さい。</para>

    <programlisting># PCI Ethernet NICs that use the common MII bus controller code.
# NOTE: Be sure to keep the 'device miibus' line in order to use these NICs!
device          miibus     # MII bus support</programlisting>

    <para>MII バスサポートはいくつかの PCI 10/100 イーサネット NIC、
      すなわち MII に従うトランシーバや MII
      のようなトランシーバ制御インタフェースを実装するもの、に必要となります。
      カーネルコンフィギュレーションに <literal>device miibus</literal>
      を追加することで、汎用 miibus API のサポートと、
      特定のドライバを必要としない場合に利用される汎用のものを含むすべての
      PHY ドライバが導入されます。</para>

    <programlisting>device          bce        # Broadcom BCM5706/BCM5708 Gigabit Ethernet
device          bfe        # Broadcom BCM440x 10/100 Ethernet
device          bge        # Broadcom BCM570xx Gigabit Ethernet
device          dc         # DEC/Intel 21143 and various workalikes
device          fxp        # Intel EtherExpress PRO/100B (82557, 82558)
device          lge        # Level 1 LXT1001 gigabit ethernet
device          msk        # Marvell/SysKonnect Yukon II Gigabit Ethernet
device          nge        # NatSemi DP83820 gigabit ethernet
device          nve        # nVidia nForce MCP on-board Ethernet Networking
device          pcn        # AMD Am79C97x PCI 10/100 (precedence over 'lnc')
device          re         # RealTek 8139C+/8169/8169S/8110S
device          rl         # RealTek 8129/8139
device          sf         # Adaptec AIC-6915 (<quote>Starfire</quote>)
device          sis        # Silicon Integrated Systems SiS 900/SiS 7016
device          sk         # SysKonnect SK-984x &amp; SK-982x gigabit Ethernet
device          ste        # Sundance ST201 (D-Link DFE-550TX)
device          stge       # Sundance/Tamarack TC9021 gigabit Ethernet
device          ti         # Alteon Networks Tigon I/II gigabit Ethernet
device          tl         # Texas Instruments ThunderLAN
device          tx         # SMC EtherPower II (83c170 <quote>EPIC</quote>)
device          vge        # VIA VT612x gigabit ethernet
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.  pccard NICs included.
device          cs         # Crystal Semiconductor CS89x0 NIC
# 'device ed' requires 'device miibus'
device          ed         # NE[12]000, SMC Ultra, 3c503, DS8390 cards
device          ex         # Intel EtherExpress Pro/10 and Pro/10+
device          ep         # Etherlink III based cards
device          fe         # Fujitsu MB8696x based cards
device          ie         # EtherExpress 8/16, 3C507, StarLAN 10 etc.
device          lnc        # NE2100, NE32-VL Lance Ethernet cards
device          sn         # SMC's 9000 series of Ethernet chips
device          xe         # Xircom pccard Ethernet

# ISA devices that use the old ISA shims
#device         le</programlisting>

    <para>ISA イーサネットドライバです。
      どのカードがどのドライバによりサポートされているかの詳細は、
      <filename>/usr/src/sys/<replaceable>arch</replaceable>/conf/NOTES</filename>
      を参照して下さい。</para>

    <programlisting># Wireless NIC cards
device          wlan            # 802.11 support</programlisting>

    <para>標準の 802.11 サポート。ワイヤレスネットワークではこの行が必要です。</para>

    <programlisting>device          wlan_wep        # 802.11 WEP support
device          wlan_ccmp       # 802.11 CCMP support
device          wlan_tkip       # 802.11 TKIP support</programlisting>

    <para>802.11 デバイスの暗号化サポート。
      暗号化および 802.11i セキュリティプロトコルを使うシステムでは、
      これらの行が必要です。</para>

    <programlisting>device          an         # Aironet 4500/4800 802.11 wireless NICs.
device          ath             # Atheros pci/cardbus NIC's
device          ath_hal         # Atheros HAL (Hardware Access Layer)
device          ath_rate_sample # SampleRate tx rate control for ath
device          awi        # BayStack 660 and others
device          ral        # Ralink Technology RT2500 wireless NICs.
device          wi         # WaveLAN/Intersil/Symbol 802.11 wireless NICs.
#device         wl         # Older non 802.11 Wavelan wireless NIC.</programlisting>

    <para>ワイヤレスカードのサポートです。</para>

    <programlisting># Pseudo devices
device   loop          # Network loopback</programlisting>

    <para>TCP/IP の汎用ループバックデバイスです。
      これは<emphasis>必須</emphasis>です。</para>

    <programlisting>device   random        # Entropy device</programlisting>

    <para>暗号化されたセキュア乱数ジェネレータです。</para>

    <programlisting>device   ether         # Ethernet support</programlisting>

    <para><literal>ether</literal>
      はイーサネットカードを持っているシステムでのみ必要です。
      汎用イーサネットプロトコルコードを含みます。</para>

    <programlisting>device   sl            # Kernel SLIP</programlisting>

    <para><literal>sl</literal> は SLIP サポートを提供します。
      SLIP は設定のより簡単な、モデム-モデム間の接続にはより適していてより高機能な
      PPP に殆ど取って代わられています。</para>

    <programlisting>device   ppp           # Kernel PPP</programlisting>

    <para>これはダイアルアップ接続用のカーネル PPP サポートです。
      他にも <literal>tun</literal> を利用し、
      デマンドダイアリングのような柔軟性と機能を提供するユーザーランドのアプリケーションとして実装された
      PPP が存在します。</para>

    <programlisting>device   tun           # Packet tunnel.</programlisting>

    <para>これはユーザーランド PPP ソフトウエアにより利用されます。
      詳細はこのハンドブックの <link linkend="userppp">PPP</link>
      章を参照して下さい。</para>

    <programlisting><anchor xml:id="kernelconfig-ptys"/>
device   pty           # Pseudo-ttys (telnet etc)</programlisting>

    <para>これは <quote>疑似ターミナル</quote> 或いはシミュレートされたログインポートです。
      これは入ってくる <command>telnet</command> と
      <command>rlogin</command> セッション、
      <application>xterm</application> やその他の
      <application>Emacs</application>
      のようなアプリケーションにより利用されます。</para>

    <programlisting>device   md            # Memory <quote>disks</quote></programlisting>

    <para>メモリディスク疑似デバイス。</para>

    <programlisting>device   gif           # IPv6 and IPv4 tunneling</programlisting>

    <para>この行は IPv6 over IPv4 トンネル、IPv4 over IPv6 トンネル、
      IPv4 over IPv4 トンネル、IPv6 over IPv6 トンネルを提供します。
      <literal>gif</literal> デバイスは
      <quote>auto-cloning (自動複製)</quote> し、
      必要に応じてデバイスノードを作成します。</para>

    <programlisting>device   faith         # IPv6-to-IPv4 relaying (translation)</programlisting>

    <para>この疑似デバイスは自分宛に送られたパケットを受け取り、
      IPv4/IPv6 変換デーモンに渡します。</para>

    <programlisting># The `bpf' device enables the Berkeley Packet Filter.
# Be aware of the administrative consequences of enabling this!
# Note that 'bpf' is required for DHCP.
device   bpf           # Berkeley packet filter</programlisting>

    <para>このバークレーパケットフィルタ疑似デバイスは、
      ネットワークインタフェースを、
      イーサネットのようなブロードキャストネットワーク上ですべてのパケットを拾うことのできる
      promiscuous モードに設定できるようにします。
      これらのパケットはディスクに取り込むこともできますし、
      &man.tcpdump.1; を使ってチェックをすることもできます。</para>

    <note>
      <para>&man.dhclient.8; も &man.bpf.4; デバイスを使います。
	DHCP を使っているなら、これはコメントアウトしないでください。</para>
    </note>

    <programlisting># USB support
device          uhci          # UHCI PCI-&gt;USB interface
device          ohci          # OHCI PCI-&gt;USB interface
device          ehci          # EHCI PCI-&gt;USB interface (USB 2.0)
device          usb           # USB Bus (required)
#device         udbp          # USB Double Bulk Pipe devices
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
device          ural          # Ralink Technology RT2500USB wireless NICs
device          urio          # Diamond Rio 500 MP3 player
device          uscanner      # Scanners
# USB Ethernet, requires mii
device          aue           # ADMtek USB Ethernet
device          axe           # ASIX Electronics USB Ethernet
device          cdce          # Generic USB over Ethernet
device          cue           # CATC USB Ethernet
device          kue           # Kawasaki LSI USB Ethernet
device          rue           # RealTek RTL8150 USB Ethernet</programlisting>

    <para>さまざまな USB デバイスのサポートです。</para>

    <programlisting># FireWire support
device          firewire      # FireWire bus code
device          sbp           # SCSI over FireWire (Requires scbus and da)
device          fwe           # Ethernet over FireWire (non-standard!)</programlisting>

    <para>Firewire デバイスのサポートです。</para>

    <para>より詳細な情報と、&os; によりサポートされる他のデバイスについては
      <filename>/usr/src/sys/<replaceable>arch</replaceable>/conf/NOTES</filename>
      を参照して下さい。</para>
      -->

  <!--
  This section refers to ancient hardware.
      <sect2>
        <title>大容量メモリ構成 (<acronym>PAE</acronym>)</title>
	<indexterm>
	  <primary>Physical Address Extensions
	    (<acronym>PAE</acronym>)</primary>
	  <secondary>large memory</secondary>
	</indexterm>

	<para>大容量のメモリを搭載したコンピュータは、
	  ユーザ+カーネル仮想アドレス (<acronym>KVA</acronym>) 空間における
	  4 ギガバイトの制限を越えてメモリにアクセスする必要があります。
	  Intel は &pentium; Pro およびそれ以降の CPU において、
	  36-bit 物理アドレス空間に対応しました。</para>

	<para>&intel; &pentium; Pro およびそれ以降の CPU では、
	  Physical Address Extensions (<acronym>PAE</acronym>)
	  を用いて 64 ギガバイトまでのメモリの構成を可能にします。
	  &os; は、<option>PAE</option>
	  カーネルコンフィグレーションオプションを用いることで PAE に対応します。
	  現在すべてのバージョンの &os; で利用できます。
	  Intel のメモリアーキテクチャの制限により、
	  4 ギガバイト以上または以下の区別をしません。
	  4 ギガバイト以上に割り当てられたメモリは、
	  利用可能なメモリのプールに単純に追加されます。</para>

	<para><acronym>PAE</acronym> サポートをカーネルで有効にするには、
	  以下の行をカーネルコンフィグレーションファイルに追加してください。</para>

      <programlisting>options		    PAE</programlisting>

	<note>
	  <para>&os; の <acronym>PAE</acronym> のサポートは、
	    &intel; IA-32 プロセッサでのみ利用できます。
	    また、&os; における <acronym>PAE</acronym>
	    サポートは広くテストが行われているわけではないので、
	    &os; の他の機能と比較するとベータ品質に位置づけられます。</para>
	</note>

	<para>&os; における <acronym>PAE</acronym> サポートには、
	  以下のような制限があります。</para>

	<itemizedlist>
	  <listitem>
	    <para>プロセスは、4 ギガバイト以上の仮想メモリ空間にアクセスできません。</para>
	  </listitem>

	  <listitem>
	    <para>&man.bus.dma.9; インタフェースを用いないデバイスドライバは、
	      <acronym>PAE</acronym> が有効なカーネルにおいてデータの破損を引き起こす可能性があるため、
	      利用することは推奨されません。
	      そのため &os; で提供される <filename>PAE</filename>
	      カーネルコンフィグレーションファイルでは、<acronym>PAE</acronym>
	      が有効なカーネルで動作することが知られていないすべてのドライバが外されています。</para>
	  </listitem>

	  <listitem>
	    <para>いくつかの調整可能なシステムパラメータは、
	      利用可能な物理メモリによるメモリリソースを調整します。
	      <acronym>PAE</acronym> を必要とするような大きなメモリのシステムでは、
	      そのような調整可能なリソースが不必要に割り当てられることがあります。
	      そのような例のひとつが <option>kern.maxvnodes</option>
	      sysctl です。この sysctl は、カーネルで許される
	      vnode の最大数を調節します。
	      この sysctl や同様に変更可能なパラメータを適切な値に調整することをお奨めします。</para>
	  </listitem>

	  <listitem>
	    <para>カーネルバーチャルアドレス (<acronym>KVA</acronym>)
	      の枯渇を避けるため、<acronym>KVA</acronym> 空間を大きくとる、または、
	      激しく消費される特定のカーネルリソースの量を減らす必要があるでしょう。
	      <option>KVA_PAGES</option> カーネルオプションを用いて
	      <acronym>KVA</acronym> 空間を増やすことができます。</para>
	  </listitem>
	</itemizedlist>

	<para>パフォーマンスや安定性については、
	  &man.tuning.7; を調べることをお奨めします。
	  &man.pae.4; は、&os; の <acronym>PAE</acronym>
	  サポートに関する最新の情報を含んでいます。</para>
    </sect2>
-->
  </sect1>

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

    <para>カスタムコンフィグレーションファイルを編集して保存したら、
      カーネルのソースコードを以下の手順でコンパイルしてください。</para>

    <procedure>
      <title>カーネルの構築</title>
      <indexterm>
	<primary>カーネル</primary>
	<secondary>構築 / インストール</secondary>
      </indexterm>

      <step>
	<para>以下のディレクトリに移動してください。</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>指定したカーネルコンフィグレーションファイルでコンパイルされた新しいカーネルをインストールします。
	  以下のコマンドは、新しいカーネルを
	  <filename>/boot/kernel/kernel</filename> に、
	  今までのカーネルを <filename>/boot/kernel.old/kernel</filename>
	  という名前で保存します。</para>

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

      <step>
	<para>新しいカーネルを使うために、
	  システムをシャットダウンして再起動してください。
	  うまく行かない場合は、<xref
	    linkend="kernelconfig-noboot"/>
	  を参照してください。</para>
      </step>
    </procedure>

    <para>デフォルトでは、カスタムカーネルを構築すると、
      すべてのカーネルモジュールが再構築されます。
      カーネルのアップデートをより早く行いたい、または、
      カスタムモジュールのみを構築したいといった場合は、
      カーネルの構築を開始する前に、以下のように
      <filename>/etc/make.conf</filename> を編集してください。</para>

    <para>例として、以下の変数は、
      デフォルトのすべてのモジュールを構築する設定を変更し、
      構築するモジュール一覧を指定します。</para>

    <programlisting>MODULES_OVERRIDE = linux acpi</programlisting>

    <para>また、以下の変数は、構築を行わないモジュールを指定します。</para>

    <programlisting>WITHOUT_MODULES = linux acpi sound</programlisting>

    <para>他の変数については、&man.make.conf.5; を参照してください。</para>

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

  <sect1 xml:id="kernelconfig-trouble">
    <title>問題が起きた場合には</title>

    <para>カスタムカーネルを作る際に起こりうるトラブルは、
      次の 4 種類に分けられます。</para>

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

	<listitem>
	  <para><command>config</command> で失敗した時には、
	    トラブルの起きた行番号が出力されます。
	    たとえば、次のように出力された場合には、
	    17 行目が正しく入力されているかどうか、
	    <filename>GENERIC</filename> や <filename>NOTES</filename>
	    と比較して修正してください。</para>

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

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

	<listitem>
	  <para><command>make</command> が失敗した場合には、
	    通常、カーネルコンフィグレーションファイルにおいて、
	    <command>config</command>
	    がとらえられなかったような間違いをしています。
	    コンフィグレーションファイルを見直してください。
	    それでも問題を解決することができなければ、
	    &a.questions;
	    へカーネルコンフィグレーションファイルを添付して送ってください。</para>
	</listitem>
      </varlistentry>

      <varlistentry xml:id="kernelconfig-noboot">
	<term>カーネルが起動しない</term>

	<listitem>
	  <para>新しいカーネルが起動しなかったり、
	    デバイスの認識をしない場合でもあわてないでください!
	    さいわい、&os;
	    には利用できないカーネルから復帰する洗練されたメカニズムがあります。
	    &os; のブートローダで起動したいカーネルを選択してください。
	    システムの起動メニューが表示されている時に、
	    <quote>Escape to a loader prompt</quote>
	    オプションを選択するとアクセスできます。
	    プロンプトで
	    <command>boot <replaceable>kernel.old</replaceable></command>
	    か他の正常に起動するカーネルを入力してください。</para>

	  <para>問題のないカーネルで起動した後、
	    コンフィグレー ションファイルを調べ、
	    再び構築を試みてください。
	    <filename>/var/log/messages</filename>
	    にはすべての成功した起動時のカーネルメッセージの記録があり、
	    これは問題を解決するための助けになる情報の一つでしょう。また、
	    &man.dmesg.8; は現在の起動時のカーネルメッセージを出力します。</para>

	  <note>
	    <para>カーネルの構築中にトラブルが起きた時には、
	      次回の構築で消されないように、
	      <filename>GENERIC</filename>
	      のコピーや他の正常に起動するカーネルを別の名前で保存するようにしてください。
	      <emphasis remap="tt">kernel.old</emphasis>
	      は新しいカーネルをインストールする時に、
	      その一つ前にインストールした、
	      うまく動かないかもしれないカーネルで上書きされてしまうため、
	      起動するカーネルを保存しておくことは重要です。
	      できる限り早く以下のようにして、
	      正しく起動するカーネルを含むディレクトリ名に変更してください。</para>

	    <screen>&prompt.root; <userinput>mv /boot/kernel <replaceable>/boot/kernel.bad</replaceable></userinput>
&prompt.root; <userinput>mv /boot/<replaceable>kernel.good</replaceable> /boot/kernel</userinput></screen>
	  </note>
	</listitem>
      </varlistentry>

      <varlistentry>
	<term>カーネルは動きますが &man.ps.1; は動きません!</term>

	<listitem>
	  <para>システムユーティリティの構築されたバージョンと異るバージョンのカーネルをインストールした場合、
	    たとえば -CURRENT のソースから構築したカーネルを
	    -RELEASE システム上にインストールするような場合には、
	    &man.ps.1; や &man.vmstat.8;
	    のような多くのシステムステータスコマンドは動かなくなります。
	    修正するには、カーネルと同じバージョンのソースツリーで
	    <link linkend="makeworld">world を再構築し、インストール</link>
	    してください。
	    カーネルとそれ以外で異なるバージョンを組み合わせてオペレーティングシステムを使用することは推奨されていません。</para>
	</listitem>
      </varlistentry>
    </variablelist>
  </sect1>
</chapter>