カーネル/コンフィギュレーション
この記事では、Linux カーネルの設定とセットアップを手作業で行う方法について説明しています。
手動設定ではなく、「安全なデフォルト」を使用してジェネリックカーネルをビルドする方法としては、ディストリビューションカーネルがあります。
シンボリックリンクの作成
/usr/src/linux のシンボリックリンクは常に、現在使用中のカーネルのソースへ張られるべきです。このシンボリックリンクを張るのは、以下の3つの方法のいずれかで可能です。
1. symlink USE フラグを有効にして、カーネルソースをインストールする。この方法では、新たにインストールするカーネルソースを指す /usr/src/linux が作成されます。もしも必要ならば、以下の 2 つの方法で後ほど変更することもできます:
2. eselect でシンボリックリンクを設定する:
root #eselect kernel listAvailable kernel symlink targets: [1] linux-3.3.8-gentoo [2] linux-3.4.9-gentoo
eselect は、利用可能なカーネルソースのリストを出力します。アスタリスクは、選択中のソースを示します。カーネルソースを、例えば2つ目の項目に変更するには:
root #eselect kernel set 23. 手作業でシンボリックリンクを設定する:
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/glib 、gnome-base/libglade がインストールされている必要があります。 |
| make oldconfig | カーネルバージョン間の違いを確認して更新し、そのカーネル向けの新しい .config ファイルを作成します。 |
| make olddefconfig | ARCH が提供した defconfig ファイルのデフォルト値で新しい設定を生成しますが、同時に /usr/src/linux/.config にある .config でセットされている以前のオプションすべてを維持します。これは、ハードウェアサポートに必要なすべての設定を持つ設定ファイルをバグ修正やセキュリティーパッチも得られるように更新できる、高速かつ安全な方法です。 |
| make localmodconfig | 現在のコンフィグと、lsmod コマンドから確認できる現在ロードされているモジュールを基にして、コンフィグを作成します。 |
| 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 を押すと、カーソルの位置がその文字が太線になっている行に移動します。Y、M、N キーはこの方法でのナビゲーションには使用できません; これらは別の用途のために特別な扱いになっています。Y、M、N で始まる行はその次の文字が太字になっており、これに跳ぶことができます。たとえば現在のカーソル位置から見て次の行が「Network Device Support --->」となっている場合、E キーを押すとカーソルはその行に移動します。
以下のマークがメニューの行の先頭に現れることがあります:
| シンボル | 説明 |
|---|---|
[ ], [*]
|
角括弧のオプションは有効または無効にすることができます。アスタリスクはそのメニュー項目が有効になっていることを表します。値は space キーで変更可能です。また、 Y キー (Yes) を押して選択されている項目を有効化したり N キー (No) を押して無効化することもできます。
|
< >, <M>, <*>
|
山括弧のオプションは有効または無効にすることができますが、モジュールとして有効化することもできます (M で表されます)。値は前と同じく Y/N キーを押して変更できるほか、M キーを押して機能/ドライバーをモジュールとして有効化することができます。
|
{M}, {*}
|
波括弧のオプションは有効化またはモジュールとして有効化することができますが無効化することはできません。これは他の機能/ドライバーがこの機能に依存しているために起こります。 |
-M-, -*-
|
ハイフンに囲まれたオプションは、他の機能/ドライバーによって、表示されている形式で有効化されています。選択の余地はありません。 |
さらに、メニュー項目の中には最後にタグがついているものもあります:
| タグ | 説明 |
|---|---|
(NEW)
|
このドライバは新しいものでまだ十分に安定していないかもしれません。 |
(EXPERIMENTAL)
|
このドライバは実験的なもので安定していない可能性が高いです。 |
(DEPRECATED)
|
このドライバは非推奨でほとんどのシステムにとって必要ではありません。 |
(OBSOLETE)
|
このドライバは時代遅れで有効にするべきではありません。 |
ほとんどのオプションには解説がついていて、H キーを押すかメニューバーの Help を選ぶことで見ることができます。
ドライバの選択
hardware detection の記事や[[::Category:Hardware/ja|ハードウェアカテゴリー]]内の記事を見てください。
モジュールの検索
make menuconfig 内では / キーを押して、カーネルモジュールとコンフィグオプションを名前で検索することができます。
以下のように、検索結果では該当する部分の前に番号が表示されます。以下の例で 1 を押すと make menuconfig のメニュー構造の中の Bluetooth device drivers オプションに直接跳ぶことができます。
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 を処理するために必要な tmpfs と devtmpfs のサポートを自動的に選択しますが、将来的にはそれ以外の Gentoo Linux システムにおける必須設定を有効化するように拡張されるかもしれません。詳細については、このガイドの上の方で説明したように、カーネルの設定システムを通じて利用可能なヘルプ情報を読んでください。
Kbuild
Be very careful of changing environment variables as it may break the kernel in unexpected ways. DO NOT MIX GNU binutils and LLVM binutils!!! For example make CC=gcc LD=ld.lld AR=llvm-ar will not work because LLVM's ar and ld is not compatible with GCC.
The Kernel build system can be used to change how Kernel builds in a more advanced way than make *config, similar to GNU Make. Kbuild also support Environment Variables like LLVM=1. For example, the kernel will be build with LLVM and with aggressive optimization flags:
root #make LLVM=1 KCFLAGS="-O3 -march=native -pipe"Additional variables are explained in Clang/LLVM.
ビルド
正常に設定できたら、カーネルをコンパイルします:
root #make -j$(nproc) -j$(nproc) は make に対して、コンパイルを高速化するためにすべての利用可能な CPU コアを使用するように伝えます。
セットアップ
ドライバーがモジュールとして有効化されている場合、それらをインストールする必要があります:
root #make modules_installモジュールはデフォルトでは /lib/modules のサブディレクトリにコピーされますが、これは MODLIB 環境変数を使用して変更することができます。
If you have enabled the dracut USE flag on sys-kernel/installkernel to automate initramfs generation during make install, it is recommended to run
root #emerge --ask @module-rebuildカーネル本体をインストールするには:
root #make installこのコマンドは sys-kernel/installkernel の一部である /sbin/installkernel を実行します。このコマンドの構成を変更する方法に関する詳細については、installkernel のページを確認してください。
ブートローダ
システムのブートローダー設定を変更して、システムブート時に新しいカーネルをロードするようにします。
ブートローダのステップが完了したら、新しいカーネルでシステムを再起動しましょう。
現在のカーネル設定をデフォルトの設定と比較する
以下の手順で、デフォルトと異なるカーネル設定の概要を得ることができます。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
Theming Menuconfig
It is possible to select different color schemes for menuconfig using the variable MENUCONFIG_COLOR. To select a theme use:
root #make MENUCONFIG_COLOR=<theme> menuconfigAvailable themes are as follows:
| Theme | Description |
|---|---|
| mono | Colors suitable for monochrome displays |
| blackbg | A color scheme with black background |
| classic | A color scheme with blue background. The classic look |
| bluetitle | An LCD friendly version of classic. (default) |
関連項目
- Kernel — Gentoo オペレーティングシステム (OS) の中心部分
- Kernel/Gentoo Kernel Configuration Guide — 手動でのカーネル設定の概念を紹介することを目的とし、また最も一般的な設定の落とし穴のいくつかを詳しく説明します
- Project:Distribution Kernel — maintains sys-kernel/*-kernel packages.
外部資料
- Building the kernel as root can be harmful
- Modprobed-db - logs every module that is modprobed to be used to make a custom config