FreeBSD 2.X、3.X、4.X についての FAQ (よくある質問とその答え)
Prev |  | Next

# Chapter 6. カーネルコンフィグレーション

訳: はらだ きろう `<kiroh@jp.FreeBSD.org>`、 1997 年 11 月 10 日

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

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

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

> Note: うまく動作するカーネルができたら、 日付入りのカーネルのスナップショットを `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 buildkernel` や `make installkernel` ターゲットを使わず、 現在走っているシステムを構築した時と異なるソースツリーを 構築しようとしている (たとえば、4.0-RELEASE のシステム上で 4.3-RELEASE を構築しようとしている) のではないでしょうか? もしシステムをアップグレードしようとしているのなら、 `/usr/src/UPDATING` ファイルを “共通項目 (COMMON ITEMS)” 節に注意しながら最後までお読みください。

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

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

Prev | Home | Next
ユーザアプリケーション |  | システム管理