「カーネル/伝統的なコンパイル方法」の版間の差分
細 (1版 をインポートしました) |
細 |
||
4行目: | 4行目: | ||
[[ru:Kernels/Compilation/Traditional]] |
[[ru:Kernels/Compilation/Traditional]] |
||
[[zh-CN:Kernels/Compilation/Traditional]] |
[[zh-CN:Kernels/Compilation/Traditional]] |
||
− | この記事では '''kernel.org のソース'''からカスタムカーネルを作成する方法を説明しています。このカーネルをコンパイルする方法は全てのディストリビューションで共通の伝統的な方法です。複雑すぎると感じるときは、他の方法を見て下さい: [[ |
+ | この記事では '''kernel.org のソース'''からカスタムカーネルを作成する方法を説明しています。このカーネルをコンパイルする方法は全てのディストリビューションで共通の伝統的な方法です。複雑すぎると感じるときは、他の方法を見て下さい: [[カーネル#コンパイル]]。 |
== ソースの取得 == |
== ソースの取得 == |
2015年1月12日 (月) 22:11時点における版
この記事では kernel.org のソースからカスタムカーネルを作成する方法を説明しています。このカーネルをコンパイルする方法は全てのディストリビューションで共通の伝統的な方法です。複雑すぎると感じるときは、他の方法を見て下さい: カーネル#コンパイル。
目次
ソースの取得
- http://www.kernel.org からカーネルのソースを取得します。GUI で行うこともできますしテキストベースのツールも利用できます: HTTP, FTP, RSYNC, Git。
例えば http で wget を使う場合:
$ wget -c https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.16.tar.xz
- ダウンロードした tarball の署名を検証すると良いでしょう。詳しくは kernel.org/signature を見て下さい。
- カーネルソースをビルドディレクトリにコピーしてください、例:
$ cp linux-3.16.tar.xz ~/kernelbuild/
- 解凍してソースディレクトリに移動してください:
$ cd ~/kernelbuild $ tar -xvJf linux-3.16.tar.xz $ cd linux-3.16
次のコマンドを実行してコンパイルの準備をします:
make mrproper
これによってカーネルツリーが完全にクリーンなことを確認します。カーネルコンパイルの前にこのコマンドを実行することをカーネル開発者は推奨しています。解凍した後のソースツリーに依存しないでください。
/usr/src/ の使用について
root でコンパイルするために /usr/src/
を使い、適切なシンボリックリンクを作成することは、長年議論の的になっています。
- これを良くない習慣だと考えるユーザーもいます。設定とコンパイルには home ディレクトリを使い、root でインストールするのが一番キレイな方法だと思っているからです。
- 他の経験のあるユーザーは、コンパイルプロセス全体を root で行うことは全くもって安全で、時には推奨さえされると考えています。
あなたが快適におもう方法を使って下さい。以下の説明は方法にあわせて交換することが可能です。
ビルド設定
あなたのコンピューターの正確な仕様にあわせてカーネルをカスタマイズするのに最も大事なステップです。.config
のオプションを適切に設定することで、あなたのカーネルとコンピューターを最も効率的に動作させることができるようになります。
カーネルの設定
初心者向け
初心者にやりやすい手間を省ける選択肢が2つあります:
- デフォルトの Arch の設定を変更したい場合、実行中のカーネルから .config ファイルをコピーしてください。
$ zcat /proc/config.gz > .config
- カーネル 2.6.32 から、localmodconfig を使うことで現在使用されているオプションだけを選択できます。
- 標準の
-ARCH
カーネルで起動して、システムで使う予定がある全てのデバイスを接続してください。 - ソースディレクトリに
cd
してから次を実行してください:$ make localmodconfig
- 作られた設定ファイルは
.config
に書き込まれます。これで下で説明しているようにしてコンパイル・インストールができます。
- 標準の
$ 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 を見て下さい。
$ 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 を頻繁に使用する。
- サードパーティ製のモジュールをビルドする。
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 # ln -sf /boot/System.map-YourKernelName /boot/System.map
以上の全ての手順を完了したら、以下の3つのファイルと1つのシンボリックリンクがあなたの /boot
ディレクトリに追加されているはずです:
- カーネル: vmlinuz-YourKernelName
- Initramfs-YourKernelName.img
- システムマップ: System.map-YourKernelName
- システムマップのシンボリックリンク: System.map
ブートローダーの設定
ブートローダーの設定ファイルに新しいカーネルのエントリを追加してください - GRUB, LILO, Syslinux にある例を見て下さい。
カスタムカーネルで NVIDIA ビデオドライバーを使う
カスタムカーネルで NVIDIA のドライバーを使うには、カスタムカーネルで nVIDIA ドライバをインストールする方法を参照してください。AUR から nvidia ドライバーをインストールすることも可能です。