Gentoo Logo

Gentoo Linux カーネル設定ガイド

目次:

1.  はじめに

Gentooでは自動化(genkernel)手動の2通りを、 カーネルのインストールとアップグレードの方法として提供しています。 自動化された方法はユーザにとってより簡単であると考えられますが、 Gentooユーザの大部分がカーネルの手動設定を選択する背景には、 優れた柔軟性、より小さいカーネル、短いコンパイル時間、学習経験、面白みにかけるなどの幾つかの理由があります。

このガイドでは自動化された方法(genkernel)については記載していません。 もしgenkernelを使いカーネルをコンパイルし、インストールするのを選ぶのであれば、 Genkernelガイド(日本語訳)を参照してください。

設定手順は多くの一般常識と、高いレベルのシステムについての技術的知識に依存しているため、 このガイドは最初から最後までの手動設定手順を文書化していません。 その代わりに、この文書では手動設定における概念の紹介と、ユーザが直面するよくある落とし穴を詳しく述べます。

このドキュメントは最近のカーネルを念頭に、最も一般的なコンピュータアーキテクチャに向けて書かれています。 幾つか細かい所がより古いカーネルやよりエキゾチックなアーキテクチャとは違うかもしれません。 しかし、内容の多くはそれでも役立つでしょう。

ここで、Linuxカーネルソースをハードディスク上(通常/usr/srcの下に)に解凍してあると仮定します。 また、menuconfig設定ユーティリティへの入り方と、メニューシステムでの移動の仕方を知っていると仮定します。 もしこの段階にまだ達していなければ、他のドキュメントが参考になるでしょう。

2.  設定コンセプト

規則

一般的なプロセスはかなりシンプルです。 一連のオプションがそれぞれのメニューやサブメニューに分類され表示されます。 あなたはシステムに関連したハードウェアのサポートやカーネルの機能を選択するだけです。

カーネルは最初にmenuconfigを実行したときにソースによって設定される特有のデフォルトの設定が最初から含まれています。 そのデフォルトの設定は、大多数のユーザが少ない回数の変更のみで基礎の設定をおこなえるように、一般的に広く機能的です。 もしデフォルトで有効になっているオプションを無効にするのであれば、そのオプションの機能、さらにはそれを無効にすることによってもたらされる結果についての充分な理解が必要です。

もし初めてLinuxカーネルを設定する場合、おそらく保守的になったほうが良いでしょう。 あまり大胆にならず、デフォルトの設定に対して可能なかぎり最小限の変更にとどめておくよう心がけるべきです。 一部の設定項目はシステムがうまく起動するように、必ずあなたのシステムに合わせて設定しなければいけないことを心に止めておいてください。

組み込みとモジュール

ほとんどの設定オプションは、全く組み込まない、カーネル内に直接組み込む(Y)、モジュールとして組み込む(M)の三種類の状態を取ります。 モジュールはファイルシステム上の外部に格納されるのに対して、組み込み項目はカーネルイメージ内に項目を組み込みます。

組み込みとモジュールには重要な違いがあります。 いくつかの例外はありますが、カーネルは外部モジュールを必要とするときでさえも、それらを自動的に読みに行くことはありません(ユーザに委ねられます)。 システムの他のある一部はロードオンデマンド機能があるかもしれません、また利用可能な自動モジュールロード用ユーティリティもあるとはいえ、 直接カーネル内にハードウェアのサポートとカーネルの機能を組み込むことをお勧めします。 これによりカーネルは特定の機能やハードウェアのサポートを確保し、必要とされた際には提供することが可能となります。

もちろん設定のいくつかは、組み込みが絶対要件です。 例えば、もしルートパーティションがext2ファイルシステムだった場合、システムにext2がモジュールとして組み込まれていたらシステムは起動しないでしょう。 (システムはext2モジュールを探すためにルートパーティションを見なければなりませんが、すでにext2モジュールがロードできていない限りルートパーティションを見ることができません)

ハードウェアサポート

