Wie kann ein Linux-Kernel so klein sein?

56

Ein gewöhnlicher stabiler 3 * Kernel ist jetzt ungefähr 70 MB groß. Aber es gibt kleine Linux-Distributionen von 30-10 MB, bei denen Software und andere Dinge aus dem Kasten laufen.

Wie kann der Linux-Kernel in diesen Distributionen so klein sein? Können nur nicht benötigte Module und Treiber reduziert werden? Was wird noch getan, um die Kernelgröße zu reduzieren?

verwirrter Smoking
quelle
3
Eine andere Option ist die Verwendung von Größenoptimierungen beim Kompilieren, aber ich bin nicht sicher, wie groß die Auswirkung sein kann.
AndrejaKo
5
"Linus nennt Linux" aufgebläht und riesig "" theregister.co.uk/2009/09/22/linus_torvalds_linux_bloated_huge
Aki
1
@AndrejaKo - Viel. (Wenn Sie für kleine Größe gehen.)
Apache
19
70 MB ist die Größe der Quelle. Ein standardmäßig kompilierter und komprimierter Kernel hat ungefähr 2 MB, Module wie 10 MB.
ott--
1
ja, in der Tat ist es 3,6 MB, während initramfs 21 MB in meiner Distribution ist.
verwirrt Smoking

Antworten:

37

Ja. Wenn Sie sie entfernen (kompilieren / erstellen Sie nur die Module, die Sie benötigen), komprimieren Sie den Kernel (optimieren Sie die Größe) ... das führt zu einem so kleinen Kernel. Sie können sogar noch kleinere für das Zielsystem erstellen. Wie ich meinen PC kenne, kenne ich meine Sachen. Also erstelle ich, was ich brauche. Wie meine eigenen SATA-Treiber, Treiber für USB usw. Sonst nichts. Keine Webcam, keine alten IDE-Laufwerke, nichts.

Außerdem: Die größeren, denen Sie begegnen, sind der GANZE Kernel (den Sie nie brauchen). Sogar die Desktop-Versionen enthalten (meistens als Module) VIELE nicht benötigte Dinge. Aber Neulinge erwarten, dass jede Art von Hardware, die sie einstecken, einfach funktioniert.

(Beachten Sie, dass die Module erst geladen werden, wenn sie benötigt werden. Es gibt 3 Zustände:
[ ]- Werden nicht kompiliert, werden nicht Teil Ihres Kernels.
[M]- Werden als Modul kompiliert.
(Sie können es modprobe , oder Ihr System lädt es automatisch, wenn es benötigt wird.
Abhängig vom System, Benutzerland.)
[X]- Es wird in den Kernel kompiliert UND ist immer vorhanden.

Distros mit kleinem Kernel:

Apache
quelle
Nur ein kleiner Zusatz - [X] bedeutet, dass es in den Kernel kompiliert wird , weshalb es immer geladen wird.
Lawrence
"Neulinge erwarten" sprechen als professioneller Computertechniker und Linux-Veteran von 20 Jahren ... Ich erwarte, dass die Dinge auch funktionieren.
Cliff Armstrong
20

Frühe Linux-Distributionen wie Toms Root-Boot , MuLinux , Diet-Router , das inzwischen aufgelöste LOAF und viele andere haben alle ein funktionierendes Linux-System auf eine oder zwei 1,44-MB-Disketten installiert.

Der Linux-Kernel ist gewachsen, aber vergessen Sie nicht, dass er modular aufgebaut ist. Die Kernel-Module werden nach Bedarf geladen. Somit ist es weiterhin möglich, eine Linux-Distribution mit einem sehr geringen Platzbedarf zu erstellen.

Siehe: Handbuch zur Optimierung der Kernelgröße - eLinux.org

Wenn Sie Linux_tiny.pdf lesen, sehen Sie dies

  • historischer 0.99pl15 Kernel: Slackware 1.1.2, 1994 301K
  • Fedora Core 2 1.2M
  • SuSE 9.1 1.5M
  • 2.6.5-tiny1-Testkonfiguration: IDE, ext2, TCP, NIC 363K
RedGrittyBrick
quelle
11

Die Standardkernelkonfiguration ist so konfiguriert, dass so viele Hardware wie möglich unterstützt wird. Ein nicht entpackter Kernel mit Standardkonfiguration ergab eine Größe von 1897996 KB (einschließlich Kernel + Module). Beim Entfernen vieler unnötiger Treiber und Optionen (warum sollte ich ein HP-Modul benötigen, wenn ich ein Clevo-Notebook besitze) ergab sich eine Größe von 892892 KB, was einer Größenreduzierung von 53% gegenüber dem Standardkernel entspricht.

Fügen Sie bei der Installation der Kernel-Module die INSTALL_MOD_STRIP=1Option an. Dadurch werden alle Debugging-Symbole entfernt und die Größe für mich um 92% reduziert (von 892892 kB auf 69356 kB). Beachten Sie, dass dies nur zu installierende Module und nicht den Kernel (vmlinuz) selbst betrifft:

make INSTALL_MOD_STRIP=1 modules_install

Aus der Dokumentation / kbuild / kbuild.txt :

INSTALL_MOD_STRIP
--------------------------------------------------
INSTALL_MOD_STRIP, if defined, will cause modules to be
stripped after they are installed.  If INSTALL_MOD_STRIP is '1', then
the default option --strip-debug will be used.  Otherwise,
INSTALL_MOD_STRIP value will be used as the options to the strip command.
Lekensteyn
quelle
3
wow, 1897996 kB sind fast 2GB!
Netvope
3

Die meisten großen Distributionen konfigurieren ihren Kernel mit maximaler Hardwareunterstützung, sodass er mit den meisten Computern und allem, was Sie später anschließen, sofort funktioniert. Sie verwenden auch ein initrd-System, das in den meisten Fällen nicht benötigt wird. Es gibt auch Optionen in der Kernelkonfiguration, die den Erstellungsprozess für die Größe optimieren, und es kann auch eine bessere (wenn auch langsamere) Komprimierungsmethode ausgewählt werden. Wenn Sie sich die Größe des Kernel-Quellcodes ansehen, bedenken Sie, dass dieser auch Unterstützung für mehrere Architekturen jenseits von x86 / amd64, Netzwerkprotokollen, Dateisystemen und anderen Funktionen bietet, die Sie wahrscheinlich nie verwenden werden und können deaktiviert werden.

Jonathan Amend
quelle
1

Es ist ganz einfach, ein minimales System braucht nur einen Bootloader + Kernel, obwohl es fast nutzlos ist. Die meisten Befehle, die täglich verwendet werden, sind optionale Binärbefehle für das System, z. B. sh, ls usw. Wenn Sie an Interna interessiert sind, bietet Linux From Scratch! ist ein guter Ausgangspunkt.

Pinxue
quelle
Beachten Sie, dass sich Busybox um die meisten "alltäglichen" Dinge kümmert.
new123456
Nein, busybox hat sie einfach miteinander kombiniert. Es ist beliebt in kleinen und eingebetteten Systemen, aber nicht in Desktop-Systemen.
Pinxue