Was ist der Unterschied zwischen dem Linux-Kernel und dem Android-Kernel?

Welche Änderungen wurden im Linux-Kernel vorgenommen, um ihn zu einem Android-Kernel zu machen? Mit dieser Frage meine ich, was sind die Unterschiede zwischen Linux-Kernel und Android-Kernel?

Antworten (3)

Ich denke, diese Android-Quelle ist eine großartige Dokumentation, um sie zu verstehen.

Und hier ist eine Liste der Änderungen, die vom Mainline-Kernel für den Android-Kernel 4.14 vorgenommen wurden.

Zu den größten Features gehören:

  • 19,8 % Energiebewusste Planung (Kernel/Sched)
  • 13,8 % Netzwerk (Netz/Netzfilter)
  • 13,5 % SD-Kartenfs (FS/SD-Kartenfs)
  • 9,4 % USB (Treiber/USB)
  • 7,2 % SoC (arch/arm64, arch/x86)
  • 6,2 % f2fs (fs/f2fs – Backports von Upstream)
  • 6,1 % Input (Treiber/Input/Sonstiges)
  • 5,4 % FIQ-Debugger (Treiber/Staging/Android/fiq_debugger)
  • 3,6 % Goldfish-Emulator (Treiber/Plattform/Goldfish)
  • 3,4 % Verity (Fahrer/md)
  • 11,6 % Sonstiges

Unterschiede zu LTS

Im Vergleich zu LTS (4.14.0) weist der gemeinsame Android-Kernel 355 Änderungen, 32266 Einfügungen und 1546 Löschungen auf (Stand: Februar 2018).

Geben Sie hier die Bildbeschreibung ein

Die Unterschiede ändern sich von Version zu Version (sowohl von Linux als auch von Android), und der genaue Kernel ist für jedes Gerät unterschiedlich. Ein Kernel für Android ist ein Mainstream-Linux-Kernel mit zusätzlichen Treibern für das spezifische Gerät und anderen zusätzlichen Funktionen, wie z. B. verbesserte Energieverwaltung oder schnellere Grafikunterstützung.

Viele Funktionen im Android-Kernel werden später zu Upstream-Linux hinzugefügt, nachdem die Open-Source-Community sie akzeptiert (und vielleicht geändert) hat, aber andere werden nie upstreamed, entweder weil sie für die Linux-Kernel-Entwickler nicht akzeptabel sind oder weil sie ' gelten nur für Android oder bestimmte Hardware.

Die meisten Treiber für Android-spezifische Hardware wurden in den Mainline-Kernel aufgenommen; aber einige Features, wie der Wakelock, der vor einiger Zeit für eine große Kontroverse gesorgt hat, bleiben problematisch, weil Mainline- und Android-Kernel-Entwickler sich nicht einig sind, ob es eine gute Idee ist.
„Ein Kernel für Android ist ein Mainstream-Linux-Kernel mit zusätzlichen Treibern für das spezifische Gerät und anderen zusätzlichen Funktionen, wie z. B. verbesserte Energieverwaltung oder schnellere Grafikunterstützung“, also sind es hauptsächlich Treiber? Kein Quellcode geändert?
@GuerlandoOCs Ich bin mir nicht sicher, was Ihrer Meinung nach Treiber sind, wenn es sich nicht um eine Änderung des Quellcodes handelt, aber unabhängig davon ist die von mir erwähnte "andere zusätzliche Funktionalität" heutzutage ziemlich groß. Es gibt viele Quellcodeänderungen.
@DanHulme sind die Quelländerungen Patches oder nur Code von Hand geändert? Wie kann ich Dinge sehen, die sich geändert haben? Ich habe gelesen, dass Sie Ihren Linux-Kernel so patchen können, dass er mit Android kompatibel ist, aber wo sind diese Patches, damit ich sie lesen kann?

Abgesehen von den gerätespezifischen Unterschieden und Wakelocks, die Dan Hulme und Lie Ryan erwähnen, entfernte Android System V IPC-Funktionen (Nachrichtenwarteschlangen, gemeinsam genutzte Speichersegmente, Semaphore), die zu Ressourcenlecks führen könnten ( http://www.kandroid.org/ndk /docs/system/libc/SYSV-IPC.html ). Dies ist wahrscheinlich nur eine Frage der Konfiguration des Kernel-Builds. Auch der Android-IPC der Wahl namens Binder hat eine gewisse Unterstützung im Kernel, die meines Wissens nicht in Standard-Linux-Kerneln enthalten ist.