FreeBSDカーネルのコンフィグレーション

原作: &a.jehamby;. 6 October 1995.

訳: &a.tomo;, &a.yoshiaki;. 2 November 1996. この章はシステムに合わせたカーネルの再構築の基礎について 述べたものです. この章は, システム管理の初心者から Unixシステム管理に十分な経験を積んだ人までを対象としています. なぜカスタムカーネルを作るか?

システムに合わせたカーネルはすべての Unixシステム管理者が 避けて通ることのできない最も重要な通過儀礼の1つです. この作業は, 多くの時間を必要としますが, あなたの FreeBSD システムに多くの利益をもたらします. GENERICカーネルは, めったに使われることのないハードウェアをサポートするとともに, 考えられるすべての SCSIカードやネットワークカードをサポート しなければなりませんが, システムに合わせたカーネルは あなたの PC のハードウェアのみをサポートします. これは, 次にあげるような利益をもたらします. あなたが持っていないハードウェアについては検出をおこなわな いので, ブートにかかる時間が短くなります. システムに合わせたカーネルは多くの場合メモリ使用量が 減ります. カーネルはいつもメモリ上に存在するので, 不必要なコードがあると本来プログラムが利用できるはずの RAM (実メモリ) を占めてしまいますのでこれは重要なことだ といえます. したがって, メモリが少ないシステムでは, カーネルの再構築は大変重要です. 必要に応じていくつかのカーネルオプションは調整すること ができ, またサウンドカードのような GENERICカーネルには ないデバイスドライバをカーネルに含めることが できます.

カスタムカーネルの構築とインストール

まず, カーネル再構築に必要なディレクトリをざっと見てみましょう. ここではディレクトリはすべて /usr/src/sys以下の相対位 置で示します. また, /sysからもアクセス可能です. ここには, カーネルの各部分を構成するサブディレクトリが いくつもあります. しかし, 私たちの目的では 最も重要なのは i386/confです. ここで, あなたの システムに合わせてカーネル コンフィグレーションを編集します. それから compileディレクトリ, ここはカーネルが作られる 場所です. サポートされているデバイスやファイルシステムのディレ クトリツリーがオプション毎にサブディレクトリに分かれている論理 的構成に注意してください. また, i386のディレクトリは PCのハードウェアのみを扱い, i386以外のディレクトリは FreeBSDが他のプラットフォームに移植される際には共有されるコー ドです. /usr/src/sys 以下のディレクトリがなければ, カーネルのソースが インストールされていません. パッケージのインストール手順にしたがっ て, システムにインストールしてください. つぎに, i386/confに移動して, GENERIC コンフィグレーションファイルをカーネルに与えたい名前に コピーしてください. たとえば: # cd /usr/src/sys/i386/conf # cp GENERIC MYKERNEL 慣習として, この名前はすべて大文字でつづられます. もし, いくつかの異なるハードウェアの FreeBSDマシンを扱うなら, この名前にホスト名を含めるとよいでしょう. ここでは, 例として MYKERNEL と呼ぶことにします. では, MYKERNELをあなたの好きなエディタで編集してください. もし, システムをインストールしたばかりならば, 利用できる エディタは viだけかもしれません. ここでは使い方 の説明はしませんが, にあるような多くの本で詳しく説明 されていますので, そちらを参照してください. まずファイルの最初の方のコメント行を編集し, あなたのコンフィグ レーションに合せて変更した点などを記述して GENERICと区別がつく ようにしておきましょう. もし SunOSや他の BSDオペレーティングシステムでカーネルの 再構築をしたことがあれば, このファイルはとても親しみ やすいでしょう. しかし, DOSのようなその他の オペレーティングシステムしか知らない人から見れば, GENERICコンフィグレーションファイルはとても なじみにくいものかもしれません. そのような場合は, の節をゆっくりと注意深く読んでください. config(8)を取ってくる必要があるかもしれません. これは /usr/src/usr. sbinにあります. したがってこれらのソースをダ ウンロードする必要があります. 次のコマンドを実行する前に (configを)作りインストールをしておいてください. 編集し終ったら, 次のコマンドによってコンパイル, インストール を行ってください. # /usr/sbin/config MYKERNEL # cd ../../compile/MYKERNEL # make depend # make # make install 新しいカーネルはルートディレクトリに /kernelという 名前でコピーされ, 今までのカーネルは /kernel.old という名前へ変更されます. では, システムをシャットダウン, リブー トして新しいカーネルを使ってください. うまく行かない場合は, この章の終りの を参照してください. この章の新しい 場合のリカバリの方法を注意深く読んでおいてください. /devディレクトリで デバイスノードを追加しなければならないかもしれません. 詳しくは, を読んでください. コンフィグレーション ファイル

