LinuCレベル2 201試験の出題範囲「2.01.3 Linux カーネルの構成要素」の技術的内容についての解説をまとめました。
重要度 2 概要 特定のハードウェア、ハードウェアドライバ、システムリソース、およびさまざまな要求に必要となるカーネルの構成要素を利用する。これには、異なる種類のカーネルイメージを実装すること、安定版および開発版のカーネルとパッチを区別すること、カーネルモジュールを利用することなども含まれる。 詳細 Kernel の配布形式。bzImage , xz データ圧縮Kernelのモジュールとドキュメント。
・/usr/src/linux/
・/usr/src/linux/Documentation/

カーネルとは
カーネル(Kernel)は、Linuxの中核となるプログラムのことを指します。
Linux kernelという言葉はよく耳にすると思います。しかし、「じゃあkernelって何?」と聞かれると、意外と答えられないと思います。では、kernelとは何か?「kernel」とは「中核」という訳語が当てはまりますが、簡単に言えばその通り「Linuxの中核となるプログラムがLinux kernelです」となります。そして、これはよく言われることですが、厳密には「Linux」と言った場合、このLinux kernelのことを指します(最近では、後述する「Linuxディストリビューション」をLinuxと呼ぶケースも増えてきています)。

カーネルは具体的には「ハードウェアの動作の管理、メモリ管理、ファイルの管理、プロセスの管理」などを行っています。
さて、そのLinux kernel、「OSの中核となるプログラムです」と説明してもいまひとつピンと来ないかもしれません。具体的に何をやっているのか?というと、「ハードウェアを稼動させる指示を出す、もっと具体的には、メモリー管理、ファイルの管理、デバイスドライバとしての役割、プロセスの管理」などを担っています。例えて言えば、「ユーザからの指示に従ってハードウェアを稼動させる”頭脳”の役割を担っている」、という言い方ができるでしょうか。

企業向けのLinuxとして使われるRed Hat Enterprise Linuxの公式サイトではカーネルの動作について以下のように説明されています。
カーネルには 4 つの仕事があります。
- メモリー管理:どの程度のメモリーが、何をどこに保存するために使用されたか、追跡します。
- プロセス管理:どのプロセスがいつ、どれだけの期間、中央処理装置 (CPU) を使用できるかを決めます。
- デバイスドライバー:ハードウェアとプロセスの間の仲介者/通訳として機能します。
- システムコールとセキュリティ:プロセスからサービス要求を受け取ります。

カーネルモジュールとは
準備中。
「/lib/modules/<カーネルバージョン>/modules.dep」ファイルの概要
modules.depファイルは、カーネルモジュールそれぞれが別のどのカーネルモジュールに依存しているかという依存関係情報が書かれているファイルです。.depは「dependency(依存関係を意味する英単語)」の頭文字だと思われます。
以下はRed Hat Enterprise Linux 9.6で確認したmodules.depファイルの中身です。

このファイルを利用して依存関係を解決しているコマンドの一つに modprobe があります。
unameコマンドとそのオプションの説明
unameコマンドはLinuxの現在の環境に関する様々な情報を取得・表示することができるコマンドです。unameコマンドに指定するオプションによって取得する情報を指定することができます。
| オプション | 説明 |
|---|---|
| -s | カーネルの名前を表示 |
| -r | カーネルのバージョンを表示 |
| -n | ホスト名を表示 |
| -m | ハードウェア名を表示 |
| -p | CPUタイプを表示 |
| -a | 以上すべての情報を表示 |
カーネルのバージョンを表示する(uname -r)
カーネルのバージョン情報を表示するにはuname -rを実行します。
以下はRed Hat Enterprise Linux 9.6でのuname -rコマンドの実行例です。

カーネルのバージョン情報を含めた複数の情報を表示する(uname -a)
カーネルのバージョン情報を含めた複数の情報を表示するにはuname -aを実行します。
以下はRed Hat Enterprise Linux 9.6でのuname -aコマンドの実行例です。

カーネルのバージョンのカテゴリ
リリースされるLinuxカーネルは主に以下の4つのカテゴリに分類されます。
・prepatch(プレパッチ)
リリース候補(RC:Release Candidate)です。テストが必要な新機能が含まれており、カーネルの開発者や最新機能を試したいユーザ向けの開発版リリースです。
・mainline(メインライン)
prepatchの後にリリースされる正式版です。prepatchで導入された新機能が含まれており、Linus Torvalds 氏が数か月毎にリリースします。mainlineはリリースされた時点で安定版の第0版とみなされます。
・stable(ステーブル)
mainlineの後にリリースされる安定版です。mainlineに対して発見された不具合の修正が行われ、安定したカーネルとしてリリースされます。stable版のリリースは指定されたカーネルメンテナが行います。
・longterm(ロングターム)
stableの中から選ばれ、新しいカーネルに行われたものと同様のバグフィックスが行われるリリースです。stableは新しいmainlineのリリースからあまり間をおかずにEOL(End Of Life: 「(製品の)寿命」から転じて、サポート期間終了を意味する)になりますが、longterm版は約2年という長い期間バグフィックスが行われます。longterm版のことを「LTS(Long Term Support)」と省略する場合もあります。
カーネルのバージョン番号はドットで区切られており、「X.Y.Z」あるいは「X.Y.Z.R」の形式になっています。
zImage と bzImageの概要
bzImageの概要
zImageの概要
参考資料
本記事の作成に使用した参考資料を掲載します。
https://linuc.org/docs/seminar/20201004_linuc2.pdf
