Kernel

Der Linux-Kernel ist auf fast jedem Android-Gerät ein äußerst wichtiger Bestandteil der Software. In diesem Abschnitt werden Linux-Kernel-Entwicklungs- und Release-Modelle (unten), stabile und langfristig unterstützte (LTS) Kernel (einschließlich der Gründe, warum alle Android-Geräte stabile Releases anstelle von Cherry-Picking-Patches verwenden sollten), die Kernel- Konfiguration und -Härtung , die Anforderungen an Schnittstellen und die Modulare Kernel (eingeführt in Android O), Kernel- Debugging und Netzwerktests sowie SquashFS .

Linux-Kernel-Entwicklung

Der Linux-Kernel ist das größte kollaborative Softwareprojekt aller Zeiten. Im Jahr 2016 haben über 4.000 verschiedene Entwickler aus über 450 verschiedenen Unternehmen zu dem Projekt beigetragen, und es gab 6 Releases mit jeweils zwischen 12.000 und 16.000 verschiedenen Änderungen. Ende 2016 betrug die Größe des Linux-Kernels etwas mehr als 56.000 Dateien, bestehend aus 22 Millionen Codezeilen, Build-Skripten und Dokumentation (Kernel-Version 4.9). (Eine vollständige Linux-Entwicklungsstatistik finden Sie unter https://kernelnewbies.org/DevelopmentStatistics .)

Während der Linux-Kernel Code für alle verschiedenen von ihm unterstützten Chip-Architekturen und Hardwaretreiber enthält, führt ein einzelnes System nur einen Bruchteil der Codebasis aus. Ein durchschnittlicher Laptop verwendet ungefähr 2 Millionen Zeilen Kernelcode aus 5.000 Dateien, um ordnungsgemäß zu funktionieren, während das Pixel-Telefon 3,2 Millionen Zeilen Kernelcode aus 6.000 Dateien verwendet (aufgrund der erhöhten Komplexität eines SoC).

Linux-Kernel-Releases

Der Linux-Kernel verwendet ein Release-Modell, das sich erheblich von Standard-AOSP-Releases unterscheidet. Mit der Veröffentlichung des 2.6-Kernels im Dezember 2003 wechselte die Kernel-Entwicklergemeinde vom vorherigen Modell einer separaten Entwicklung und eines stabilen Kernel-Zweigs zu einem stabilen Nur- Zweig-Modell. In diesem Modell wurde alle 2 bis 3 Monate eine neue Version erstellt. Diese Version wurde für stabil erklärt und allen Benutzern zur Ausführung empfohlen. Diese Änderung des Entwicklungsmodells war auf den sehr langen Release-Zyklus vor dem 2.6-Kernel (fast 3 Jahre) und den Kampf zurückzuführen, zwei verschiedene Zweige der Codebasis gleichzeitig zu erhalten.

Die Nummerierung der Kernel-Releases begann bei 2.6.x, wobei x eine inkrementelle Nummer war, die sich bei jeder Version änderte (der Wert der Nummer hat keine Bedeutung, außer dass er neuer als die vorherige Kernel-Version ist). Die Kernel-Version wurde seitdem auf 4.x umgestellt, wobei zwei wichtige Versionsänderungen berücksichtigt wurden. Diese Versionsnummern werden nur von den Betreuern ausgewählt, um Verwirrung unter den Benutzern zu vermeiden, die durch höhere kleinere Versionsnummern verursacht wird.