コンフィグレーション ファイルの一般的なフォーマット はとてもシンプルです. 各行は1つのキーワードと1つ以上の 引数を含んでいます. 見やすくするために, ほとんどのキーワードは 引数を1つしか書いてありません. #に続くものはすべてコメントとして扱われ, 無視されます. ここでは, それぞれのキーワードについて だいたい GENERICに出てくる順番で説明します. しかし, お互いに関係のあるキーワードは, 実際には GENERICファイル上に バラバラに現れていても, (ネットワーキングのように)1つにまとめ てあります. おびただしい数のオプションの一覧が GENERICと同じディ レクトリの LINTコンフィグレーションファイルにあります. もし, ある行の目的や必要性に疑問を持ったら最初に LINTをチェック してください.

カーネルは現在, オプションを扱う方法をよりよい機構に移行しよ うとしています. 従来は, 各々のオプションは単純にカーネルの Makefile中の CFLAGS行の -Dスイッチに変換されて いました. 自然とオプションは際限なく増えて行きます. だれも実際に はどのオプションがどのファイルで参照されているかは知りません.

新しい方法では、すべてのオプション依存の #ifdefは当該オプショ ンを opt_foo.h (これらのファイルはconfigによって compileディレ クトリに作られます) から読み込むように変わりました. config の有効なオプションのリストは2つのファイルにお かれます. アーキテクチャに依存しないオプションは /sys/conf/optionsに置かれ, アーキテクチャ依存のオプショ ンは/sys/arch/conf/optionsに置かれま す. archの部分は例えば i386となります. 必須キーワード

ここにあるキーワードはカーネルの構築に必要不可欠です. machine ``i386''

最初のキーワードは machineです. FreeBSDは Intelの 386とその互換チップ上でしか 動かないので, i386を指定します. 注: 数字を含むキーワードはすべて クォーテーションマークで囲む必要があります. そうしないと, configは混乱し, 386を実際の数値として扱ってしまいます. cpu ``cpu_type''

次のキーワードは cpuです. FreeBSDでサポートしている CPUの中から記述します. cpu_typeとして指定可能な値は 次の通りです. I386_CPU I486_CPU I586_CPU I686_CPU GENERICカーネルのように cpuの行の cpu_typeが異なった値を持つものが 複数あってもかまいません. カスタムカーネルでは, あなたが持っている cpuを1つだけ指定するのが 一番です. 例えば, もし Intelの Pentiumを持っていれば, cpu_typeには, I586_CPU を使ってください. ident machine_name

次は, カーネルの識別名となるidentです. GENERICからあなたがカーネルに与えたい名前に 変えてください. ここでは, MYKERNELとします. identに与えた名前はカーネルの ブート時に表示されるので, 普段のカーネルとは別に カーネルに違う名前を与えたいとき(例えば, 実験用のカーネルを作りたい時など), 便利でしょう. 数字を含む名前にしたい場合は machinecpuの時と同じようにクォーテーションマークで 囲む必要があります. Cコンパイラに -Dスイッチで渡されるので, DEBUGのような名前にしたり, vax といった他のCPUの名前など紛らわしい名前にしないで ください. maxusers number

これは, 重要なシステムテーブルのサイズを決めます. ここ で与えられる数字はマシンに同時にログインすると考えられ るおよそのユーザ数です. しかし, 通常の使用環境であれば, 特に X Window System を立ち上げたり, ソフトウェアを コンパイルするような使用であれば maxusersには少 なくとも4以上を指定したほうがいいでしょう. その理由は, maxusersで決るテーブルで最も重要なものはプロセス の最大数であるからです. プロセス最大数は 20 + 16 * maxusersで与えられ, maxusersを1 にすると36プロセスしか同時には持てません. この中にはブー ト時にシステムによって起動する18個ぐらいのプロセス, Xを 起動する時の15程度のプロセスも含みます. manページを読むという1つのタスクでさえ, フィ ルタやファイル伸長や表示のために9つのプロセスを起動し ます. maxusersを4にすれば, 同時に84個のプロセ スを持つことができるのでどんな人でも十分な数だといえる でしょう. それでも他のプログラムを起動した場合に, あるいは, (Walnut Creek CDROMのFTPサイトのように) 同時に多くの ユーザを抱えるサーバを走らせた場合に ``proc table full''というおぞましいエラーが起きる場合はこの値を増や し, カーネルを再構築してください. maxuserはあなたのマシン にログインできるユーザの数を制限するものでは ありません. 単に, あなたのシステムに ログインするユーザ数の最大値と各々のユーザが いくつのプロセスを走らせるかを考慮することに よってさまざまなテーブルの値を適切な値に設定 するだけです. これに対し, remote loginsというキーワードは 同時にリモートログインできるユーザ数を制限 します. config kernel_name root on root_device

これはカーネルの位置と名前を特定します. 伝統的にカーネルは vmunixと呼ばれますが, FreeBSDでは kernelとふさわしい名前になりました. kernel_nameにはいつも kernelを 使ってください. 名前を変えると多くのシステム ユーティリティが使えなくなります. 2番目の部分は ルートファイルシステムとカーネルのあるディスクと パーティションを指定してください. SCSIドライブでなければ, wd0を, SCSIドライブならば sd0です. 一般的なオプション

以下はカーネルのサポートするさまざまなファイルシステムおよ びその他のオプションです.