システムのアーキテクチャタイプの検出を除いては、 設定ユーティリティはシステムに現在備わっているハードウェアを確認することを試みません。 いくつかのハードウェアサポートがデフォルトの設定にはありますが、 あなたはほぼ確実にシステムのハードウェア設定に関連する設定オプションを間違いなく見つけ、選択する必要があるでしょう。

これは単純にコンピュータに内蔵または接続されているコンポーネントについてそれらを識別する知識が要求されます。 ほとんどの内蔵コンポーネントは、小売の製品名よりそれぞれに使われているチップセットを識別する必要があります。

あなたの助けとなる幾つかのユーティリティがあります。 lspci(sys-apps/pciutilsパッケージに入っています)はPCIベースやAGPベースのハードウェアを識別します、 そしてそこにはマザーボードと、その上に組み込まれているハードウェアも含まれます。 lsusb(sys-apps/usbutilsパッケージの一部)はUSBポートに接続されているデバイスを識別します。

現状ハードウェア業界にはいくつもの標準化規格があり、混乱した状況になっています。 デフォルトから極端に外れない限り、IDEハードディスクはPS/2やUSBのキーボードやマウスのようにうまく動作するでしょう。 標準的なVGAディスプレイのサポートも備わっているはずです。 しかしながら、イーサネットアダプタのうような幾つかのデバイスはほとんど標準化されていないので、 あなたが使用しているカードでネットワークにアクセスするためにはイーサネットチップセットを識別し、適切なハードウェアサポートを選択する必要があります。

さらに、デフォルトの設定のままでも幾つかのものはそのまま動作しますが、システムの性能を最大限に引き出すためにはより詳細なオプションを選択する必要があるでしょう。 例えば、もし適切なIDEチップセットのサポートを有効にしないのであれば、IDEハードディスクはとても遅いでしょう。

カーネルの機能

ハードウェアのサポートと同様に、カーネルに必要なソフトウェア機能の観点から考える必要もあります。 このような機能の一つの重要な例はファイルシステムのサポートです。 ハードディスク上で使用しているファイルシステム、 または外部ストレージで使用されるファイルシステム(例えばUSBフラッシュディスク上のVFATのような)のサポートを選択する必要があります。

別の一般的な例は高度なネットワーク機能です。 もしある種のルーティングやファイヤーウォールを使いたい場合、 関連する設定項目がカーネルの設定に含まれている必要があります。

準備は出来ましたか?

今私たちはコンセプトについて紹介してきました。 あなたはハードウェアの識別を始め、設定メニューを読み、システムに必要なカーネルオプションを選択することが出来るはずです。

このページの残りの部分はよく混乱しやすい点を明らかにし、ユーザが頻繁に陥る一般的な問題を回避する方法についてアドバイスします。 では、幸運を祈ります!

3.  一般的な問題と混乱する部分

SATAディスクはSCSI

多くの近代的なデスクトップシステムは、より古いIDE(日本語版)バスではなく、 Serial ATA(日本語版)バス上に、 ストレージデバイス(ハードディスクやCD/DVDドライブ)を搭載しています。

LinuxでのSATAサポートはSCSIサブシステムの下に存在するlibataと呼ばれるレイヤーに実装されています。 このためSATAドライバーの設定は、SCSIドライバーセクションにあります。 さらに、ストレージデバイスはSCSIデバイスとして扱われるため、SCSIのディスクやCDROMサポートも必要となるでしょう。 あなたのSATAハードディスクは例えば、/dev/sdaとして、 SATA CD/DVDドライブは/dev/sr0として認識されるでしょう。

これらのdriverの大半はSATAドライバーのコントローラ用ですが、libataはSATA用に設計されていません。 大部分の標準的なIDEドライバーも近い将来にlibataにポーティングされるでしょう。 そして、その時点で上記の配慮はIDEユーザにも当てはまるようになります。

コード表示 3.1: libataのオプション設定

Device Drivers  --->
 SCSI device support  --->
  <*> SCSI device support
  <*>   SCSI disk support
  <*>   SCSI CDROM support

  SCSI low-level drivers  --->
   <*> Serial ATA (SATA) support
  上記のオプションの下に表示される選択肢からチップセットを選択します

IDEチップセットとDMA

