第6章 カーネルコンフィグレーション

訳: はらだ きろう 、 1997 年 11 月 10 日

6.1. カーネルをカスタマイズしたいんですが、難しいですか?
6.2. _hw_float が無いので、カーネルのコンパイルがうまくいきません。
6.3. わたしのカーネルはどうしてこんなに大きい (10MB 以上) のでしょうか?
6.4. マルチポートシリアルのコードで割り込みが衝突しています。
6.5. カーネルを構築にいつも失敗します。 GENERIC カーネルも構築できません。

6.1.

カーネルをカスタマイズしたいんですが、難しいですか?

全然難しくありません。 カーネルの再構築を調べてください。

注記:

うまく動作するカーネルができたら、 日付入りのカーネルのスナップショットを kernel.YYMMDD のように作成することをおすすめします。 こうしておけば、次にカーネルの構築をやってうまくいかなくなってしまっても、 kernel.GENERIC にわざわざ戻る必要がなくなります。 これは、GENERIC カーネルでサポートされないデバイスから起動している場合は、 特に重要です。

6.2.

_hw_float が無いので、カーネルのコンパイルがうまくいきません。

推測ですが、数値演算コプロセッサを持ってないからと思って、 npx0 (npx(4) 参照) をカーネルコンフィグファイルから削除してしまったのではないでしょうか? npx0必須です。 コプロセッサがなくても、npx0 デバイスは削除してはいけません。

6.3.

わたしのカーネルはどうしてこんなに大きい (10MB 以上) のでしょうか?

これはデバッグモードでカーネルを構築していることが原因です。 デバッグモードで構築されたカーネルは、 デバッグに用いられる膨大なシンボル情報を含んでいるため、 カーネルのサイズが非常に大きくなります。 ただし FreeBSD 3.0 とそれ以降のシステムの場合は カーネルのサイズは小さくなりますし、 デバッグカーネルを実行する時のパフォーマンスの低下もありません。 また、そのカーネルはシステムがパニックした場合に有用です。

しかし、容量の小さなディスクでシステムを運用していたり、 単にデバッグカーネルを実行したくない場合は、 以下の両方が当てはまっているかどうか確認してください。

  • カーネルコンフィグファイルに以下の行が書かれていないこと。

    makeoptions DEBUG=-g
  • config を実行する際、 -g オプションを付けていないこと。

上に書かれた指定は両方ともカーネルをデバッグモードで構築するためのものです。 上の手順を従っている限り、カーネルを普通に構築してサイズの小さなカーネルを得ることができます。 その場合のカーネルサイズは、およそ 1.5MB から 2MB 程度になります。

6.4.

マルチポートシリアルのコードで割り込みが衝突しています。

マルチポートシリアルを サポートするコードを含んだカーネルをコンパイルしようとすると、 最初のポートだけ検出され、 残りのポートは割り込みの競合のためスキップされたと言われます。 どうやったらいいでしょうか?

ここでの問題は、FreeBSD にはハードウェアまたはソフトウェアの競合により、 カーネルがクラッシュするのを防ぐコードが含まれているという点です。 解決するには、最初のポートにだけ IRQ の設定を書き、 残りは IRQ の設定を削除します。 以下に例を示します。

# Multiport high-speed serial line - 16550 UARTS
#
device sio2 at isa? port 0x2a0 tty irq 5 flags 0x501 vector siointr
device sio3 at isa? port 0x2a8 tty flags 0x501 vector siointr
device sio4 at isa? port 0x2b0 tty flags 0x501 vector siointr
device sio5 at isa? port 0x2b8 tty flags 0x501 vector siointr

6.5.

カーネルを構築にいつも失敗します。 GENERIC カーネルも構築できません。

さまざまな理由が考えられます。以下、順に列記します。

  • あなたは新しい make buildkernelmake installkernel ターゲットを使わず、 現在走っているシステムを構築した時と異なるソースツリーを 構築しようとしている (たとえば、4.0-RELEASE のシステム上で 4.3-RELEASE を構築しようとしている) のではないでしょうか? もしシステムをアップグレードしようとしているのなら、 /usr/src/UPDATING ファイルを 共通項目 (COMMON ITEMS) 節に注意しながら最後までお読みください。

  • あなたは新しい make buildkernelmake installkernel ターゲットを 使っているのにも関わらず、 make buildworld を行なっていないのではないでしょうか? make buildkernel ターゲットは、 make buildworld ターゲットによって作られるファイルに依存しています そのため、make buildkernel が正常に終了するためには make buildworld ターゲットが正常に完了している必要があります。

  • 構築しようとしているのが FreeBSD-STABLE だったとしても、あなたが入手したソースツリーが何らかの理由で 書き換わったり、壊れてしまっているのかも知れません。 FreeBSD-STABLE はほとんどの場合、きちんと構築できるようになっていますが、 確実に構築可能であることが保証されているのは リリース版だけです。一度ソースツリーを再取得して、 問題が解決しないかどうか試してみてください。 また、あるサーバから取得した時に問題が発生したら、 別のサーバを試すのも効果があるかも知れません。

本文書、および他の文書は ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/ からダウンロードできます。

FreeBSD に関する質問がある場合には、 ドキュメント を読んだ上で <questions@FreeBSD.org> まで (英語で) 連絡してください。

本文書に関する質問については、 <doc@FreeBSD.org> まで電子メールを (英語で) 送ってください。