Warum müssen wir ROMs portieren?

327
Lewis Kelsey

Wir können Windows auf einer Reihe von Maschinen installieren, aber wenn man versucht, ein ROM auf einem anderen Android-Gerät zu flashen, funktioniert es nicht. Ich gehe davon aus, dass die Kernel- und Systemoptimierungen nur mit dem spezifischen SOC (Battery) kompatibel sind. Das BIOS informiert Fenster durch ACPI-Tabellen über die Fähigkeiten verschiedener Geräte und arbeitet mit einer Reihe von Hardware. Gibt es einen Grund, warum es auf Android-Geräten keine Hardware-Abstraktionsschicht im üblichen Sinne gibt, sind es nur die Hersteller, die davon profitieren?

-2
Die meisten Ihrer Annahmen sind falsch. Sie können das ROM nicht "flashen". Flash-Speicher ist kein * "ROM" *. Android hat HW-Abstraktionsschichten. Die Tatsache, dass Android auf einem größeren Bereich (* Bereich * nicht Anzahl) von Geräten als Windows läuft, beweist diesen Punkt. Das Problem ist, dass das Image vollständig an die Hardware angepasst ist. Während eine Windows-Installation sich selbst automatisch konfiguriert und versucht, alle erforderlichen Gerätetreiber für Sie automatisch zu installieren. Deshalb müssen Sie während der Installation mit dem Internet verbunden sein. sawdust vor 5 Jahren 1
https://www.google.co.uk/amp/s/lifehacker.com/how-to-flash-a-rom-to-your-android-phone-30885281/amp Rom ist gerade ein Synonym für in diesem Fall ein mobiles Betriebssystem mit einem benutzerdefinierten Skin Lewis Kelsey vor 5 Jahren 0

1 Antwort auf die Frage

0
LawrenceC

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.

Diese Antworten auf die Fragen des OP sind falsch (zB hat Android eine HW-Abstraktion), und auch die Begründung ist falsch. Das OP entspricht dem Schreiben des Android-Flash-Images in eine Windows-Installation, die eine Systemkonfiguration durchführt. Es gibt keine Konfiguration, wenn das Android-Flash-Image "installiert" ist. Der äquivalente Windows-Vorgang wäre die Umpflanzung eines vorhandenen Windows-Systems auf eine HDD / SSD von einem PC auf einen anderen PC und die Erwartung, dass das System fehlerfrei startet. Das OP vergleicht * Installationen *, die Äpfel mit Orangen vergleichen, und diese "Antwort" zeigt dies nicht. sawdust vor 5 Jahren 1
Sie haben einen guten Punkt darüber, wie das Flashen eines ROM in der von OP beschriebenen Weise wie das Umpflanzen eines vorhandenen Windows ist. Ich kenne die "Verkäufer-Schnittstelle" von HAL in Oreo, aber sie hängt nicht damit zusammen, wie ACPI auf x86 versucht, Hardware zu präsentieren - die Android-HAL ist Betriebssystemebene, nicht Firmware-Ebene. LawrenceC vor 5 Jahren 0