[LINUX-Kernel neu erstellen] Upgrade (4.18.0 → 5.8.8)

Ziel

Schließen Sie das Upgrade (4.18.0 → 5.8.8) des in AWS EC2 installierten Kernels (Red Hat Enterprise Linux 8 (HVM), SSD-Volume-Typ) ab.

Annahme

Ein AWS EC2-Server (Red Hat Enterprise Linux 8 (HVM), SSD-Volume-Typ) wurde erstellt. Die Neuerstellung des Kernels wird reibungsloser, wenn Sie zum Zeitpunkt der Kompilierung und Installation einige hohe Systemressourcen (CPU, Speicher usw.) vorbereiten. Wenn Sie nicht über einen bestimmten Speicherplatz verfügen, wird beim Kompilieren möglicherweise ein Fehler angezeigt. In diesem Artikel lautet der Instanztyp "m5a.xlarge" (0,344 USD / Stunde) und die Festplattenkapazität "50 GB". tempsnip.png Beachten Sie außerdem, dass das Kompilieren und Installieren je nach Spezifikation ** eine Stunde oder länger ** dauern kann.

Was ist Kernel-Neuerstellung (aus LPIC-Text)

Das Kompilieren und Installieren des Kernels nach Bedarf wird als "Neuerstellen des Kernels" bezeichnet. Es scheint, dass Sie in Betracht ziehen sollten, den Kernel in den folgenden Mustern neu zu erstellen.

-Der erforderliche Gerätetreiber (Kernelmodul) ist nicht im Kernel enthalten. -Ich möchte einen Kernel verwenden, der für die von mir verwendete Hardware optimiert ist. ・ Ich möchte die neuesten Funktionen des Kernels verwenden.

Sie benötigen den gcc-Compiler, das Dienstprogramm make, die Kernelquelle und die Kernel-Header, um den Kernel neu zu erstellen. Wenn Sie den Kernel neu erstellen, müssen Sie auch das Kernelmodul neu kompilieren.

Arbeitsablauf

Artikelnummer Titel
1 Bereiten Sie die Kernelquelle vor
2 Kernel-Einstellungen
3 Kompilieren von Kerneln und Kernelmodulen
4 Kernelmodul- und Kernelinstallation
5 Bestätigt

Nachschlagewerke und Nachschlagewerke

Linux-Lehrbuch LPIC Level 2 Version 4.5 kompatibel So erstellen Sie den Kernel neu und aktivieren das Kernelmodul in CentOS Ich habe versucht, den Kernel (Linux-4.8.6) zu kompilieren und zu installieren

Verfahren

1. Bereiten Sie die Kernelquelle vor

** ① Installation von Entwicklungswerkzeugen ** Root-Switch nach der Anmeldung des Betriebssystems

sudo su -

Überprüfen Sie die aktuelle Kernel-Version mit uname -r

#Die aktuelle Kernel-Version ist 4.18.0
[root@ip-172-31-42-117 ~]# uname -r
4.18.0-193.el8.x86_64

Installieren Sie die Tools, die zum Wiederherstellen des Kernels erforderlich sind (*). Es gab eine ungewöhnlich große Anzahl von Tools, die nicht installiert waren, aber es ist mir egal. ..


#Installieren Sie basierend auf der Referenzsite
yum groupinstall "Development Tools"
yum install kernel-devel
yum install rpm-build redhat-rpm-config unifdef
yum install ncurses ncurses-devel

#Danach wird eine zusätzliche Installation basierend auf dem Fehler durchgeführt, der tatsächlich während der Erstellung aufgetreten ist.
yum install elfutils-libelf-devel
yum install openssl-devel
yum install bc

** ② Kernelquelle herunterladen ** Installieren Sie den Befehl wget (laden Sie die Datei unter Angabe der URL herunter).

yum install wget

Wählen Sie die Kernelquelle unter https://www.kernel.org/ aus und laden Sie sie herunter. Holen Sie sich diesmal die Kernel-Version 5.8.8 (09.09.2020).

wget https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.8.8.tar.xz

Entpacken und auspacken.

tar Jxvf linux-5.8.8.tar.xz

Wechseln Sie in das Verzeichnis der extrahierten Kernelquelle

cd linux-5.8.8

2. Kerneleinstellungen

** ① Aktualisiere die vorhandene Einstellungsdatei mit make old config ** Kopieren Sie die vom aktuellen Kernel verwendete Konfigurationsdatei in .config (die Kernel-Konfigurationsdatei), um zu vermeiden, dass eine Kernel-Konfigurationsdatei von Grund auf neu erstellt wird.

cp -p /boot/config-4.18.0-193.el8.x86_64 .config

Aktualisieren Sie die Kernelkonfiguration. Mit make oldconfig können Sie nur nach den im neuen Kernel hinzugefügten Funktionen fragen. Es ist möglich, die vorhandenen Einstellungen so zu verwenden, wie sie für die vorhandenen Einstellungen sind.