SATAの導入にもかかわらず、IDEデバイスはまだよく使われており、多くのものに依存されています。 IDEは非常に一般的な技術ですので、LinuxはまだほとんどすべてのIDEコントローラを、 コントローラ向けのオプションを選択することなくそのままサポートしています。

しかしながら、IDEは古い技術です。そして、元のプログラムI/O(Programmed I/O)の化身で、 現在のストレージデバイスへの速いアクセスに必要な転送速度を提供することはできません。 一般的なIDEドライバはこのようなPIO転送モードに限られているため、 結果としてデータ転送は遅く、データの入出力中はCPU使用率が著しく高くなります。

1995年以前のシステムを扱う場合を除き、IDEコントローラはDirect Memory Access(DMA)として知られる、代替転送モードをサポートしているでしょう。 DMAは非常に早く、CPUの利用はデータ転送が行われる間わずかに使われるだけです。 もしあなたが本当に貧弱な汎用システムのパフォーマンスに悩んでおり、さらにIDEディスクを利用している場合は、DMAを使用していない確率が高いです。

注意: 前述のようにIDEドライバー用のlibataも存在しています。 もしlibataを使っている場合、以降IDEドライブを含むすべてのドライブはDMAを使用することになります。 そのためにいかなる確認や設定も必要ありません。

もしIDEディスクがlibataを使用していないらば、その時はDMAの使い方を確認し、有効にする必要があるでしょう。

コード表示 3.2: IDEディスクでDMAが有効かの確認

# hdparm -d /dev/hda

/dev/hda:
 using_dma    =  0 (off)

IDEデバイスでDMAを有効にするには、ただIDEコントローラの設定オプションを有効にする必要があるでしょう。

コード表示 3.3: IDEコントローラの設定オプション

 ATA/ATAPI/MFM/RLL support  --->
  <*> ATA/ATAPI/MFM/RLL support
  <*>   Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support
  [*]     PCI IDE chipset support
  上記のオプションの下に表示される選択肢からチップセットを選択します

USBバスとコントローラ

USB(日本語版)はコンピュータを外付け周辺機器に接続するために幅広く採用されているバスです。 USBが成功した理由の一つは、プロトコルが標準化されていることです。 しかしながら、USBホストコントローラデバイス(HCDs)は非常に少ない種類ですがコンピュータ上で実装されています。 USBホストコントローラには3つの種類があります。

  • UHCIはUniversal Host Controller interfaceの略称です。 UHCIはUSB 1.1をサポートしていて、通常VIAやIntelのチップセットをベースにしたマザーボードに見られます。
  • OHCIはOpen Host Controller Interfaceの略称です。 OHCIはUSB 1.1をサポートしていて、通常NvidiaやSiSのチップセットをベースにしたマザーボードに見られます。
  • EHCIはExtended Host Controller Interfaceの略称です。 EHCIはUSB 2.0をサポートしている唯一のホストコントローラインタフェースで、 通常USB 2.0をサポートしているあらゆるコンピュータに見ることができます。

ほとんどのシステムは上記の2つのインタフェースタイプ(USB 2.0のEHCIと、USB 1.1のUHCIかOHCIのどちらか)があるでしょう。 システムが提供しているUSB HCDタイプのオプションを両方選ぶことは重要なことです。 すべてのUSB 2.0デバイスはUSB 1.1と後方互換性があるとはいえ、 現在製造されているものであってもUSBデバイスの大部分はUSB 1.1インタフェースをベースにしています。 (USBマウスに1.5Mbit/秒の速度が必要ですか?)

システムに存在するUSB HCDタイプに適合するオプションを選択しなかった場合、 デバイスを接続しても電力が得られなかったり、全く反応しない無意味なUSBポートを体験するかもしれません。

sys-apps/pciutilsパッケージに含まれるlspciをうまく使えば、 システムに存在するHCDがどれか調べるのを比較的簡単にしてくれます。 意図せず一致してしまったFireWireコントローラを無視すれば、システムが必要としているのがOHCIとEHCIのサポートであることを見つけるのは簡単です。

