カーネル/コンフィギュレーション

From Gentoo Wiki
< Kernel
Jump to:navigation Jump to:search
This page is a translated version of the page Kernel/Configuration and the translation is 100% complete.

この記事では、Linux カーネル の設定とセットアップを手作業で行う方法について説明しています。「安全でデフォルトの」設定を行う方法は、genkernel の記事を参照してください。

シンボリックリンクの作成

/usr/src/linux のシンボリックリンクは常に、現在使用中のカーネルのソースへ張られるべきです。このシンボリックリンクを張るのは、以下の3つの方法のいずれかで可能です。

1. symlink USE フラグを有効にして、カーネルソースをインストールする。この方法では、新たにインストールするカーネルソースを指す /usr/src/linux が作成されます。もしも必要ならば、以下の2つの方法で後ほど変更することもできます:

2. eselect でシンボリックリンクを設定する:

root #eselect kernel list
Available kernel symlink targets:
[1] linux-3.3.8-gentoo
[2] linux-3.4.9-gentoo

eselect は、利用可能なカーネルソースのリストを出力します。アスタリスクは、選択中のソースを示します。カーネルソースを、例えば2つ目の項目に変更するには:

root #eselect kernel set 2

3. 手作業でシンボリックリンクを設定する:

root #ln -sf /usr/src/linux-3.4.9-gentoo /usr/src/linux
root #ls -l /usr/src/linux
lrwxrwxrwx 1 root root 11 Aug 29 22:10 /usr/src/linux -> /usr/src/linux-3.4.9-gentoo

コンフィギュレーション

ツール

カーネルは、自身のコンフィギュレーションのために使える、いくつかのユーザ向けツールを提供しています。

コマンド 説明
make config テキストベースの設定。オプションは1つずつ尋ねられます。すべてのオプションに回答する必要があり、以前のオプションに順番を無視してアクセスすることはできません。
make menuconfig ncurses ベースの擬似グラフィカルメニュー(テキスト入力のみ)。メニュー内を移動して希望するオプションを変更します。
make defconfig ARCH が提供する defconfig ファイルのデフォルト値で新しい設定ファイルを生成します。ソースに付属していたデフォルト設定ファイルに戻すにはこのオプションを使用してください。
make nconfig ncurses ベースの擬似グラフィカルメニュー。sys-libs/ncurses がインストールされている必要があります。
make xconfig Qt5 を利用するグラフィカルメニュー。dev-qt/qtwidgets がインストールされている必要があります。
make gconfig GTK を利用するグラフィカルメニュー。x11-libs/gtk+dev-libs/glibgnome-base/libglade がインストールされている必要があります。
make oldconfig カーネルバージョン間の違いを確認して更新し、そのカーネル向けの新しい .config ファイルを作成します。
make olddefconfig ARCH が提供した defconfig ファイルのデフォルト値で新しい設定を生成しますが、同時に /usr/src/linux/.config にある .config でセットされている以前のオプションすべてを維持します。これは、ハードウェアサポートに必要なすべての設定を持つ設定ファイルをバグ修正やセキュリティーパッチも得られるように更新できる、高速かつ安全な方法です。
make allyesconfig カーネルのすべての設定オプションを有効にします。これは、すべてのカーネルオプションを * に設定します。このオプションを使う前に、現在のカーネル設定のバックアップをとってあるか必ず確認してください!
make allmodconfig カーネルのすべてのモジュールを有効化します

他にも雑多なデフォルトの設定を作成するスクリプトがいくつかあります。これらを使うことでより込み入った設定を更に時短に行うことができます。makeのすべてのターゲットの一覧を見るには、次のコマンドを実行してください:

root #make help

この記事の以降の部分では make menuconfig を用いた設定方法について述べていますが、手続きは他のカーネルビルドツールと似ています。

root #cd /usr/src/linux
root #make menuconfig

操作方法

表示されたメニューの青いバーはカーソルの位置を表しています。 矢印キーでカーソルの位置を変更できます。 矢印キーで下のメニューバーを横に移動でき、これによって Enter キーが押されたときに何が起こるかが決まります。下のメニューバーのSelect---> で終わるメニューエントリーのサブメニューに切り替える一方、Exit はサブメニューを出ます。代わりに Esc を2回押すことでアプリケーションを終了することもできます。

関連付けられた文字キー A-Z を押すと、カーソルの位置がその文字が太線になっている行に移動します。YMN キーはこの方法でのナビゲーションには使用できません; これらは別の用途のために特別な扱いになっています。Y、M、N で始まる行はその次の文字が太字になっており、これに跳ぶことができます。たとえば現在のカーソル位置から見て次の行が「Network Device Support --->」となっている場合、E キーを押すとカーソルはその行に移動します。

以下のマークがメニューの行の先頭に現れることがあります:

シンボル 説明
[ ], [*] 角括弧のオプションは有効または無効にすることができます。アスタリスクはそのメニュー項目が有効になっていることを表します。値は space キーで変更可能です。また、 Y キー (Yes) を押して選択されている項目を有効化したり N キー (No) を押して無効化することもできます。


オプションが有効化されている場合、選択されている機能/ドライバーはカーネル内に組み込まれてブート中いつでも利用可能になります。