In diesem Artikel werden alle neuen Elemente auf die Standardeinstellungen gesetzt (drücken Sie einfach die Eingabetaste, ohne y oder n einzugeben). Für den "Kernel-Komprimierungsmodus", der eingestellt werden muss, wurde diesmal "1. Gzip (KERNEL_GZIP)" eingestellt.

make oldconfig
#Ausgabebeispiel für make old config
[root@ip-172-31-42-117 linux-5.8.8]# make oldconfig
scripts/kconfig/conf  --oldconfig Kconfig
.config:1089:warning: symbol value 'm' invalid for NF_CT_PROTO_GRE
.config:2949:warning: symbol value 'm' invalid for ISDN_CAPI
*
* Restart config...
*
*
* General setup
*

#In der Vergangenheit vorhandene Elemente werden automatisch so umgeleitet, wie sie sind
Compile also drivers which will not load (COMPILE_TEST) [N/y/?] n          
Local version - append to kernel release (LOCALVERSION) []
Automatically append version information to the version string (LOCALVERSION_AUTO) [N/y/?] n

# (NEW)Erkundigen Sie sich hier nur nach neuen Artikeln, die als beschrieben werden
Build ID Salt (BUILD_SALT) [](NEW)
Kernel compression mode
> 1. Gzip (KERNEL_GZIP)
  2. Bzip2 (KERNEL_BZIP2)
  3. LZMA (KERNEL_LZMA)
  4. XZ (KERNEL_XZ)
  5. LZO (KERNEL_LZO)
  6. LZ4 (KERNEL_LZ4)
choice[1-6?]: 1
(Kürzung)

** ② Passen Sie die Kerneleinstellungen mithilfe der Konfiguration make make ** an Darüber hinaus ist es mit make menuconfig möglich, Anpassungen mit der Auswahlformel jedes Einstellungselements des Kernels vorzunehmen. Verwenden Sie dieses Mal make menu config, um die Kerneleinstellungen zu korrigieren (*), die den Kompilierungsfehler in der Überprüfungsphase verursacht haben.

Laut der Referenzsite ist die Kerneleinstellung, die den Fehler verursacht, ein Element namens CONFIG_SYSTEM_TRUSTED_KEYS (Wenn Sie die vorhandene Kerneleinstellungsdatei unter / boot kopieren, scheint dieses Element einen Kompilierungsfehler zu verursachen, es sei denn, Sie korrigieren ihn in eine leere Zeichenfolge.)

[root@ip-172-31-42-117 linux-5.8.8]# cat .config | grep "CONFIG_SYSTEM_TRUSTED_KEYS"
CONFIG_SYSTEM_TRUSTED_KEYS="certs/rhel.pem"

Beginnen Sie mit dem Ändern der Kerneleinstellungen.

make menuconfig

Wenn die folgende Konsole angezeigt wird, können Sie mit dem Cursor die Kernelkonfiguration festlegen. Bewegen Sie den Cursor auf den roten Rahmenteil des Bildes unten und drücken Sie die Eingabetaste, um ihn auszuwählen. tempsnip.png tempsnip.png tempsnip.png Löschen Sie die standardmäßig aufgeführte Zeichenfolge, leeren Sie sie und geben Sie die Eingabetaste ein tempsnip.png Speichern Sie schließlich in .config tempsnip.png キャプチャ.PNG

Überprüfen Sie den Inhalt von .config, um festzustellen, ob die Änderungen übernommen werden

[root@ip-172-31-42-117 linux-5.8.8]# cat .config | grep "CONFIG_SYSTEM_TRUSTED_KEYS"
CONFIG_SYSTEM_TRUSTED_KEYS=""

3. Kompilieren des Kernels und der Kernelmodule

Kompilieren Sie den Kernel und die Kernelmodule mit make. Es kann ohne Argumente ausgeführt werden. Da dieser Kompilierungsprozess jedoch viel Zeit in Anspruch nimmt, können Sie mit der Option -j die Anzahl der parallelen Prozesse ändern, um die Kompilierungszeit zu verkürzen (*). Mit der Konfiguration in diesem Artikel dauerte das Kompilieren weniger als eine Stunde.

#Starten Sie die optimale Anzahl von Prozessen entsprechend der Anzahl der CPU-Kerne
JOBS=$[$(grep cpu.cores /proc/cpuinfo | sort -u | sed 's/[^0-9]//g') + 1]
make -j${JOBS}

#Der folgende Fehler tritt beim Erstellen auf
BTF: .tmp_vmlinux.btf: pahole (pahole) is not available
Failed to generate BTF for vmlinux
Try to disable CONFIG_DEBUG_INFO_BTF

