# Kernels/Compilation/Traditional (日本語)

この記事では kernel.org のソースからカスタムカーネルを作成する方法を説明しています。このカーネルをコンパイルする方法は全てのディストリビューションで共通の伝統的な方法です。複雑すぎると感じるときは、他の方法を見て下さい: Kernels (日本語)#コンパイル

## ソースの取得

- http://www.kernel.org からカーネルのソースを取得します。GUI で行うこともできますしテキストベースのツールも利用できます: HTTP, FTP, RSYNC, Git。

例えば http で wget を使う場合:

    $ wget -c https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.10.4.tar.xz

- ダウンロードした tarball の署名を検証すると良いでしょう。詳しくは kernel.org/signature を見て下さい。

- カーネルソースをビルドディレクトリにコピーしてください、例:

    $ cp linux-3.10.4.tar.xz ~/kernelbuild/

- 解凍してソースディレクトリに移動してください:

    $ cd ~/kernelbuild
    $ tar -xvJf linux-3.10.4.tar.xz
    $ cd linux-3.10.4

次のコマンドを実行してコンパイルの準備をします:

    make mrproper

これによってカーネルツリーが完全にクリーンなことを確認します。カーネルコンパイルの前にこのコマンドを実行することをカーネル開発者は推奨しています。解凍した後のソースツリーに依存しないでください。

### /usr/src/ の使用について

root でコンパイルするために `/usr/src/` を使い、適切なシンボリックリンクを作成することは、長年議論の的になっています。

- これを良くない習慣だと考えるユーザーもいます。設定とコンパイルには home ディレクトリを使い、root でインストールするのが一番キレイな方法だと思っているからです。

- 他の経験のあるユーザーは、コンパイルプロセス全体を root で行うことは全くもって安全で、時には推奨さえされると考えています。

あなたが快適におもう方法を使って下さい。以下の説明は方法にあわせて交換することが可能です。

## ビルド設定

あなたのコンピューターの正確な仕様にあわせてカーネルをカスタマイズするのに最も大事なステップです。`.config` のオプションを適切に設定することで、あなたのカーネルとコンピューターを最も効率的に動作させることができるようになります。

### カーネルの設定

Warning: If compiling the radeon driver into the kernel(>3.3.3) for early KMS with a newer video card, you must include the firmware files for your card. Otherwise acceleration will be crippled. See here
Tip: It is possible, to configure a kernel without initramfs on simple configurations. Ensure that all your modules required for video/input/disks/fs are compiled into the kernel. As well as support for DEVTMPFS_MOUNT, TMPFS, AUTOFS4_FS at the very least. If in doubt, learn about these options and what they mean before attempting.

#### 初心者向け

初心者にやりやすい手間を省ける選択肢が2つあります:

- デフォルトの Arch の設定を変更したい場合、実行中のカーネルから .config ファイルをコピーしてください。

     $ zcat /proc/config.gz > .config

- カーネル 2.6.32 から、localmodconfig を使うことで現在使用されているオプションだけを選択できます。
  1. 標準の `-ARCH` カーネルで起動して、システムで使う予定がある全てのデバイスを接続してください。
  2. ソースディレクトリに `cd` してから次を実行してください: `$ make localmodconfig`
  3. 作られた設定ファイルは `.config` に書き込まれます。これで下で説明しているようにしてコンパイル・インストールができます。

#### 伝統的な menuconfig

    $ make menuconfig

既に `.config`が存在しない限り (例: 上書き)、これで新しいものが作られます。オプションの依存関係は自動的に選択されます。新しいオプション (古いカーネル `.config` がある場合) は自動で選択されたりされなかったりします。

変更はカーネルに加えて設定ファイルを保存してください。ソースディレクトリの外にバックアップ用のコピーを作っておくと良いでしょう、オプションを全て正しく設定するまで何回もやり直すことができるからです。自信がないときは、コンパイルのオプションだけを変更してください。新しくビルドしたカーネルで起動できない場合は、ここにある必須の設定アイテムの一覧を見て下さい。liveCD から `$ lspci -k #` を実行すると使用されているカーネルモジュールの名前を表示できます。さらに、CGROUPS サポートは必ず必要になります。これは systemd を使うのに必須だからです。