これは, 数値演算コプロセッサがない コンピュータ (386や486SX) で数値演算コプロセッサ のエミュレーションを可能にします. もし, Pentiumや 486DX, あるいは387や487があれば, コメントアウト できます. 注: FreeBSD付属の数値演算 コプロセッサエミュレータはあまり正確では ありません. 非常に正確な計算をおこないたい ならば, より優れた GNUのエミュレータである GPL_MATH_EMULATEに変えることを おすすめします. これはライセンスの関係でデフォルトでは 含まれていません. options ``COMPAT_43''

4.3BSDとの互換性のためのオプションです. そのままにしておいてください. コメントアウトすると, いくつかのプログラムで動作がおかしくなります. options BOUNCE_BUFFERS

ISAデバイスやISA互換モードで動作する EISAデバイス では DMA (Direct Memory Access) は16MB以下のメモリに対し てのみ動作します. このオプションによりメモリが16MB以上 のシステムでDMAを使うデバイスを動作させることができます. options UCONSOLE

ユーザがコンソールを横取り (grab) できるようにします. これは X Window System 上で便利です. 例えば, コ ンソール xtermを xterm -Cとタイプして作ると, そこに `write', `talk'などのメッセージがカーネルからコ ンソールへ送られるメッセージと同じように表示されます. options SYSVSHM

このオプションは System V の共有メモリを提供します. 最もよく利用されるのは X Window System の XSHM拡張 です. これは多くのグラフィックを多用したプログラム (movie player の Xanimや Linux DOOMなど) では自動的に高速 になるという利点があります. X Window System を利用するのであればこれは間違いな く含めたくなるでしょう. options SYSVSEM

System V のセマフォをサポートします. 一般的に利用される ことは少ないですがカーネルサイズの増加は数百バイトだ けです. options SYSVMSG

System V のメッセージをサポートします. これを指定した場 合もカーネルサイズの増加は数百バイトだけです. ipcs(1) コマンドは これらの System V の機構を利用しているプロセスを表示し ます. 訳注: 共有メモリ, セマフォ, メッセージ(メッ セージキュー) は System V系 で一般的なプロセス間通信の機 構です. くわしくは System Vのプロセス間通信に関する文 献, 「詳解 UNIXプログラミング」 (ソフトバンク) , 「UNIXネッ トワークプログラミング」 (トッパン) などを参照してくださ い. ファイルシステムオプション

これらのオプションはさまざまなファイルシステムへのサポート を追加します. 少なくともブートするためのデバイスのサポートを含 める必要があります. 標準的にはハードディスクからブートするので あれば FFS , ディスクレスワークステーションとしてイー サネットからブートするのであれば NFSです. 一般的に利用される他のファイルシステムをカーネルに含め, あまり 利用しないファイルシステム (多分 MS-DOSファイルシステム?) のサポー トをコメントアウトすることができます. これは Loadable Kernel Module ディレクトリ /lkm から, 最初にそのタイプのファイ ルシステムがマウントされる時に動的にドライバがロードされるからです. options FFS

基本的なハードドライブ ファイルシステムです. ハードディ スクからブートする場合は残しておいてください. options NFS

ネットワーク ファイルシステムです. Ethernet経由で Unixファ イルサーバからパーティションをマウントする予定がない場 合はコメントアウトすることができます. options MSDOSFS

MS-DOS ファイルシステムです. ブート時に DOSフォーマット のハード ドライブをマウントする予定のない場合はコメン トアウトしても安全です. 先に示したように, DOSパーティ ションをマウントする時に自動的にロードされます. また (ports コレクションにある) mtools という素晴 らしいソフトウェアにより mount , unmountなしで DOSフロッ ピーにアクセスすることができます (これは MSDOSFSも必要 ありません). options ``CD9660''

CD-ROMのための ISO 9660 ファイルシステムです. CD-ROMを 持っていないか, 時々 データ CDをマウントするだけならコ メントアウトしましょう (データ CDを最初にマウントする 時に動的にロードされます). オーディオ CDはこのファイル システムは必要ありません. options PROCFS

プロセス ファイルシステムです. これは疑似的なファイルシ ステムで /procにマウントされ, ps(1)などのプロ グラムがプロセスに関してより詳しい情報を与えてくれるよ うになります. options MFS

メモリマップド ファイルシステムです. これは基本的に一時 ファイルを記憶するための高速な RAMディスクで, 大きな swap領域がある場合に有効です. MFSパーティションをマウ ントするに適した場所は多くのプログラムが一時ファイルを 置く /tmpです. MFS RAMディスクを /tmp にマウントするには以下の内容を /etc/fstabに追 加してリブートするか mount /tmpとタイプします. /dev/wd1s2b /tmp mfs rw 0 0 /dev/wd1s2bをあなたが使用して いるswap パーティションに置き換えてください. これは以 下のように /etc/fstabに書かれているでしょう. /dev/wd1s2b none swap sw 0 0 /tmpデ バイスにアクセスすることはできません). そのためいまの ところは使わない方が無難です. --> また, MFSファ イルシステムは動的にロードすることはできません . したがって使いたい場合はコンパイル時に カーネルに含める必要があります. options QUOTA