コード表示 3.4: lspciを使ってHCDタイプを調べる

# lspci -v | grep HCI
00:02.0 USB Controller: nVidia Corporation CK804 USB Controller (rev a2) (prog-if 10 [OHCI])
00:02.1 USB Controller: nVidia Corporation CK804 USB Controller (rev a3) (prog-if 20 [EHCI])
01:0b.0 FireWire (IEEE 1394): Agere Systems FW323 (rev 61) (prog-if 10 [OHCI])

コード表示 3.5: USB HCDの設定

Device Drivers  --->
 USB support  --->
  <*> Support for Host-side USB
  ---   USB Host Controller Drivers
  <*>   EHCI HCD (USB 2.0) support
  <*>   OHCI HCD support
  <*>   UHCI HCD (most Intel and VIA) support
  システムに存在するHCDを選択するか、もしわからなければ3つ全てを選択します

マルチプロセッサ。ハイパースレッディングと、デュアルコアシステム

多くのコンピュータシステムはマルチプロセッサに基づいていますが、必ずしも明らかにそうなっているわけではありません。

  • IntelのCPUの多くはハイパースレッディング(日本語版)と呼ばれる CPUがシステムから実際は2つの論理的なプロセッサに見える技術をサポートしています。
  • 最近のIntelやAMDのCPUのほとんどは実際にひとつのパッケージの中に、複数の物理的なプロセッサからなっています。 それらは、デュアルコア(日本語版)プロセッサとして知られています。
  • 幾つかの高性能なコンピュータシステムは単一のプロセッサを持つシステムに比べて大幅に増加したパフォーマンスを提供するために、 特別なマザーボードを備え実際に複数の物理的なプロセッサを持っています。 そのようなシステムは安くないので、持っていればたぶん知っているでしょう。

これらのケース全てにおいて、最適な性能を得るために最適なカーネルオプションを以下から選択する必要があります。

コード表示 3.6: マルチプロセッシングのための設定

Processor type and features  --->
 [*] Symmetric multi-processing support
 システムがマルチプロセッサの場合(どのタイプであっても)、上記のオプションを選択します
 [*]   SMT (Hyperthreading) scheduler support
 システムがIntelのハイパースレッディングCPUの場合、上記のオプションを選択します
 [*]   Multi-core scheduler support (NEW)
 CPUがデュアルコアの場合、上記のオプションを選択します
Power management and ACPI options  --->
 [*] ACPI (Advanced Configuration and Power Interface) Support
 上記のオプションは電源管理機能が有効にする場合だけなく、システムのすべてのCPUを有効にするために必要かもしれません

x86のハイメモリサポート

x86アーキテクチャの32ビットアドレス空間の制限のため、デフォルト設定のカーネルでは896メガバイトまでのRAMしかサポートできません。 もしそれ以上のメモリがあっても、ハイメモリサポートを有効にするまでは最初の896メガバイトだけしかみることができないでしょう。

注意: この制限はx86(IA32)アーキテクチャ特有のものです。 他のアーキテクチャは設定の必要なく自然に大量のメモリをサポートしています。

ハイメモリサポートは小さいシステムオーバヘッドをもたらすため、デフォルトでは有効になっていません。 オーバヘッドはより多くのメモリが利用できることによるパフォーマンスを増加と比較したら取るに足らないので、特に気にしないでください。

コード表示 3.7: x86でのハイメモリサポートの有効化

Processor type and features  --->
 High Memory Support  --->
  (X) 4GB
  ( ) 64GB
  システムに4ギガバイト以上のRAMがないのであれば、4GBを選択して下さい

4.  カーネル設定の略記法

はじめに

カーネル設定について読むと、CONFIG_<something>という記述をよく見かけます。 これは実際に内部で使われているカーネル設定の略記法で、/usr/src/linux/.configや自動生成される/proc/config.gzファイルなどのカーネル設定ファイルで見ることができます。 もちろんカーネル設定の実際の場所に変換できないときは、略記法を使うのはあまりよくないでしょう。 しかし、幸運にもmake menuconfigツールはそれをしてくれます。

CONFIG_FOOの実際の設定箇所への変換