#Wie gesagt, CONFIG_DEBUG_INFO_BTF deaktivieren
[root@ip-172-31-42-117 linux-5.8.8]# cat .config | grep CONFIG_DEBUG_INFO_BTF
CONFIG_DEBUG_INFO_BTF=n

4. Installation des Kernelmoduls und des Kernels

** ① Installation des Kernelmoduls **

#Vollständig ohne Fehler
make modules_install

Es ist in Ordnung, wenn das Verzeichnis / lib / modules / kernel version wie unten gezeigt konfiguriert ist.

[root@ip-172-31-42-117 linux-5.8.8]# ls -l /lib/modules/5.8.8/
total 3440
lrwxrwxrwx.  1 root root     17 Sep 10 09:46 build -> /root/linux-5.8.8
drwxr-xr-x. 13 root root    141 Sep 10 09:47 kernel
-rw-r--r--.  1 root root 873761 Sep 10 09:47 modules.alias
-rw-r--r--.  1 root root 837562 Sep 10 09:47 modules.alias.bin
-rw-r--r--.  1 root root   8171 Sep 10 09:46 modules.builtin
-rw-r--r--.  1 root root  10467 Sep 10 09:47 modules.builtin.bin
-rw-r--r--.  1 root root  62064 Sep 10 09:46 modules.builtin.modinfo
-rw-r--r--.  1 root root 278819 Sep 10 09:47 modules.dep
-rw-r--r--.  1 root root 389096 Sep 10 09:47 modules.dep.bin
-rw-r--r--.  1 root root    405 Sep 10 09:47 modules.devname
-rw-r--r--.  1 root root  99497 Sep 10 09:46 modules.order
-rw-r--r--.  1 root root    521 Sep 10 09:47 modules.softdep
-rw-r--r--.  1 root root 422378 Sep 10 09:47 modules.symbols
-rw-r--r--.  1 root root 510059 Sep 10 09:47 modules.symbols.bin
lrwxrwxrwx.  1 root root     17 Sep 10 09:46 source -> /root/linux-5.8.8

** ② Kernel-Installation **


#Ohne Fehler abgeschlossen (Stellen Sie sicher, dass der Vorgang fehlerfrei abgeschlossen wurde. Ich habe mit einem Fehler neu gestartet und der Server wurde nicht gestartet.)
make install -j${JOBS}

Es ist in Ordnung, wenn das Kernel-Image "/ boot / vmlinuz-kernel version" wie unten gezeigt in / boot vorhanden ist.

[root@ip-172-31-42-117 ~]# ls -l /boot/vmlinuz*
lrwxrwxrwx. 1 root root      19 Sep 10 09:47 /boot/vmlinuz -> /boot/vmlinuz-5.8.8
-rwxr-xr-x. 1 root root 8913760 Apr 23 05:16 /boot/vmlinuz-0-rescue-bb64a14c7512444f9744c3076505b65f
-rwxr-xr-x. 1 root root 8920432 Sep 10 08:05 /boot/vmlinuz-0-rescue-ec211058807a3398326019a9b3f9e8bf
-rwxr-xr-x. 1 root root 8920432 Aug 26 19:47 /boot/vmlinuz-4.18.0-193.19.1.el8_2.x86_64
-rwxr-xr-x. 1 root root 8913760 Mar 27 14:48 /boot/vmlinuz-4.18.0-193.el8.x86_64
-rw-r--r--. 1 root root 8613632 Sep 10 09:47 /boot/vmlinuz-5.8.8

5. Bestätigung der Fertigstellung

Nach dem Neustart ist es in Ordnung, wenn die Kernelversion wie unten gezeigt geändert wurde.

[root@ip-172-31-42-117 ~]# uname -r
5.8.8

Recommended Posts

[LINUX-Kernel neu erstellen] Upgrade (4.18.0 → 5.8.8)
Überprüfen Sie die Linux-Kernelversion
Holen Sie sich die neueste Linux-Kernel-Version mit ArchLinux
Solus Linux Upgrade Problem
Informationen zu Linux-Kernelparametern
Linux Kernel Release 5.x (2/4)
Linux Kernel Release 5.x (3/4)
Linux Kernel Release 5.x (4/4)
Linux Kernel Release 5.x (1/4)
Linux Kernel Build für DE10nano
Selbst erstellter Linux-Kernel mit Clang
Neuerstellung des Kernels unter Ubuntu 20.04 (unter Azure)
Upgrade von Python Anaconda
Dokumentation zum Linux-Kernel-Speichermodell
Linux-Kernel, sein 29-jähriger Verlaufsbericht
Probieren Sie den Linux-Kernel-Sperrmechanismus aus
Wiederherstellungsverfahren für Bitnami Redmine (Linux-Version)
[Linux] [Kernelmodul] Erstellen Sie kthread im Kernelmodul
Quellanalyse von Linux (Kernel): Systemaufruf
So überprüfen Sie die Linux-Betriebssystemversion