ディスククォータを有効にします. アクセスが公開されてい るシステムで (一人のユーザが) /homeパーティショ ン (全体) をあふれさせることができないようにそれぞれのユーザ にディスククォータを発行することができます. このコードはいくらかバグがありますので必要のない場合は 使わないでください. ディスククォータについての詳しい内 容はマニュアルページの quota(1)を見てください. 基本的なコントローラとデバイス

この節では FreeBSDでサポートされているディスク, テー プ, CD-ROMコントローラについて示します. コントローラと カードについ ては別の節になっています. controller isa0

FreeBSDのサポートするすべての PCで必要です. IBM PS/2 (マイ クロチャネルアーキテクチャ) では現時点では FreeBSDは動 きません. controller pci0

PCIバスを持つマザーボードの場合は含めます. これにより PCIカードの自動認識と PCIから ISAバスへのゲートウェイが 可能になります. controller fdc0

フロッピードライブコントローラです. fd0 は ``A:'' ドライブで fd1 は ``B:'' ドライブです. ft0 は フロッピーコントローラに接続する QIC-80 テープドライブで す. 対応するデバイスがない場合はそれぞれの行をコメント アウトしてください. ft(8)というフィルタプログラムが必要です. 詳し くはマニュアルページを見てください. controller wdc0

プライマリIDEコントローラです. wd0wd1はそれぞれマスタ, スレーブドライブで す. wdc1 は セカンダリの IDEコントローラで3台 目, 4台目のハードディスクまたは IDE CD-ROMのある場合に 使います. 利用しない行はコメントアウトしてください (例え ば, SCSIハードディスクのみを使う場合は6行全部をコメント アウトしてもよいかもしれません). device wcd0

このデバイスは IDE CD-ROMのサポートをします. wdc0を有効にしておく必要があり, もし 2つ以上の IDE コントローラがあり, そのうちの 2つ目のカードに CD-ROMを接 続する場合 options ATAPIを書いておく必要もあります. device npx0 at isa? port ``IO_NPX'' irq 13 vector npxintr

npx0はFreeBSDハードウェアコプロセッサとソフト ウェアエミュレータ両方の浮動小数点演算ユニットへのインタ フェースです. これは device wt0 at isa? port 0x300 bio irq 5 drq 1 vector wtintr

Wangtek と Archive の QIC-02/QIC-36 テープドライブのサポートです. Proprietary CD-ROM support

以下のようなドライブを proprietary(独自の) CD-ROMドライブと呼ぶことにします. これらのドライブは専 用のコントローラを持つか, サウンドブラスタ16などのサウ ンドカードに接続します. これらは IDEでも SCSIでもあ りません. 多くの標準速や2倍速の古い CD-ROMはこれら のインタフェースを持っていますが, より新しい四倍速の ものは でしょう. device mcd0 at isa? port 0x300 bio irq 10 vector mcdintr

ミツミ製 CD-ROM (LU002, LU005, FX001D)です. device scd0 at isa? port 0x230 bio

ソニー製 CD-ROM (CDU31,CDU33A)です. controller matcd0 at isa? port ? bio

松下/パナソニック製 CD-ROM (サウンドブラスタ用 クリエィティブ ラボ製として販売されていました) です. SCSI デバイスのサポート

この節では FreeBSDのサポートするいろいろな SCSIコント ローラとデバイスのサポートについて書きます. SCSI コントローラ

以下の十数行は異る種類の SCSIコントローラのサポートです. 使用しているもの以外の部分はコメントアウトしてください. controller bt0 at isa? port ``IO_BT0'' bio irq ? vector btintr

ほとんどの Buslogic社のコントローラです. controller uha0 at isa? port ``IO_UHA0'' bio irq ? drq 5 vector uhaintr

UltraStor 14F と 34F です. controller ahc0

Adaptec 274x/284x/294x です. controller ahb0 at isa? bio irq ? vector ahbintr

Adaptec 174x です. controller aha0 at isa? port ``IO_AHA0'' bio irq ? drq 5 vector ahaintr

Adaptec 154x です. controller aic0 at isa? port 0x340 bio irq 11 vector aicintr

Adaptec 152x や サウンドカードなどに使われている Adaptec AIC-6360 チップです. (slow!) controller nca0 at isa? port 0x1f88 bio irq 10 vector ncaintr

NCR 5380を使っている ProAudioSpectrum や Trantor T130 で す. controller sea0 at isa? bio irq 5 iomem 0xc8000 iosiz 0x2000 vector seaintr

Seagate ST01/02 8 ビットコントローラです. (slow!) controller wds0 at isa? port 0x350 bio irq 15 drq 6 vector wdsintr

Western Digital WD7000コントローラです. controller ncr0

NCR 53C810, 53C815, 53C825, 53C860, 53C875 チップを使った PCI SCSI コントローラです. options ``SCSI_DELAY=15''

