Heim > Betrieb und Instandhaltung > Betrieb und Wartung von Linux > Warum kompiliert Linux den Kernel?

Warum kompiliert Linux den Kernel?

青灯夜游
Freigeben: 2023-03-30 14:03:54
Original
2185 Leute haben es durchsucht

Grund: Der neue Kernel hat die Fehler des alten Kernels überarbeitet und viele neue Funktionen hinzugefügt. Wenn Benutzer diese neuen Funktionen nutzen oder einen effizienteren und stabileren Kernel an ihr eigenes System anpassen möchten, reicht es aus: Der Linux-Kernel muss neu kompiliert werden. Normalerweise unterstützen neuere Kernel mehr Hardware, verfügen über bessere Prozessverwaltungsfunktionen, laufen schneller und stabiler und beheben im Allgemeinen viele Schwachstellen älterer Versionen. Dies ist ein notwendiger Betriebsinhalt für Linux-Benutzer .

Warum kompiliert Linux den Kernel?

Die Betriebsumgebung dieses Tutorials: Ubuntu 18.04-System, Dell G3-Computer.

Warum den Linux-Kernel kompilieren?

Der neue Kernel behebt die Fehler des alten Kernels und fügt viele neue Funktionen hinzu. Wenn Benutzer diese neuen Funktionen nutzen oder einen effizienteren und stabileren Kernel an ihr eigenes System anpassen möchten, müssen sie den Linux-Kernel neu kompilieren.

Normalerweise unterstützen aktualisierte Kernel mehr Hardware, verfügen über bessere Prozessverwaltungsfunktionen, laufen schneller und stabiler und beheben im Allgemeinen viele Schwachstellen, die in älteren Versionen usw. gefunden wurden. Daher sollten Sie sich für ein häufiges Upgrade auf neuere Versionen entscheiden notwendige Betriebsinhalte für Linux-Benutzer.

Um die Konfigurationsoptionen für die Kernel-Kompilierung korrekt und sinnvoll festzulegen und nur den Code für die vom System benötigten Funktionen zu kompilieren, gibt es im Allgemeinen die folgenden vier Überlegungen:

  • (1) Der angepasste kompilierte Kernel wird ausgeführt schneller (hat weniger Code)

  • (2) Das System verfügt über mehr Speicher (der Kernel-Teil wird nicht in den virtuellen Speicher ausgelagert)

  • (3) Unnötige in den Kernel kompilierte Funktionen können das Systemrisiko erhöhen Angriffe Von Angreifern ausgenutzte Schwachstellen

  • (4) Das Kompilieren einer bestimmten Funktion in ein Modul ist langsamer als das Kompilieren in den Kernel

Der Zweck dieser Art der Kompilierung besteht hauptsächlich darin, die Kompilierung des Linux-Kernels durch den Kompilierungsprozess zu verstehen , machen Sie sich mit der Funktionsweise des Kernels vertraut und nehmen Sie sogar einige Änderungen vor.
Kompilierung kompiliert nur den Quellcode in ein Programm. Sie ersetzt nicht das aktuelle System und beeinträchtigt nicht den Betrieb des aktuellen Systems.

Das Kompilieren des Kernels kann auf bestimmte Anforderungen zurückzuführen sein, z. B. auf Anforderungen an die Kernelgröße und das Entfernen einiger nicht verwendeter Teile des Kernels. Dieses Szenario betrifft häufig eingebettete Systeme.
Oder Sie haben einen Teil des Kernel-Codes selbst geändert und müssen die Funktion nach der Kompilierung überprüfen.

Beim Kompilieren des Moduls werden einige Funktionsmodule in .ko kompiliert. Sie können xxx.ko insmodieren, um die geschriebenen Codefunktionen im System zu verwenden, ohne den Kernel neu zu kompilieren.
Das Kompilieren des Kernels ersetzt nicht den aktuellen Kernel. Der kompilierte neue Kernel befindet sich häufig in einem Verzeichnis, das dem folgenden ähnelt, und sein Name lautet meist bzImage

/usr/src/kernels/3.xx.x-.x86_64/arch/x86/boot/
Nach dem Login kopieren

Dann können Sie die Grub-Liste des Systems bearbeiten, um den neuesten zu verwendenden Kernel hinzuzufügen it

Der neue Kernel ist integriert. Neue Treiber, z. B. Intel Core Graphics: /lib/modules/`uname -r`/kernel/drivers/gpu/drm/i915/i915.ko

Ein System kann mehrere Kernel installieren. B. Startdateien, wird der neue Kernel den alten Kernel nicht überschreiben:

/boot/vmlinuz-VERSION
/boot/initrd.img-VERSION
Nach dem Login kopieren

Während der Installation des neuen Kernels müssen einige Kernelmodule neu kompiliert werden, wie z. B. VirtualBox:

/lib/modules/`uname -r`/updates/dkms/vboxdrv.ko
Nach dem Login kopieren

Wenn der neue Kernel nicht ordnungsgemäß läuft, Sie können den alten Kernel auswählen, der im GRUB-Boot gestartet werden soll.

