1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LPIC201対策 - Linuxカーネルのコンパイル

Last updated at Posted at 2024-01-16

この記事について

Linux Level 2 取得を目標としている筆者です。
先日 Level 1 を取得しましたが、短期詰め込みの暗記がしんどかったので、Level2はじっくり時間をかけていいから、ちゃんと理解してやっていきたい。

一方で、暗記も暗記で重要。

ということで、理解を深めるためにと、暗記しやすいように、両方の目的で、覚えたことを Qiita に整理してまとめながら受験対策することにしました。

この分野で覚えること

ファイル・ディレクトリ関連

/usr/src/linux 配下

/usr/src/linux/ は、カーネルのソースやビルドに必要なディレクトリ・ファイルを置いてあるディレクトリです。

ディレクトリ 中身(格納しているもの)
kernel/ カーネル本体のソース
Documentation/ カーネルのビルドやインストール時に参照する資料
arch/ アーキテクチャ(x86_64, i386など)固有のコード
drivers/ デバイスドライバ
fs/ ファイルシステム
include/ インクルードファイル(他のファイルから呼び出すコードのまとまり)
mm/ メモリ管理
net/ ネットワーク
ファイル 中身
.config カーネルをビルドするための各種設定(make config や make menuconfig で行った実際に行った設定を保存)
Makefile makeコマンドの動作やカーネルのバージョンを記述

/boot 配下

ファイル 中身 詳細
/boot/System.map-x.x.x カーネルのアドレスマップ カーネルがメモリ上に展開される際、シンボルとアドレスのマッピングを記述したファイル
/boot/vmlinuz-x.x.x カーネルイメージファイル zImage形式と、bzImage形式がある
/boot/config-x.x.x ビルド時のカーネル設定 - /usr/src/linux/.config のバックアップ
- make oldconfig で読み込む「現在動いているカーネルの設定」はこれ
/boot/initrd.img-x.x.x 初期RAMディスクイメージ

その他

ディレクトリ 中身
/lib/modules/x.x.x/ カーネルモジュールのインストール先

個人的に、/bin/ とよく間違える。カーネルモジュールなので lib。

初期RAMディスクについての基本知識

初期RAMディスクとは

システムの起動時に、ブートプロセスを段階的に行うために使われる。

古いディストリビューションでは initrd 形式が使われていたが、最近のディストリビューションでは initramfs 形式が主流になっている。

しかしGRUB2の設定ファイルでは、起動時に使用する初期RAMディスクのイメージファイルを指定する項目の項目名は initrd になっている。。。

作成コマンド

dracut

mkinitrd

  • gunzip と mount コマンドで中身を参照できる

mkinitramfs

  • cpioアーカイブを利用して初期RAMディスクを作成
### 初期RAMディスク(バージョン x.x.x)を作成
# mkinitramfs -o initrd.img.gz x.x.x

# ls
initrd.img.gz

### gunzipで解凍
# gunzip initrd.img.gz
initrd.img

### cpio を使って書き出し
cpio -id < initrd.img

##### cpiokomando のオプション解説
### -i コピーインモード(アーカイブからの展開)
### -d ディレクトリを作成

# ls
bin/ conf/ etc ... # など、initrd.img から展開されたディレクトリができている

以下の要領で実行(/boot/initrd.img は作成先)
mkinitramfs -o /boot/initrd.img x.x.x

make コマンド

そもそも make コマンドとは

make コマンド自体は、ソースファイルをコンパイルするための一般的なコマンドだが、これを使ってカーネルをコンパイルすることができる。

コマンド実行時の手順は、 /usr/src/linux/Makefile の記述に従う。

試験対策上は、このコマンドのターゲット(サブコマンド的なもの?)がよく出題されるようなので以下に整理。

初期化 → 設定 → ビルド → 配置(インストール)のじゅんに行うよ。

make コマンドのターゲット

削除系

まずはこれをたたいて設定を初期化する。

ターゲット 意味
clean 設定ファイル(.config)を除いて一時ファイル等を削除
mrproper 設定ファイル(.config)を含めて一時ファイル等を削除

config (設定ファイルの作成) 系

次にこれをたたいて、設定ファイルを作成

ターゲット 意味
config 対話的に設定を実施
menuconfig ターミナル上のGUIで設定
xconfig X上のGUIで設定
deconfig デフォルト状態の設定ファイルを作成
oldconfig 現在動いているカーネルの設定を引き継いだ設定ファイルを作成

ビルド系

設定ファイルに基づきビルド

ターゲット 意味
all カーネル本体およびカーネルモジュールをビルド
(ターゲットなしと同じ)
modules カーネル本体は含めずカーネルモジュールをビルド

install (配置) 系

そして配置。
通常は modules_install でカーネルモジュールを配置してから、 install でカーネル本体をインストールする。

ターゲット 意味
modules_install カーネルモジュールをシステムに適切に配置
install ビルドしたカーネルの本体をシステムに適切に配置
配置とは具体的にどういうことなのか

以下をうまいことやってくれるそうです

  • ビルドされたカーネルを /boot に移動
  • ファイル名(カーネルイメージ等)にバージョンをつけてリネーム
  • ブートローダに新しいカーネルを使った起動設定を追加
  • (必要な場合)初期RAMディスクのイメージを作成

カーネルモジュールは最終的には /lib/modules/x.x.x/ に置く。modules_install を使うと、ここまでやってくれる。

古いカーネルイメージは、バックアップとして残しておくことが推奨。(makeコマンドで勝手に消されることもない)

pkg (パッケージ作成) 系

ターゲット 意味
binrpm-pkg ソースを含まないrpmパッケージを作る
rpm-pkg ソースを含むrpmパッケージを作る
deb-pkg ビルド済みDebianパッケージを作る

その他の暗記事項

用語 意味
DKMS Dynamic Kernel Management System。カーネルのアップグレード時に、自動的にカーネルモジュールをリビルドできる。

カーネルのバージョンの読み方

  • 2.6より前
    • x.y.z の y 部分が奇数だと開発版、偶数だと安定版
  • 2.6以降
    • 上記の区別なし。単純にハイフンや記号がついていなければ安定版

カーネルのリリースサイクル

以下のカテゴリを、順に格上げしていく

カテゴリ 意味
prepatch リリース候補(RC)。テストが必要な新機能が含まれている。
mainline リーナス・トーヴァルズ氏が数ヶ月ごとにリリースする安定版。(リリースされた時点で、安定版の第0版とみなされる
stable mainlineの後にリリースされる安定版(mainlineの不具合の修正など)
longterm stableの中から選ばれ、約2年間という長期にわたってバグフィックスが行われる

以上!

勉強が進んだら適宜追記・修正などしていきます。

1
1
0

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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?