このオプションによりカーネルはそれぞれの SCSIデバイスを プローブする前に 15秒間待ちます. IDEドライブのみを使用 している場合は無視して構いません. ブートを速くするため にこの数値を 5秒ぐらいまで小さくしたいでしょう. そうし た場合, FreeBSDが SCSIデバイスを認識しにくくなるかもし れません. その時は、もちろんこのオプションの値は元に戻 さないといけません. controller scbus0

SCSIコントローラがある場合, この行で SCSI全般のサポー トを与えます. SCSIのない場合, この行と以下の3つの行をコメ ントにすることができます. device sd0

SCSIハードディスクのサポートです. device st0

SCSIテープドライブのサポートです. device cd0

SCSI CD-ROM のサポートです.

上のエントリについている 0はいくらか誤解を招き やすいかもしれません. これらのデバイスはすべてカーネルが 見つけた時に割り当てがおこなわれ, SCSIバスに何台つながってい るか, ターゲット IDが何番であるかはここの記述とは関係あ りません. 明示的に「固定的な」ターゲット IDの特定のデバイスへの 割り当てをおこないたい場合は LINT カーネルコンフィグレーションファイルの 該当する部分の説明を参照してください. コンソール, バスマウス, Xサーバのサポート

2つのタイプのコンソールのから1つを選ぶ必要があります. また X Window System を利用する場合, XSERVERオプションを有効にし ます. またバスマウスとPS/2マウスのオプションもあります. device sc0 at isa? port ``IO_KBD' tty irq 1 vector scintr

sc0 はデフォルトのコンソールドライバで SCOコン ソールに似ています. このデバイス, あるいは VT220コンパ チブルドライバの vt0いずれを使う場合もほとんど のフルスクリーンプログラムは termcapなどのターミ ナルデータベースライブラリを通してアクセスしますので, あまり違いはないでしょう. このコンソールを使う場合でフルスクリーンプログラムでト ラブルが起きる場合にはログインした時に TERM変数の値を ``scoansi''にしてください. device vt0 at isa? port ``IO_KBD'' tty irq 1 vector pcrint

これはVT-220コンパチブルコンソールドライバで VT100/102の 上位互換です. これは sc0の使えない種類のラッ プトップ機でもうまく動きます. ログイン時に TERM変数の値 を``vt100'' か ``vt220''にしてください. また, このドラ イバはネットワークを介して多くの異るマシンから接続する 場合も便利です. sc0デバイスのための termcapterminfoエントリは必ずしも 利用できるわけではありませんが -- ``vt100''はいずれの プラットフォームでも利用可能でしょう. options ``PCVT_FREEBSD=210''

vt0 コンソールドライバを使う場合に必要で す. options XSERVER

これは XFree86 X サーバを動かすのに必要な コードを含めます. device mse0 at isa? port 0x23c tty irq 5 vector ms

Logitech や ATIのバスマウス入力カードを利用する場合のデ バイスです. ポート(おそらくはCOM1)を有効にしてくだ さい. device psm0 at isa? port ``IO_KBD'' conflicts tty irq 12 vector psmintr

このデバイスは PS/2マウスポートにマウスを接続する場合に 使います. シリアル, パラレルポート

ほとんどすべてのシステムにこれらはあります. プリンタを接続す る場合は の章が非常 に役に立つでしょう. モデムを使う場合は に非常に詳しいシリアルポートの設定とデ バイスの使い方があります. device sio0 at isa? port ``IO_COM1'' tty irq 4 vector siointr

sio0からsio3は MS-DOSにおける COM1から COM4に相当する4本のシリアルポートです. COM4に内蔵モデムがあり COM2を使う場合, FreeBSDからアク セスするためにはモデムのIRQを2へ変更する必要があるとい うことを注意しておきます (技術的な理由より IRQ 2 = IRQ 9となります). マルチポートシリアルカードを使う場合にマニュアルページ のsio(4)にはこのオプションで使う値などのよ り多くの情報があります. ビデオカードの中には (特に S3 チップベースのものには) IOアドレスの 0x*2e8から を利用するものがあり, また多くの安価なシリアルカードは IOアドレス空間を16-bitフルデコードしていませんので, こ れらのカードは衝突します. この場合 COM4ポートは実質上 利用できません. それぞれのシリアルポートは (割込みの共有をサポートした マルチポートカードを利用していないのであれば) 別々の IRQ を割り当てる必要がありますので COM3と COM4のデフォルトの IRQは利用できません. device lpt0 at isa? port? tty irq 7 vector lptintr

lpt0 から lpt2は利用可能な3本のプリン タポートです. 多くの場合は1本のみですので他の2本はない のであればコメントアウトして構いません. ネットワーク

FreeBSDでは他の一般的な Unixと同様にネットワークが 非常に 重視されています. イーサネットカードが なくても必須のオプションとダイヤルアップ ネットワークのサポー トに注意してください. options INET ネットワーキングのサポートです. ネットワークに接続する予定がな くても残しておいてください. 多くのプログラムは少なくともループ バックネットワーキングが必要です(つまり, PCの中でネットワーク コネクションをおこないます). したがってこのオプションは本質的 に不可欠です. Ethernet cards