Sie können auch folgendermaßen zum Originalkernel wechseln:

ln -sf /boot/vmlinuz-VERSION /vmlinuz
ln -sf /boot/initrd.img-VERSION /initrd.img
Nach dem Login kopieren

Wobei VERSION die Version des Originalkernels ist.

Kompilieren Sie einen Linux-Kernel‍

Der gesamte Kernel-Kompilierungsprozess ist sehr einfach, aber die Kernel-Kompilierung dauert lange. Dies liegt hauptsächlich daran, dass der Kernel viel Code enthält. Wenn Ihr Computer leistungsstark ist, ist die Zeit natürlich viel kürzer. Beachten Sie außerdem, dass die Kompilierung in einer virtuellen Maschinenumgebung empfohlen wird, um Fehler zu vermeiden, die zu Systemproblemen führen können. Beim Testen in einer virtuellen Maschine wird empfohlen, dass die Größe der Systempartition und der Kernel-Quellcode-Partition größer als 20 GB ist.

Schritt 1: Laden Sie den Quellcode herunter

1. Gehen Sie zur offiziellen Website des Linux-Kernels und laden Sie die neueste Version oder andere Versionen des Kernel-Codes herunter. Hier ist ein komprimiertes Archiv des Quellcodes.

Warum kompiliert Linux den Kernel?

2. Gehen Sie davon aus, dass wir uns jetzt in einem Linux-Betriebssystem befinden. Geben Sie den folgenden Befehl in die Befehlszeile ein, um den Kernel herunterzuladen.

wget 链接(由于链接会被认为是广告,本文省略链接,请自行复制)
Nach dem Login kopieren

Sie können den Download-Fortschritt während des Download-Vorgangs sehen. Nach Abschluss des Downloads sehen die Informationen ungefähr wie unten dargestellt aus.

Warum kompiliert Linux den Kernel?

Schritt 2: Dekomprimieren Sie den Quellcode

Nachdem das komprimierte Paket heruntergeladen wurde, können Sie es mit dem Befehl tar dekomprimieren.

tar xvf linux-5.9.6.tar.xz
Nach dem Login kopieren

在解压的时候可以看到文件列表,这个会很多,可能需要等一会儿。

Warum kompiliert Linux den Kernel?

Step 3: 安装需要的软件包

安装编译工具以及其它一下依赖的软件包,在Ubuntu 18.04环境下执行如下命令。

sudo apt-get install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc flex libelf-dev bison
Nach dem Login kopieren

如果一切顺利,大概安装输出信息如下所示。

Warum kompiliert Linux den Kernel?

Step 4: 配置内核代码

在编译内核之前,我们可以对内核源代码进行配置。配置的目的主要是确定哪些模块会编译到内核当中。

1. 进入源代码目录

cd linux-5.9.6
Nach dem Login kopieren

2. 从当前机器的启动目录拷贝配置信息到源代码目录。这步操作的意思是我们编译内核的配置采用用当前环境一致的配置。

cp -v /boot/config-$(uname -r) .config
Nach dem Login kopieren
Warum kompiliert Linux den Kernel?

3. 可以通过如下命令启动配置界面

make menuconfig
Nach dem Login kopieren

该命令会运行一些脚本,然后打开一个配置界面

Warum kompiliert Linux den Kernel?

4. 下面是打开的配置界面。可以看出里面包含所有的内核组件,包括文件系统,网络,IO栈,虚拟化和设备驱动等等。如果你不熟悉,可以不做任何修改。

Warum kompiliert Linux den Kernel?

Step 5: 编译内核

1. 通过如下命令就可以编译内核了

make -j 10
Nach dem Login kopieren

上面参数是并发数量,通常可以是CPU的2倍。

Warum kompiliert Linux den Kernel?

2. 安装模块

sudo make modules_install
Nach dem Login kopieren
Warum kompiliert Linux den Kernel?

3. 安装内核

sudo make install
Nach dem Login kopieren

安装完成后会有如下提示信息。

Warum kompiliert Linux den Kernel?

Step 6: 重启,验证版本

当上述步骤都没有出错的情况下,我们重启一下计算机,然后运行如下命令。

uname -mrs
Nach dem Login kopieren

此时就可以看到内核版本已经是我们编译的版本了。

1Warum kompiliert Linux den Kernel?

结论‍

通过上面几步,我们可以很简单的编译一个内核。如果后面开发内核模块,也是要基于内核代码树的,因此这个是内核开发的基础。

可能遇到的问题‍

编译内核的时候可能会遇到这个问题:

没有规则可制作目标
debian/certs/debian-uefi-certs.pem,由certs/x509_certificate_list需求停止

在要编译的内核目录下编辑一下配置文件即可。简单的方式是执行如下命令

vim .config
Nach dem Login kopieren

然后找到
CONFIG_SYSTEM_TRUSTED_KEYS,将其设置为空,也就是下面这个样子。

CONFIG_SYSTEM_TRUSTED_KEYS=”
Nach dem Login kopieren

相关推荐:《Linux视频教程

Das obige ist der detaillierte Inhalt vonWarum kompiliert Linux den Kernel?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage