2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Linuxカーネルを再構築してみた(5.14.0→6.7.0)

Last updated at Posted at 2024-01-26

はじめに

Linuxの勉強のためにカーネルを再構築してみたので、備忘録をかねてそのときに実行したコマンドをまとめます。

作業環境はAlmaLinuxというRedHat系のディストリビューションです。

実行コマンド

まずは今のカーネルのバージョンを確認しておきます。
そしてカーネル再構築のためにrootユーザーになります。

# 現在のカーネルのバージョンを確認
[user@localhost ~]$ uname -r
5.14.0-362.8.1.el9_3.x86_64
[user@localhost ~]$ sudo su -

続いて以下のページを参考に必要なツールをインストール。


[root@localhost ~]# yum groupinstall "Development Tools"
[root@localhost ~]# yum install kernel-devel
[root@localhost ~]# yum install rpm-build redhat-rpm-config
[root@localhost ~]# yum install ncurses ncurses-devel

さらにカーネルソースを以下のサイトを参考にダウンロードします。

カーネルソースは慣例的に/usr/srcに配置するらしいので郷に従います。

[root@localhost ~]# cd /usr/src
# 最新版(2024/01/15時点)のLinux6.7をダウンロード
[root@localhost src]# wget https://mirrors.edge.kernel.org/pub/linux/kernel/v6.x/linux-6.7.tar.xz

ダウンロードしたカーネルソースを展開します。
展開前のファイルは不要ですが念のため/tmpに残しておきます。

[root@localhost src]# xz -dc linux-6.7.tar.xz | tar xvf -
[root@localhost src]# mv linux-6.7.tar.xz /tmp/linux-6.7.tar.xz

次に、カーネルコンフィギュレーションに新しい設定を追加します。

現在の設定ファイル(/boot/config-5.14.0-362.8.1.el9_3.x86_64)を.configファイルにコピーし、make oldconfigコマンドで新たな設定を反映させます。

make oldconfigコマンドを実行すると、いくつか設定について選択が求められます。

今回はすべてデフォルトの設定(選択するときに何も選ばずEnterキーを押下)にします。

[root@localhost src]# cp /boot/config-5.14.0-362.8.1.el9_3.x86_64 .config
# make oldconfigコマンドを実行するために展開したカーネルソースのディレクトリに移動
[root@localhost src]# cd linux-6.7/
[root@localhost linux-6.7]# make oldconfig
  HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/kconfig/conf.o
  HOSTCC  scripts/kconfig/confdata.o
  HOSTCC  scripts/kconfig/expr.o
  LEX     scripts/kconfig/lexer.lex.c
  YACC    scripts/kconfig/parser.tab.[ch]
  HOSTCC  scripts/kconfig/lexer.lex.o
  HOSTCC  scripts/kconfig/menu.o
  HOSTCC  scripts/kconfig/parser.tab.o
  HOSTCC  scripts/kconfig/preprocess.o
  HOSTCC  scripts/kconfig/symbol.o
  HOSTCC  scripts/kconfig/util.o
  HOSTLD  scripts/kconfig/conf
#
# using defaults found in /boot/config-5.14.0-362.8.1.el9_3.x86_64
#
.config:428:warning: symbol value 'm' invalid for I8K
.config:7913:warning: symbol value 'm' invalid for CRYPTO_BLAKE2S_X86
*
* Restart config...
*
*
* Timers subsystem
*
Timer tick handling
  1. Periodic timer ticks (constant rate, no dynticks) (HZ_PERIODIC)
  2. Idle dynticks system (tickless idle) (NO_HZ_IDLE)
> 3. Full dynticks system (tickless) (NO_HZ_FULL)
choice[1-3?]: 3
Force user context tracking (CONTEXT_TRACKING_USER_FORCE) [N/y/?] n
Old Idle dynticks config (NO_HZ) [Y/n/?] y

・・・(中略)・・・

Microsoft Hyper-V driver testing (HYPERV_TESTING) [N/y/?] n
#
# configuration written to .config
#

続いてカーネルとカーネルモジュールをコンパイルします。
以下のサイトを参考に事前に.configファイルを修正しておきます。


[root@localhost linux-6.7]# vi .config
# 修正1
CONFIG_SYSTEM_TRUSTED_KEYS="certs/rhel.pem"
↓
CONFIG_SYSTEM_TRUSTED_KEYS=""
# 修正2
CONFIG_DEBUG_INFO_BTF=y
↓
CONFIG_DEBUG_INFO_BTF=n

makeコマンドでカーネルとカーネルモジュールをコンパイルします。
少しでも実行時間を短くするため、-jオプションで並列実行します。

# CPUのコア数確認
[root@localhost linux-6.7]# cat /proc/cpuinfo | grep "cpu core"
cpu cores	: 2
cpu cores	: 2
cpu cores	: 2
cpu cores	: 2
# 「make」コマンドでカーネルとカーネルモジュールをコンパイル
# -jオプションで並列実行
# 並列実行数はCPUのCore数+1にする(理由は不明)
[root@localhost linux-6.7]# make -j 3

そしてカーネルモジュールとカーネルをインストールします。

[root@localhost linux-6.7]# make modules_install
[root@localhost linux-6.7]# make install
# /bootディレクトリ以下に追加されているか確認
[root@localhost linux-6.7]# ls /boot

・・・(中略)・・・

vmlinuz-0-rescue-ad6108d8fa2d4e86b2104b3c2d335169
vmlinuz-5.14.0-362.8.1.el9_3.x86_64
vmlinuz-6.7.0

/bootの末尾に新たにvmlinuz-6.7.0が追加されていることがわかります。
あとはリブートを行い、カーネルが更新されているか確認するだけです。

[root@localhost linux-6.7]# reboot
[user@localhost ~]$ uname -r
6.7.0

無事にカーネルが更新されました。
デフォルトのカーネルが更新されているかも確認しておきます。

# 念のためデフォルトのカーネルが更新されているか確認
[hiroaki@localhost ~]$ sudo su -
[root@localhost ~]# grubby --default-kernel
/boot/vmlinuz-6.7.0

補足としてこれまで使ってきたバージョンのカーネルに戻したい場合のコマンドも以下にまとめておきます。

# 各カーネルのindexを確認
[root@localhost ~]# grubby --info=ALL | grep -A 2 index
index=0
kernel="/boot/vmlinuz-6.7.0"
args="ro resume=/dev/mapper/almalinux-swap rd.lvm.lv=almalinux/root rd.lvm.lv=almalinux/swap rhgb quiet crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M $tuned_params"
--
index=1
kernel="/boot/vmlinuz-5.14.0-362.8.1.el9_3.x86_64"
args="ro resume=/dev/mapper/almalinux-swap rd.lvm.lv=almalinux/root rd.lvm.lv=almalinux/swap rhgb quiet $tuned_params"
--
index=2
kernel="/boot/vmlinuz-0-rescue-ad6108d8fa2d4e86b2104b3c2d335169"
args="ro resume=/dev/mapper/almalinux-swap rd.lvm.lv=almalinux/root rd.lvm.lv=almalinux/swap rhgb quiet"
# 以下のコマンドの「n」に更新したいカーネルのindexの番号を記入
[root@localhost ~]# grubby --set-default-index=n

おわりに

今回はLinuxカーネルを再構築してみました。
Linuxを学んでいる方の参考になれば幸いです。

最後まで読んでいただき、ありがとうございました!

2
0
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?