以下にさまざまなイーサネットカードを有効にするオプショ ンを示します. ネットワークカードがなければこれらすべてを コメントアウトすることができます. そうでなければ利用す る特定のイーサネットカードをサポートするオプションを残 しておきます. device de0

DECの DC21040, DC21041, DC21140チップを使った PCIイー サネットアダプタです. device fxp0

Intel EtherExpress Pro/100B 高速イーサネットカード です. device vx0

3Com の 3C590, 3C595です (いくらか bugがあります). device cx0 at isa? port 0x240 net irq 15 drq 7 vector cxintr

Cronyx/Sigma の マルチポート同期/非同期カードです. (with Cisco or PPP framing) device ed0 at isa? port 0x280 net irq 5 iomem 0xd8000 vector edintr

Western Digital と SMC の 80xx, 8216 Elite Ultra ; ノベル NE1000, NE2000; 3Com の 3C503; HPの PC Lan Plus (HP27247B とHP27252A) です. device el0 at isa? port 0x300 net irq 9 vector elintr

3Com の 3C501 です. (slow!) device eg0 at isa? port 0x310 net irq 5 vector egintr

3Com の 3C505です. device ep0 at isa? port 0x300 net irq 10 vector epintr

3Com の 3C509 です(バグがあります). device fe0 at isa? port 0x240 net irq ? vector feintr

富士通 MB86960A/MB86965A ベースのイーサネットカード です. device fea0 at isa? net irq ? vector feaintr

DEC DEFEA EISA FDDI アダプタです. device ie0 at isa? port 0x360 net irq 7 iomem 0xd0000 vector ieintr

AT&T StarLAN 10 と EN100; 3Com の 3C507; NI5210 です. device ix0 at isa? port 0x300 net irq 10 iomem 0xd0000 iosiz 32768 vector ixintr

Intel の EtherExpress 16です. device le0 at isa? port 0x300 net irq 5 iomem 0xd0000 vector le_intr

DEC の EtherWorks 2 and EtherWorks 3 (DEPCA, DE100, DE101, DE200, DE201, DE202, DE203, DE204, DE205, DE422)です. device lnc0 at isa? port 0x300 net irq 10 drq 0 vector lncintr

Lance/PCnet カード (Isolan, Novell NE2100, NE32-VL)です. device ze0 at isa? port 0x300 net irq 5 iomem 0xd8000 vector zeintr

IBM/ナショナルセミコンダクタの PCMCIA イーサネット コントローラです. device zp0 at isa? port 0x300 net irq 10 iomem 0xd8000 vector zpintr

3Com の PCMCIA Etherlink III です. pseudo-device loop

loop は TCP/IPの一般的なループバックデバイスで す. telnet や FTPを localhost (127.0.0.1) に対してかけるとこの疑似デバイスを通して帰ってきます. 不可欠です. pseudo-device ether

etherはイーサネットカードがある場合のみ必要で 一般的なイーサネットプロトコルを含めます. pseudo-device sl number

sl は SLIP (Serial Line Internet Protocol) をサポー トします. これはほとんど完全に, より簡単に設定ができ, モ デム to モデム接続に適した, よりパワフルな PPPに取って代 わられています. slの後の number は同 時にいくつの SLIPセッションをサポートするかを示します. SLIPの設定のより詳しい情報はこのハンドブックの 「PPPとSLIP」の章の について書かれた節にあります。 pseudo-device ppp number

pppはダイヤルアップ インターネット接続のための カーネルモード PPP (Point-to-Point Protocol) をサポート します. ユーザアプリケーションとして tun を 利用する PPPの実装もあり, こちらはより柔軟性がありデマ ンドダイアリング(プログラムが接続要求を出した時に自動 的にダイヤルをおこなう)などの機能もあります. それでもこ の PPPドライバを利用したい場合は の節を読んでください. slデバイスと同じように numberは同時 に PPP接続できる数を示します. pseudo-device tun number

tun はユーザモード PPPソフトウェアが利用しま す. このプログラムは設定が簡単で非常に高速です. また自動ダイヤル オン デマンドなどの機能を持ちます. tunの後のnumber は同時におこなうことのできる PPPセッションの数を示します. の節により多くの情報があ ります. pseudo-device bpfilter number

バークレイ パケットフィルタです. この疑似デバイスはネッ トワークインタフェースを無差別 (promiscuous) モードにし てネットワーク (例えば単一のイーサネット) にブロードキャス トされるすべてのパケットを取り入れることを可能にします. こ れらのパケットはディスクに取り入れられたり tcpdump(1) によって検査されます. この機能の実現 はネットワーク全体のセキュリティとの微妙な妥協点であるこ とに注意してください. bpffilter の後の numberは同時に検査することの できるインタフェースの数を示します. 危険の可能性について十分解っている場合を除いてこのオプ ションは奨めません. すべてのネットワークカードでこの機能 をサポートをしてはいません. サウンドカード

ここは GENERICカーネルに含まれていない最初のセクションです. サウンドカードのサポートをするためには LINTコンフィグレーショ ンファイル(これにはすべてのデバイスが含まれています)か ら以下のような適切な行をコピーする必要があります. controller snd0

サウンドドライバ一般のコードです. pcaを除く以下のすべてのサウンドカードで必要で す. device pas0 at isa? port 0x388 irq 10 drq 6 vector pasintr

ProAudioSpectrum のオーディオ と MIDI です. device sb0 at isa? port 0x220 irq 7 conflicts drq 1 vector sbintr

SoundBlaster です. irq 7をirq 5に書き換え, キーワード conflictsを削除し てください. さらに options ``SBC_IRQ=5''の行を 加える必要があります. device sbxvi0 at isa? drq 5

SoundBlaster 16 の 16-bit オーディオです. drq 5を適切な値に書き直 して, (DMA 6の場合) options "SB16_DMA=6"を付け 加えてください. device sbmidi0 at isa? port 0x330

SoundBlaster 16 の MIDI インタフェースです. SoundBlaster 16を使う場合必ずこの行を含めてコンパイル してください. device gus0 at isa? port 0x220 irq 10 drq 1 vector gusintr

Gravis Ultrasound です. device mss0 at isa? port 0x530 irq 10 drq 1 vector adintr

Microsoft Sound System です. device opl0 at isa? port 0x388 conflicts

AdLib FMシンセサイザオーディオです. AdLib, SoundBlaster, ProAudioSpectrum を使い playmidi (ports にあります) などのプログラムで MIDIの演奏をしたい場合にこの行を含めます. device mpu0 at isa? port 0x330 irq 6 drq 0

Roland MPU-401 カードです. device uart0 at isa? port 0x330 irq 5 vector ``m6850intr''

MIDIインタフェースの 6850 UART です. device pca0 at isa? port ``IO_TIMER1'' tty

PC のスピーカーを使ったオーディオです. これは非常に品質 が悪く, CPUの性能, 負荷に強く依存します, と言っておき ます (サウンドカードは必要ありませんが). /usr/src/sys/i386/isa/sound/sound.docにあります. また, これらのデバイスを追加する場合は, サウンドを作る必要があり ます. 疑似デバイス

疑似デバイスドライバはデバイスドライバと同様に働きますがマ シン上に対応する実際のハードウェアがないカーネルの部分です. 関連の 疑似デバイスはそちらのセクションに示しました. ここでは残りにつ いて示します. pseudo-device gzip

gzipgzipによって圧縮された FreeBSDの プログラムを実行できるようにします. /standにあるプログ ラムは圧縮されているのでカーネルにこのオプションをつけ ておくのはいい考えでしょう. pseudo-device log

log はカーネルエラーのログを取るのに使います. 不可欠です. pseudo-device pty number

pty は「仮想ターミナル」や仮想ログインポート です. 外部からの telnetrloginセッ ション, xterm, emacsなどのアプリケーションが使います. numberは作ることのできる ptyの数を示 します. GENERICのデフォルトは16で, 同時の xtermウィンドウやリモー トログインのために増やす場合は最大で 64までです. pseudo-device snp number

スヌープデバイスです. この疑似デバイスはあるターミナル セッションが watch(8) commandによって他のター ミナルを監視することを可能にします. この機能の実現はセ キュリティとプライバシに対して極めて微妙な関係があり ます. snpの後の numberは同時におこなうことのでき るスヌープセッションの総数です. 選択可能です. pseudo-device vn

Vノードドライバです. ファイルを vnconfig(8)コマ ンドによってデバイスとして取り扱うことを可能にします. このドライバによりフロッピーディスクイメージを操作したりファ イルをスワップデバイスとして (MS Windowsのスワッ プファイルなどを)用いることができます. 選択可能です. pseudo-device ccd number

ccd (concatenated disk)デバイスはいくつかのディスクパーティ ションを融合して大きなディスクのように見せることができます. ccdの後の numberは同時に作ることのできる疑似ディスクの数です. (詳しいことは ccd(4)ccdconfig(8)のマニュ アルを参照してください.) 選択可能です. ジョイスティック, スピーカー, その他

この節は FreeBSDのここまでに示した以外のハードウェア デバイスへのサポートについて示します. これらは GENERICカーネル には含まれませんのでこのハンドブックや LINT (このファイルには すべてのデバイスのサポートが含まれます) からコピーする必 要があります. device joy0 at isa? port ``IO_GAME''

PC のジョイスティックです. pseudo-device speaker

IBM BASIC スタイルの PC内蔵スピーカーのサポートです. シェルスクリプトで簡単な演奏をする /usr/sbin/spkrtest やキーボードを使って単純なピ アノのように演奏することができる /usr/games/piano (gamesパッケージをイ ンストールした場合にはあります) のようないくつかのプロ グラムで使われます. また素晴らしいテキストロールプレイ ングゲームである NetHack (ports コレクションにあります) はゲーム中の楽器の演奏でこのデバイスを使うように設定を することができます (訳注:日本語化されたJNetHackもportsに あります).