CONFIG_TMPFS_XATTRを有効にしたいと考えた場合、カーネル設定メニュー(make menuconfig)を起動し、/を入力します。 これで検索窓が開きます。 この検索窓にCONFIG_TMPFS_XATTR(CONFIG_を省略することもできます)と入力します。 次のコード表示はこの検索の結果を示しています。

コード表示 4.1: CONFIG_TMPFS_XATTRの検索結果

Symbol: TMPFS_XATTR [=n]
Type  : boolean
Prompt: Tmpfs extended attributes
  Defined at fs/Kconfig:138
  Depends on: TMPFS [=y]
  Location:
    -> File systems
      -> Pseudo filesystems
        -> Virtual memory file system support (former shm fs) (TMPFS [=y])
  Selected by: TMPFS_POSIX_ACL [=n] && TMPFS [=y]

これには多くの興味深い情報が出力されています。

項目 説明
Symbol: TMPFS_XATTR [=n] これで探しているカーネル設定のエントリかを見分けることができます。 また、設定が現在無効([=n])で有ることを示しています。
Type: boolean この設定は有効か無効かを設定できる真偽値(boolean)です。 いくつかの設定は数字(numbers)や文字列(strings)になっています。
Prompt: Tmpfs extended attributes make menuconfigなどで見られる本文で、人が読むのにより適したものです。
Depends on: TMPFS [=y] このエントリを参照する前に、CONFIG_TMPFSを有効にする必要があります。 このケースでは、[=y]となっているため既に有効になっています。 しかし、このようなケースではない場合、まずCONFIG_TMPFSを探し、有効にする必要があります。
Location: ... make menuconfigの構造内でこの設定を見つけることができる場所です。 探している設定はTmpfs extended attributesであることを思い出してください。
Selected by: TMPFS_POSIX_ACL [=n] && TMPFS [=y] 今回のケースでは一つ目の設定はそうなっていませんが、もしここに記載されている設定が両方有効な場合、CONFIG_TMPFS_XATTRは自動的に有効になっていて、おまけに設定は無効にすることはできないでしょう。

この情報により、必要なCONFIG_*を提示し、略記法から実際の場所への変換を楽にできるでしょう。 つまり、次のとおりです。

  1. Depends onに記述されている設定を有効にします
  2. Location:に示されているポイントに移動します
  3. Prompt:を参考にして、値を変更します

5.  他のカーネル設定ドキュメント

ここまで、カーネル設定に関して、詳しく述べるわけでもなく一般的な概念と特定の問題について論じてきました(詳細はあなたが見つけてください)。 しかし、Gentooドキュメントの他の部分ではテーマ特有の詳細を手元に提供しています。

そのような特定の部分について設定する際にはこれらのドキュメントを見ることが助けになるかもしれません。 しかし、カーネル設定の初心者であるのならば、あまり冒険をしないでください。 まず、基本システムが起動させ、動作させることからはじめましょう。オーディオや、プリンタなどのサポートの追加はいつでも後から戻って設定できます。

  • ALSAガイド(日本語訳)は、 サウンドカードのサポートについて必要なオプション設定を詳述しています。 カーネルの機能は普通組み込みにしたほうがよいですが、ALSAはモジュールとして構築した方がよいという特殊な例外の1つであることに注意してください。 ALSAは実際コンポーネントをモジュールとする方が設定がより簡単です。
  • bluetoothガイド(日本語訳)は、 システムのbluetoothデバイスを使うために必要なオプションを詳述しています。
  • IPv6ルータガイド(日本語訳)は、 次世代ネットワークアドレス体系を利用したルーティングのためのカーネル設定の仕方について記述しています。
  • クローズソースであるnVidiaグラフィックドライバを使って3Dグラフィックス機能向上を図りたいのであれば、 nVidiaガイド(日本語訳)がシステムで選択するべきオプションと、 選択するべきでないオプションを一覧にしています。
  • 特に電力管理ガイド(日本語訳)は、 CPU周波数スケーリングと、サスペンドとハイバネート機能のためのカーネル設定方法について説明しています。
  • もしPowerPCのシステムを動作させているならば、PPC FAQ(日本語訳)に、カーネル設定について幾つかのセクションがあります。
  • 印刷環境構築ガイド(日本語訳)は、 Linuxで印刷をサポートするために必要なカーネルオプションを一覧にしています。
  • USBガイド(日本語訳)は、 キーボード/マウス、ストレージデバイス、そしてプリンタのような一般的なUSBデバイスを使うために必要な設定を詳述しています。

