LoginSignup
1

More than 5 years have passed since last update.

Linux 5.1-rc1でカーネルコンパイル入門

Last updated at Posted at 2019-03-20

20150307003237.jpg

背景

Linuxカーネルのコンパイルを改めてやってみた時のログ
今回はビルドのみでインストールまでは行ってません。

環境

$ uname -a
Linux Hades 4.15.0-46-generic #49-Ubuntu SMP Wed Feb 6 09:33:07 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

$ gcc --version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36)
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

カーネルソースを入手

下記サイトから対象となるカーネルソースをダウンロードし、解凍します。
https://www.kernel.org/

$ tar xvf linux-5.1-rc1.tar.gz
(中略)
linux-5.1-rc1/virt/lib/Kconfig
linux-5.1-rc1/virt/lib/Makefile
linux-5.1-rc1/virt/lib/irqbypass.c

$ cd linux-5.1-rc1/

必要なモジュールをインストール

本環境で足りないものを下記でインストールしています。
現状の環境やカーネルバージョンで差分があるので適宜必要なものをインストールしてください。

$ yum groupinstall "Development Tools"
$ yum install kernel-devel
$ yum install rpm-build redhat-rpm-config unifdef
$ yum install ncurses ncurses-devel
$ yum install openssl-devel

足りないと下記のようにmake時にエラーとなります。

$ make
  HOSTCC  scripts/sign-file
scripts/sign-file.c:25:30: fatal error: openssl/opensslv.h: No such file or directory
 #include <openssl/opensslv.h>
                              ^
compilation terminated.
make[2]: *** [scripts/sign-file] Error 1
make[1]: *** [scripts] Error 2
make: *** [sub-make] Error 2

ディレクトリ構成

ここでは簡単に各ディレクトリの構成について書きます。
詳細は別途ご参照ください。

arch

arch サブディレクトリには、アーキテクチャ(architecture)固有の カーネルコードが含まれている。 さらに深いサブディレクトリがあり、たとえば、i386 や alpha と いったサポートするアーキテクチャごとに分かれている。

include

include サブディレクトリには、カーネルコードをビルドするのに必要な インクルードファイル(include files)の大部分が含まれている。 さらに深いサブディレクトリもあり、サポートするアーキテクチャごとのファイルが含 まれている。include/asm サブディレクトリは、たとえば include/asm-i386 といったそのアーキテクチャに必要な実際の include ディレクトリへのソフトリンク(シンボリックリンク)となっている。 アーキテクチャを変更するには、カーネルの makefile を編集し、Linux カーネル 設定プログラムを再実行する必要がある。

init

このディレクトリには、カーネルの初期化(initialization)コードが含まれているの で、カーネルの動作の仕組みをこれから見ようとする場合はよい出発点になる。

mm

このディレクトリには、メモリ管理(memory management)コードのすべてが含まれてい る。アーキテクチャ固有のメモリ管理コードについては、arch/i386/mm/fault.c といった arch/*/mm ディレクトリ以下にある。

drivers

システム上のデバイスドライバ(device drivers)は、すべてこのディレクトリに置かれ ている。 このディレクトリはさらに再分割され、block といったデバイスドライバ のクラスごとに分かれている。

ipc

このディレクトリには、カーネルのプロセス間通信(inter-process communications)に 関するコードが含まれている。

modules

このディレクトリは、ビルドされたモジュール(module)を保存するためだけに使用され ている。

fs

ファイルシステム(file system)コードのすべてはここに置かれている。 このディレクトリはさらに再分割されていて、vfat や ext2 と いったサポートするファイルシステムごとに分かれている。

kernel

主要なカーネル(kernel)コードが置かれている。ここでも、アーキテクチャ固有の カーネルコードは、arch/*/kernel にある。

net

カーネルのネットワーク(network)関係のコードが置かれている。

lib

このディレクトリには、カーネルのライブラリ(library)コードが含まれている。 アーキテクチャ固有のライブラリは、arch/*/lib で見つけることができる。

scripts

このディレクトリには、カーネルを設定するときに使用されるスクリプト(script) (たとえば、awk や tk スクリプト)が含まれている。

menuconfig

make configと異なりメニュー形式で表示され設定可能なモードです。
現在はmake configよりもこちらのほうが使われることが多いそうなので例によってmenuconfigを使います。

$ make menuconfig

キャプチャ.PNG

キーストローク

Key Description
? Option description and tips/Help
← → ↑ ↓ PgUp PgDn Navigate through the kernel features and menuconfig commands.
Esc+Esc Exit menuconfig or cancel the command.
Enter Activate a command, or expand a branch.
y Compile and include this feature inside of the kernel.
m Compile this feature as a module, separate from the kernel.
n Do not compile the feature.
/ Search configuration parameter.

各パラメータについては下記が大変参考になります。詳しく知りたい方はご参照ください。
http://www.embedded.jp/article/linux_kernel_2-1.html

ビルド

$ make clena ; make

まとめ

ビルド自体はそこまで難しくないことが分かりました。
じゃあ何が難しいのかはやはりmenuconfigで選べる設定を適切なものに変える判断何だと思います。
色々サイトを見て回りましたが正直難しいことだらけです。
ここら辺を掘り下げて自分の言葉にして次は記事を書きたいと思います。

参考リンク

カーネルをソースコードからビルドする
初心者向けKernelのビルド手順

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1