#### バージョニング

現在の設定ファイルを使ってカーネルをコンパイルするつもりならば、カーネルのバージョンの名前を変更することを忘れないで下さい。そうしないと誤って既存のカーネルを置き換えてしまう可能性があります。

    $ make menuconfig
    General setup  --->
     (-ARCH) Local version - append to kernel release '3.n.n-RCn'

## コンパイルとインストール

### コンパイル

コンパイル時間は15分から1時間超えまで様々です。主として選択したオプション・モジュールの数と、プロセッサの能力によって変わります。詳しくは Makeflags を見て下さい。

Warning: If you use GRUB and still have LILO installed; `make all` will configure LILO, and may result in an unbootable system.

`$ make` を実行してください。

### モジュールのインストール

    # make modules_install

このコマンドはコンパイルされたモジュールを `/lib/modules/[kernel version + CONFIG_LOCALVERSION]` にコピーします。これによって、あなたのマシン上にある他のカーネルによって使われるものとモジュールを分けることができます。

### カーネルを /boot ディレクトリにコピー

    # cp -v arch/x86/boot/bzImage /boot/vmlinuz-YourKernelName

### 初期 RAM ディスクの作成

これが何なのか知らない場合は、次を参照してください: Wikipedia の Initramfs と mkinitcpio。

    # mkinitcpio -k FullKernelName -c /etc/mkinitcpio.conf -g /boot/initramfs-YourKernelName.img

`/boot` のファイルには自由に名前を付けることができます。ただし、あなたが以下のことをしているのならば [kernel-major-minor-revision] という形式の名前を付けたほうが混乱を避けるのに役立つでしょう:

- 複数のカーネルを使っている。
- mkinitcpio を頻繁に使用する。
- サードパーティ製のモジュールをビルドする。

Tip: 頻繁にイメージをリビルドするような場合は、次のようなコマンドを使えるようにプリセットファイルを作成すると便利です:`# mkinitcpio -p custom`。ここを参照してください。

LILO を使っていてカーネルの device-mapper ドライバーと通信できない場合、まず `modprobe dm-mod` を実行する必要があります。

### System.map のコピー

`System.map` ファイルは Linux の起動に必須ではありません。これは一種の"電話帳"みたいなものでカーネルの特定のビルドの機能が記載されています。`System.map` にはカーネルのシンボルの一覧 (つまり機能や変数の名前など) とそれぞれのアドレスが含まれます。この"アドレスマッピングのシンボル名"を使うのは:

- klogd, ksymoops といったプロセス
- カーネルがクラッシュした時に OOPS ハンドラによって情報 (どの関数がクラッシュしたのかなど) を画面に表示するのに使われます。

`System.map` を `/boot` にコピーしてシンボリックリンクを作成してください:

    # cp System.map /boot/System.map-YourKernelName

以上の全ての手順を完了したら、以下の3つのファイルと1つのシンボリックリンクがあなたの `/boot` ディレクトリに追加されているはずです:

- カーネル: vmlinuz-YourKernelName
- Initramfs-YourKernelName.img
- システムマップ: System.map-YourKernelName

## ブートローダーの設定

ブートローダーの設定ファイルに新しいカーネルのエントリを追加してください - GRUB, LILO, Syslinux にある例を見て下さい。

Tip: Kernel sources include a script to automate the process for LILO: `$ arch/x86/boot/install.sh`. Remember to type `lilo` as root at the prompt to update it.

## カスタムカーネルで NVIDIA ビデオドライバーを使う

カスタムカーネルで NVIDIA のドライバーを使うには、カスタムカーネルで nVIDIA ドライバをインストールする方法を参照してください。AUR から nvidia ドライバーをインストールすることも可能です。

Category:

- Kernel (日本語)