6.  トラブルシューティング

設定変更が有効になりません

ユーザが設定を変更することはとても一般的です、しかしその時以下の処理で小さなミスをすることがあります。 彼らは再設定したのではないカーネルイメージで再起動しまい、 解決しようとした問題がまだ解決していないことを確認すると、おこなった設定変更が問題を解決しないと断定します。

カーネルをコンパイルして、インストールする処理はこのドキュメントの範囲外です。 一般的な手引きとしてカーネルアップグレードガイド(日本語訳)を参照するべきです。 要するに、処理は「設定をおこなう、コンパイルする、/bootをマウントする(まだマウントしていなければ)、カーネルイメージをそこにコピーする、再起動する」です。 もしこれら最終段階のいずれかを省略すると、おこなった変更は反映されないでしょう。

ハードディスクにコピーしたカーネルのコンパイル日時を調べることで、起動したカーネルかどうか確認することができます。 アーキテクチャがx86であるとすると、カーネルソースは/usr/src/linuxにインストールされます。

コード表示 6.1: 起動したものが変更したカーネルか確認する方法

# uname -v
#4 SMP PREEMPT Sat Jul 15 08:49:26 BST 2006
上記コマンドは現在起動しているカーネルがコンパイルされた日時を表示します

# ls -l /usr/src/linux/arch/i386/boot/bzImage
-rw-r--r-- 1 dsd users 1504118 Jul 15 08:49 /usr/src/linux/arch/i386/boot/bzImage
上記コマンドはハードディスクのカーネルイメージが最後にコンパイルされた日時を表示します

もし上記のコマンドによる2つの時間が2分以上違っていたら、カーネルの再インストールの間に失敗していて、変更をおこなったカーネルイメージから起動していないことを示しています。

モジュールが自動で読み込まれません

このドキュメントの最初で述べたように、カーネル設定システムはコンポーネントを組み込む(Y)よりもモジュール(M)を選択することで大きな動作変更を隠すことができます。 非常に多くのユーザがこの罠にかかるので、このことは再び繰り返して言う価値があります。

コンポーネントを組み込みとして選択した場合、コードはカーネルイメージ(bzImage)内に構築されます。 カーネルがそのコンポーネントを利用する必要があるときに、ユーザによる介入なしでコンポーネントは初期化され、自動で読み込まれます。

コンポーネントをモジュールとして選択した場合、コードはカーネルモジュールファイルとして構築され、ファイルシステム上にインストールされます。 一般的に、カーネルがそのコンポーネントを利用する必要があるときになっても、利用できません。 いくつかの例外を除いて、カーネルは実際これらのモジュールを読み込む作業をしません。 この作業はユーザに任されています。

そして、ネットワークカードのサポートをモジュールとして構築した後、ネットワークへのアクセスを確認できない場合、おそらくモジュールが読み込まれていないでしょう。 あなたはこれを手動で行うか、起動時に自動で読み込むようにシステムに設定しなくてはなりません。

特別な理由がない限り、カーネルが自動的にこれらのことを設定できるように、コンポーネントをカーネルイメージに直接構築し、時間を節約しましょう。



印刷

ページの更新日 2011年 12月 26日

この翻訳のオリジナルバージョンはすでにメンテナンスされていません。

要約: このドキュメントは手動でのカーネル設定の概念を紹介し、 設定時によく見られるいくつかの落とし穴について詳しく述べることを目的としています。

Daniel Drake
Author

Curtis Napier
Contributor

Justin Robinson
Contributor

ナ「kasz Damentko
Contributor

Jonathan Smith
Editor

Joshua Saddler
Editor

横田修作
翻訳

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.