< >, <M>, <*> 山括弧のオプションは有効または無効にすることができますが、モジュールとして有効化することもできます (M で表されます)。値は前と同じく Y/N キーを押して変更できるほか、M キーを押して機能/ドライバーをモジュールとして有効化することができます。


区別については Kernel Modules の記事を見てください。

{M}, {*} 波括弧のオプションは有効化またはモジュールとして有効化することができますが無効化することはできません。これは他の機能/ドライバーがこの機能に依存しているために起こります。
-M-, -*- ハイフンに囲まれたオプションは、他の機能/ドライバーによって、表示されている形式で有効化されています。選択の余地はありません。

さらに、メニュー項目の中には最後にタグがついているものもあります:

タグ 説明
(NEW) このドライバは新しいものでまだ十分に安定していないかもしれません。
(EXPERIMENTAL) このドライバは実験的なもので安定していない可能性が高いです。
(DEPRECATED) このドライバは非推奨でほとんどのシステムにとって必要ではありません。
(OBSOLETE) このドライバは時代遅れで有効にするべきではありません。

ほとんどのオプションには解説がついていて、H キーを押すかメニューバーの Help を選ぶことで見ることができます。

ドライバの選択

hardware detection の記事や Hardware カテゴリー内の記事を見てください。

モジュールの検索

menuconfigを使って, /の文字を押すとカーネルモジュールを検索事ができます.

以下のように、検索結果では該当する部分の前に番号が表示されます。以下の例で 1 を押すと make menuconfig のメニュー構造の中の Bluetooth device drivers オプションに直接跳ぶことができます。

カーネル HCIBTUSB を検索した際の出力の例
Symbol: BT_HCIBTUSB [=m]                       
Type  : tristate                               
Prompt: HCI USB driver                         
  Location:                                    
    -> Networking support (NET [=y])           
      -> Bluetooth subsystem support (BT [=y]) 
(1)     -> Bluetooth device drivers            
  Defined at drivers/bluetooth/Kconfig:5       
  Depends on: NET [=y] && BT [=y] && USB [=m]

Gentoo Linux の一般的な設定を有功にする

sys-kernel/gentoo-sources やその他の Kernel Project が保守しているカーネルのみで提供されている、CONFIG_GENTOO_LINUX というカーネル設定オプションがあります。これ自体は何もしませんが、典型的なインストールにおいて必要となる様々な設定オプションをセットします。

この設定は Gentoo Linux において /dev を処理するために必要な tmpfsdevtmpfs のサポートを自動的に選択しますが、将来的にはそれ以外の Gentoo Linux システムにおける必須設定を有効化するように拡張されるかもしれません。詳細については、このガイドの上の方で説明したように、カーネルの設定システムを通じて利用可能なヘルプ情報を読んでください。

ビルド

正常に設定できたら、カーネルをコンパイルします:

root #make
メモ
システムで利用可能なスピードとコア数に応じて、カーネルのビルドはある程度の時間がかかることがあります。システムの CPU コア数が分かっている場合、コンパイルプロセスを高速化させるために、-jN (ここで N は利用可能なコア数 + 1 です) オプションを使用できます。たとえば論理コア 2 つを含んでいるデュアルコアプロセッサーなら、1 を足して (2 + 1) です。利用可能なコア数を判別する簡単な方法は、nproc コマンドを時刻することです:

user $nproc
3
root #make -j3

論理コアが4つあるクアッドコアシステムでは、1を足して(4 + 1):

root #make -j5

セットアップ

ドライバーがモジュールとして有効化されている場合、それらをインストールする必要があります:

root #make modules_install

モジュールは /lib/modules のサブディレクトリにコピーされます。

カーネル本体をインストールするには:

root #make install

このコマンドは sys-apps/debianutils の一部である /sbin/installkernel を実行します。新しいカーネルは /boot/vmlinuz-{version} にインストールされます。シンボリックリンク /boot/vmlinuz が既に存在する場合、/boot/vmlinuz から新しいカーネルへのリンクが作成されて置き換えられます。以前にインストールされたカーネルは /boot/vmlinuz.old として利用可能です。 (installkernel man ページ) (訳註: 原文では英語で引用されています)。configSystem.map ファイルについても同様です。これらのシンボリックリンクはファイルパスを変更しなくても常に最新のカーネルを指し示すので便利です(たとえばこれらをブートローダーの設定で使用できます)。

ブートローダ

システムのブートローダー設定を変更して、システムブート時に新しいカーネルをロードするようにします。

ブートローダのステップが完了したら、新しいカーネルでシステムを再起動しましょう。

現在のカーネル設定をデフォルトの設定と比較する

以下の手順で、デフォルトと異なるカーネル設定の概要を得ることができます。1つのコンフィギュレーション設定を変更すると、さらにいくつかのコンフィギュレーション設定が変更されるかもしれないことを覚えておいてください。

root #cd /usr/src/linux
root #cp -p .config ../.config.working
root #make defconfig
root #mv .config ../.config.default
root #cp -p ../.config.working .config
root #cd ..
root #/usr/src/linux/scripts/diffconfig .config.working .config.default > .config.diff

make menuconfig の検索機能はシンボルやその説明を調べるために使用できます。 終わったら後片付けをしましょう:

root #cd /usr/src/
root #rm .config.working .config.default .config.diff

関連項目

外部の情報