ハードウェア構成に無い機能を無効化するため、ジェネリックカーネルのconfigファイルを利用して構築する。

カーネルのビルドに必要なパッケージをインストールする
bc bison build-essential dpkg-dev fakeroot flex libbison-dev libelf-dev libfl-dev libfl2 \
libncurses5-dev libncurses-dev libssl-dev lz4 rsync zlib1g-dev

作業用フォルダを用意し、カーネルのソースをダウンロードする(2021年10月6日現在: 5.14.9)

$ apt source linux-source
$ cd linux-5.14.9/

/bootよりconfigファイルをコピーする

$ cp /boot/config-5.x.x-amd64 /.config

mousepadで.configを開き、以下の項目を検索し編集する

CONFIG_SYSTEM_TRUSTED_KEYS="(空欄にする)"
# CONFIG_MODULE_SIG is not set ←コメントアウトし、is not setとする。
# CONFIG_DEBUG_INFO is not set ←コメントアウトし、is not setとする。

make menuconfig にて、設定を変更する

$ make menuconfig

変更点(一部)
Kernel compression mode
Support for paging of anonymous memory
Preemption Model
Processor family
Timer frequency
Networking support Wireless
Default CPUFreq governor
Amateur Radio support
PCCard (PCMCIA/CardBus) support
Ethernet driver support
Graphics support
Kernel hacking
変更が必要な部分を把握するために、lspciコマンドでハードウェア構成を確認しておくと良い。

ターミナルを別に起動しlspciを実行

$ lspci
00:00.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) Root Complex
00:00.2 IOMMU: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) I/O Memory Management Unit
00:01.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-1fh) PCIe Dummy Host Bridge
00:01.1 PCI bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) PCIe GPP Bridge
00:01.3 PCI bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) PCIe GPP Bridge
00:02.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-1fh) PCIe Dummy Host Bridge
00:03.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-1fh) PCIe Dummy Host Bridge
00:03.1 PCI bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) PCIe GPP Bridge
00:04.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-1fh) PCIe Dummy Host Bridge
00:07.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-1fh) PCIe Dummy Host Bridge
00:07.1 PCI bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) Internal PCIe GPP Bridge 0 to Bus B
00:08.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-1fh) PCIe Dummy Host Bridge
00:08.1 PCI bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) Internal PCIe GPP Bridge 0 to Bus B
00:14.0 SMBus: Advanced Micro Devices, Inc. [AMD] FCH SMBus Controller (rev 59)
00:14.3 ISA bridge: Advanced Micro Devices, Inc. [AMD] FCH LPC Bridge (rev 51)
00:18.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) Data Fabric: Device 18h; Function 0
00:18.1 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) Data Fabric: Device 18h; Function 1
00:18.2 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) Data Fabric: Device 18h; Function 2
00:18.3 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) Data Fabric: Device 18h; Function 3
00:18.4 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) Data Fabric: Device 18h; Function 4
00:18.5 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) Data Fabric: Device 18h; Function 5
00:18.6 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) Data Fabric: Device 18h; Function 6
00:18.7 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) Data Fabric: Device 18h; Function 7
01:00.0 Non-Volatile memory controller: Sandisk Corp WD Blue SN550 NVMe SSD (rev 01)
02:00.0 USB controller: Advanced Micro Devices, Inc. [AMD] Device 43d0 (rev 01)
02:00.1 SATA controller: Advanced Micro Devices, Inc. [AMD] 400 Series Chipset SATA Controller (rev 01)
02:00.2 PCI bridge: Advanced Micro Devices, Inc. [AMD] 400 Series Chipset PCIe Bridge (rev 01)
03:00.0 PCI bridge: Advanced Micro Devices, Inc. [AMD] 400 Series Chipset PCIe Port (rev 01)
03:01.0 PCI bridge: Advanced Micro Devices, Inc. [AMD] 400 Series Chipset PCIe Port (rev 01)
03:02.0 PCI bridge: Advanced Micro Devices, Inc. [AMD] 400 Series Chipset PCIe Port (rev 01)
03:03.0 PCI bridge: Advanced Micro Devices, Inc. [AMD] 400 Series Chipset PCIe Port (rev 01)
03:04.0 PCI bridge: Advanced Micro Devices, Inc. [AMD] 400 Series Chipset PCIe Port (rev 01)
04:00.0 Ethernet controller: Intel Corporation I211 Gigabit Network Connection (rev 03)
05:00.0 Network controller: Realtek Semiconductor Co., Ltd. RTL8822BE 802.11a/b/g/n/ac WiFi adapter
09:00.0 VGA compatible controller: NVIDIA Corporation TU104 [GeForce RTX 2080 SUPER] (rev a1)
09:00.1 Audio device: NVIDIA Corporation TU104 HD Audio Controller (rev a1)
09:00.2 USB controller: NVIDIA Corporation TU104 USB 3.1 Host Controller (rev a1)
09:00.3 Serial bus controller [0c80]: NVIDIA Corporation TU104 USB Type-C UCSI Controller (rev a1)
0a:00.0 Non-Essential Instrumentation [1300]: Advanced Micro Devices, Inc. [AMD] Zeppelin/Raven/Raven2 PCIe Dummy Function
0a:00.2 Encryption controller: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) Platform Security Processor
0a:00.3 USB controller: Advanced Micro Devices, Inc. [AMD] Zeppelin USB 3.0 Host controller
0b:00.0 Non-Essential Instrumentation [1300]: Advanced Micro Devices, Inc. [AMD] Zeppelin/Renoir PCIe Dummy Function
0b:00.2 SATA controller: Advanced Micro Devices, Inc. [AMD] FCH SATA Controller [AHCI mode] (rev 51)
0b:00.3 Audio device: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) HD Audio Controller

変更し終えたらsaveしカーネルをビルド、インストールする

$ time make -j 16 bindeb-pkg

timeは時間を測りたいので記述する。
jの後に付く数値は、CPUの論理コア数と搭載されたメモリの容量によって変える。
ビルドが完了すると一つ上のディレクトリに.debパッケージが生成される。
ディレクトリを移動し、ヘッダー、イメージの順でインストールする。

$ sudo dpkg -i linux-header-xxxxxx.deb
$ sudo dpkg -i linux-image-xxxxxxx.deb
$ sudo dpkg -i linux-libc-xxxxxxxxx.deb

grubをアップデートする

$ sudo update-grub

再起動すると、grubの選択画面でビルドしたカーネルを選べるようになる。

$ uname -r
5.14.9

不要となったカーネルを削除する

/bootの中身が圧迫されるので不要となったカーネルを削除する。
dry-runオプションを付けて削除試験を行ってから、実行する。

$ sudo apt autoremove --purge linux-*-5.19.6* --dry-run
$ sudo apt autoremove --purge linux-*-5.19.6*