デバイスの 項も参照してください. デバイスノードを作る

カーネル内のほとんどすべてのデバイスは対応する ``node'' エント リが /dev ディレクトリにあります. これらのノードは普 通のファイルのように見えますが, 実際にはプログラムがデバイスに アクセスするのに用いるカーネル内への特別なエントリです. シェルスクリプトである /dev/MAKEDEVはオペレーティング システムを最初にインストールする時に実行され, サポートされてい る大部分のデバイスのノードを作ります. しかし, すべてのノードが作られるわけではありませんので 新しいデバイスのサポートを加える時は対応するエントリがこのディ レクトリにあるかどうか確認してもしなければ, 作ってください. 以下に例を示します. IDE CD-ROMのサポートをカーネルに加えるとします. 次の行 を加えます. controller wcd0 これにしたがって, /devディレクトリに wcd0で始ま るエントリを捜してください. 1文字が後ろにつくかもしれません. 後 ろについた文字が `c'であるか先に `r'のつくエントリは `raw'デバ イスを示します. それらのファイルがないことが明らかになったとします. そこで /dev ディレクトリに移動して次のようにタイプします. # sh MAKEDEV wcd0 スクリプトの実行が終ったら /devwcd0crwcd0c エントリがあることを確認してください. これによ り正しく実行されたことがわかります. サウンドカードの場合のコマンドは次の通りです. # sh MAKEDEV snd0 これにより対応するエントリが作られます. 注: サウンドカードのようなデバイスのノードを作る場合で, もし他 の人がマシンにアクセスするようであれば, そのデバイスを /etc/fbtabファイルに追加して外部からのアクセスから 保護するのが望ましいでしょう. このファイルの詳細については man fbtab を参照してください. GENERICに含まれていないためにエントリが作られていないデバイスでは, 以上の簡単な手順をおこなうことになります. /devの エントリを使用しますのでノードを作る必要はありません. またネッ トワークカードと SLIP/PPP疑似デバイスは /devにはエント リがありませんのでこれらについても作る必要がありません. 問題が起きた場合には

カスタムカーネルを作る場合に起きるトラブルは4種類に分けられま す. Config コマンドの失敗

カーネルにあなたの設定をおこなった場合で configコ マンドが失敗したのであれば, 多分どこかで単純な間違いを やっているのでしょう. さいわい, configはトラ ブルの起きた行番号を出力しますので viで素早く 見つけることができます. 例えばもし次のように出力されれ ば, config: line 17: syntax error viのコマンドモードで ``17G''とタイプすればあな たは問題のところへ飛ぶことができます. GENERIC カーネル のファイルや他のリファレンスと比較して注意深く修正して ください. Make コマンドの失敗

make コマンドが失敗した場合には, カーネル設定で configがとらえられなかったような間違いをして いることが多いようです. ふたたびコン フィグレーションを見直してください. それでも問題を解決 することができなければ &a.questions へあなたのカーネルのコンフィグレーションをつけてメー ルしてください. 誰かが素早く間違いを見つけてくれるで しょう. カーネルがブートしない

新しいカーネルがブートしなかったり, デバイスの認識をしな い場合でもあわてないでください! さいわい, BSDは利用で きないカーネルから復帰する優れたメカニズムがあります. FreeBSDの bootプロンプトでリターンキーを押すかわりに 単にブートさせたいカーネルの名前 (例えば ``kernel.old'') をタイプするだけです. カーネルの再設定 をおこなう場合に現在のカーネルを利用できるように取ってお くのはよい考えです. 問題のないカーネルでブートした後にあなたのコンフィグレー ションファイルを調べ, 再び構築を試みてください. /var/log/messages ファイルにはすべての成功した ブートのカーネルのメッセージやその他の記録があり, これ は助けになる情報の一つでしょう. また, dmesg(8)コマンドは現在のブート時のカーネルメッ セージを出力します. kernel. oldは新しいカーネルをインストールする 時に, その一つ前にインストールしたうまく動かないかもしれ ないカーネルで上書きされてしまいますので当てにできませ ん. またできる限り早く動作しているカーネルを本来の ``kernel''の位置に移動させてください. そうしないと ps(1)のようなコマンドが正しく動きません. make でインストールされたカーネルのファイルを (別のカーネルに戻すために) 「アンロック」するための特別 のコマンドは # chflags noschg /kernel です. また, 新しい置き換えたカーネルあるいは重要ファイ ルを動かしたり変更されないように「ロック」するには 次のようにします. # chflags schg /kernel カーネルは動くが ps は動かない!

システムユーティリティと異るバージョンのカーネルをインス トールした場合, 例えば 実験的に ``2.2.0''のカーネルを 2.1.0-RELEASEシステム上にインストールするような場合, ps(1)vmstat(8)のような多くのシ ステムステータスコマンドは動かなくなります. libkvm を 再コンパイルしてこれらのユーティリティを作りなおす必要がありま す. これは, オペレーティングシステムのそれ以外の部分と異るバージョ ンのカーネルを使うことが普通はあまりよくない理由の一つです.