Gibt es einen Grund, warum es auf Android-Geräten keine Hardware-Abstraktionsebene im üblichen Sinne gibt?
Wirtschaftliche Gründe:
Android-Geräte sind in der Regel ARM-basierte Geräte mit nur einer Karte, in die alle Hardware eingebettet ist. Diese Hardware ändert sich im Laufe der Lebensdauer des Geräts nicht. Der Benutzer kauft normalerweise nur ein neues Gerät.
Android ist ein "eingebettetes" Betriebssystem. Von Hardware, auf der Android ausgeführt wird, wird normalerweise nicht erwartet, dass sie ein anderes Betriebssystem unterstützt oder ausführt.
ACPI ist ein komplexer Standard, der schwer zu implementieren ist.
Für Dinge wie Telefone ist Time-to-Market für Unternehmen mehr Wert als die Entwicklung von Standards, die andere Unternehmen verwenden. Windows, das Betriebssysteme verkaufen wollte, die auf verschiedenen Intel-basierten Hardwareanbietern arbeiten, zog es offensichtlich vor, den Standard zu haben (und sowohl Intel als auch Microsoft waren an der Entwicklung von ACPI beteiligt.)
Technische gründe:
Windows hängt während des Startvorgangs und während des Betriebs stark von der Firmware (BIOS oder UEFI) ab. Linux kann so konfiguriert werden, dass es nach dem Laden nicht auf Firmware angewiesen ist. Für ARM-Plattformen ist dies wahrscheinlich typisch.
- So können unter Linux einfachere (und weniger benutzerfreundliche) Schemata verwendet werden, z. B. Gerätebäume oder einfach eingebaute Treiber im Kernel, die wissen, wo sich ihre Hardware auf der Plattform befindet, ohne dass eine Erkennung erforderlich ist.
Wenn man jedoch versucht, ein ROM auf einem anderen Android-Gerät zu flashen, funktioniert es nicht
Der Bootloader in Android-Geräten ist häufig so konfiguriert, dass nur ein signiertes Image geladen wird. Wenn das Image, das das Betriebssystem enthält, nicht signiert ist, funktioniert es nicht.
Der Bootloader selbst ist oft sehr hardwarespezifisch und für eine bestimmte Platine gebaut. (Sie können kein BIOS für ein Modell-Laptop verwenden und erwarten, dass es auch mit einem anderen Modell-Laptop funktioniert - Sie müssten als OEM ein neues BIOS für eine neue Plattform erstellen). Wenn das ROM-Image den Bootloader enthält und Sie versuchen, es auf der falschen Plattform auszuführen, wird es wahrscheinlich nicht funktionieren.
Die Linux-Treiber für die Hardwaregeräte in vielen Android-Geräten sind nicht Open Source. Enthält Dinge wie Display, WLAN, Mobilfunk. Sie funktionieren daher nicht mit späteren Kernel-Versionen. Wahrscheinlich ist dies der Hauptgrund, warum verschiedene ROMs nicht funktionieren, da die Kernel-Version eine spätere, bessere ist, aber kein neuerer Treiber verfügbar ist (und ohne den Quellcode nicht erstellt werden kann).
Die an den Boot-Kernel übergebenen Befehlszeilenoptionen können von entscheidender Bedeutung sein. Beispielsweise können diese Optionen den Kernel anweisen, bestimmte Speicherbereiche zu vermeiden, durch die das System beim Zugriff blockiert wird.