Interner Aufbau von Smartphones und Android im Speziellen

Dieser Artikel ist eine Übersetzung der CyanogenMod-Wiki-Seite und soll einen Überblick über die Struktur in Smartphones, speziell Android-Smartphones geben.

Dieser Artikel soll Anwendern zu verstehen helfen (Anfänger oder Fortgeschrittene gleichermaßen), was sie tun, indem sie Ihr Smartphone modden.

Das Modifizieren einer Smartphone-Software ist nicht schwierig, aber es ist ein vielschichtiger Prozeß mit vielen kleinen Details. Viele sehr detailierte Modding-Anleitungen, die man überall im Netz finden kann, geben keinen größeren Überblick über das, was man da eigentlich tut. Dies macht die Fehlersuche im Einzelfall ziemlich schwer. Dies versuche ich in diesem Artikel hier durch das Erklären einiger Grundlagen zu erleichtern.

Diese Beschreibung, wie die Software funktioniert, ist vorallem für Leute gedacht, die das CyanogenMod (CM) installiert haben (oder ROMs, die auf Cyanogen Basieren). Dieses gibt es für Android-Geräte, aber es gibt viele Gemeinsamkeiten mit anderen Unix-basierenden Systemen, wie z.B. WebOS oder Aplle-Geräten, auf denen iOS läuft. Windows-Mobile und Symbian-Systeme sind komplett anders, so dass man die Erläuterungen hier nicht übernehmen kann, obwohl es einige Hardware-Übereinstimmungen gibt.

Da Smartphones nichts anderes sind als kleine Computer, die man in ein Hosentaschenformat gebracht hat, sind die meisten Begriffe auch in der Computerwelt anzutreffen.

RAM, Flash, und SD

zu Beginn ist es hilfreich zu wissen, dass die meisten Smartphones drei Arten von Speicher haben:

  • Hauptspeicher (oder auch Main Memory genannt), bzw. abgekürzt RAM
  • internen NAND-Flash-Speicher
  • Wechseldatenträger, meist eine SD-Karte (technisch gesehen auch Flash-Speicher, aber um Verwirrung zu vermeiden wird der Begriff „Flashspeicher“ in diesem Artikel nur für den internen Speicher verwendet)

Der Hauptspeicher oder auch RAM ist sehr schnell, kann gelesen und beschrieben werden, ist aber flüchtig, d.h. er verliert alle Daten beim Ausschalten.

Der interne NAND-Flash-Speicher ist nicht flüchtig, beim Ausschalten bleibt der Inhalt erhalten. Lesevorgänge sind sehr schnell, Schreibzugriffe extrem langsam. Man kann sich das wie die Festplatte des Telefons vorstellen. Im Flashspeicher ist das Betriebssystem (auch Firmware genannt) des Telefons gespeichert. Wenn Programme von dort gestartet werden, müssen sie ins RAM geladen werden. Im Flashspeicher sind ebenfalls die Apps gespeichert, die man herunterlädt. sowie einige Benutzerdaten (Kontakte, Einstellungen für Apps usw.)

Die SD-Karte ist normalerweise als Massenspeicher für den Anwender eingebunden, z.B. für Fotos oder Musik. Die SD-Karte ist auch sehr nützlich, um von dort aus neue (oder custom) Betriebsystemversionen zu laden. Dieser Prozeß ist im Allgemeinen als „reflashen“ oder kurz „flashen“ bekannt.

Android Software, Booten und Partitionen

Flash-Speicher enthält bei allen Unix-basierenden Smartphones (dies sind Android, WebOS und iOS) den Kernel, das Dateisystem und den rest des Betriebssystems. SD-Karten werden als Wechseldatenträger im root des Dateisystems gemountet.

Ein weiterer Teil des Speichers enthält den Bootloader, welches vom Gerät eingelesen wird, wenn es (neu) startet. Er ist verantwortlich, dass der Kernel gefunden und gestartet wird, damit der Rest des Betriebssystems geladen werden kann.

Wenn Modder versuchen, ein neues Smartphone zu rooten, gibt einer dieser Schritte möglicherweise Kontrolle über den Bootprozeß, indem z.B. kleine Routinen genutzt werden, die vom Hersteller installiert wurden, um Entwicklung und Diagnose zu Ermöglichen. Oder es wird ein Bootloader installiert, der kompatibel ist und solche Routinen aufweist.

Ab jetzt kommen Android-Spezifische Details:

Bei den meisten Android-basierenden Smartphones (besonders die von HTC) hat der Bottloader zwei Phasen: IPL (Initial Programm Loader, „Startprogrammlader“) und SPL (Second Programm Loader). Der IPL bei Android-geräten ist in Hardware ausgeführt und nicht modifizierbar, aber der SPL kann (und muss ;o) ) ersetzt werden.

Es gibt einige verschiedene SPLs für die verschiedenen Telefone. Alle wurden modifiziert, um alternative (bzw. nicht Google-signierte) Versionen von Android zu starten. Allerdings gibt es auch Smartphones, die gerootet werden können, ohne den SPL zu modifizieren.

Schließlich enthält die Firmware noch ein zweites, kleines Betriebssystem, welches „Recovery Image“ oder kurz „Recovery“ genannt wird. Dies wird benötigt, damit over-the-air (OTA) Updates von dort aus andere Bereiche des internen Flashspeicher modifizieren können. Es gibt einige modifizierte Versionen des Recoverys, welche von Moddern erstellt wurden, z.B. Amon-RA oder das ClockworkMod-Recovery.ries.

Partitionen

Der Android Flash-Speicher ist in Partitionen unterteilt, welche einzeln geändert werden können. Normalerweise sind das unter Android:

  • splash1 – das Einschaltbild, normalerweise eine Grafik
  • boot – Linux-Kernel und eine RAM-Disk
  • recovery – Das Recovery-Image
  • system – Der Rest des Betriebssystems
  • cache – temporärer Speicher, der vom Recovery und einigen Teilen des Betriebssystems benutzt wird
  • userdata – Anwenderdaten, z.B. die Kontaktliste

Anders als bei der täglichen Nutzung, wo der Nutzer nur Cache- und Anwendungsdaten ändern kann, kann man diese beiden Partitionen „wipen“, normalerweise vom Recovery aus, wärend der Installation oder eines Upgrades des Betriebssystems.

Normalerweise sind boot, recovery und system in einer bestimmten Reihenfolge zu flashen, so dass die Firmware immer bei jedem SChritt funktionsfähig bleibt, und man kann dann zum nächsten Schritt übergehen. Allgemein gesagt, das flashen des Recoverys ist Teil des Rootprozesses. Die Boot- und Systempartition wird beim flashen eines ROMs neu beschrieben.

ROM

Der Begriff „ROM“ (Read Only Memory – „nur-lese-Speicher“) wird für verschiedene Sachen in der Smartphone-Welt benutzt, die gängigsten sind eigentlich nicht zutreffend, vorallem bei Android-Phones.

Der interne Flash Speicherwird manchmal als ROM bezeichnet, obwohl er beschreibbar ist (allerdings wird die system-partition normalerweise als „nur lesbar“ im Normalgebrauch eingebunden (gemountet)) Diese Angabe findet man auch meistens in den Datenblättern des Herstellers, in der Annahme, dass  dieser nicht modifizierbar ist. Wenn man z.B. in der Werbung liest: „512MB RAM und 768MB ROM“ dann hat das Gerät 768 MB internen Flash-Speicher.

Um die Dinge ganz verwirrend zu machen, haben Modder die Abkürzung „ROM“ benutzt, statt eigentlich korrekterweise „ROM-image“ zu sagen. Denn dies ist eine Firmware, die man benutzen kann, um auf den internen Flash Speicher zu schreiben und alle Teile des Betriebssystems zu ersetzen. Darum hört man überall die Leute sagen, dass sie ein „ROM“ auf ihr Telefon flashen.

Es ist wichtig, den Begriff „ROM“ zu erkennen und aus dem Kontext zu verstehen, besser wäre es, diesen Begriff nicht inflationär zu verwenden.

Root

Der Begriff „root“ kann einiges, je nach Zusammenhang, bedeuten:

In der Hauptbedeutung ist „root“ der Name des Administrators in UNIX/LINUX-Systemen. Android hat aber keine Usernamen (nur IDs), aber es hat den Zugangslevel des Admins. In unmodifizierten Android-Versionen ist dieser Level nur für das System selbst reserviert, in Custom ROMs kann der Anwender „su“ (switch User, den Benutzer) auf „root“ wechseln, um Befehle zu starten und alles zu tun, was sie wollen.

Als Verb ist „rooting“ der Prozeß des Erlangens genannter Rechte.

Eine weitere Hauptbedeutung für „root“ ist der Root eines Dateisystems. Dieser ist das niedrigste Level, welchen es gibt.

Beispiel: Eure Festplatte hat den Laufwerksbuchtaben „C“. Auf der Festplatte sind viele Verzeichnisse. Der root der Festplatte wäre „C:\“ sozusagen „ganz oben“ im Dateisystem.

Z.B. wird of gesagt: „Kopiere die Datei ins Root deiner SD-Karte“. Das bedeutet, dass du die Datei einfach auf die SD-Karte kopieren sollst. Ganz oben drauf, nicht in ein Unterverzeichnis, einfach auf die Karte. Dies wird gesagt, damit man sicher gehen kann, dass die Datei in irgend einem Unterverzeichnis landet.


Grundlegende Modding Schritte

Es gibt vier grundlegende Schritte, um ein Android-System zu installieren:

  1. Einen Angriffspunkt in Android finden. Glücklicherweise gibt es diesen für fast jedes Android-Phone. In einigen Fällen gibt es diese sogenannten „Exploits“ nur in älteren Firmwareversionen, da sie in neueren gepatcht wurden. Damit macht sich ein Downgrade notwendig.
  2. Den Exploit ausnutzen um Rootrechte zu erlangen, so dass man den Flashspeicher modifizieren kann
  3. Ein Custom-Recovery in den Flashspeicher schreiben und dieses zu booten. Das Recovery ersetzt das originale und arbeitet fast genau so, allerdings überprüft es keine Google-Signaturen in den Dateien, die geflasht werden
  4. Das Recovery nutzen, um einen Kernel und die Firmware deiner Wahl flashen. Dies ist normalerweise ziemlich einfach, da diese in einer zip-Datei zusammen geflasht werden. Meistens hat man davor das Dateisystem zu wipen (besonders die Userdaten), ältere oder andere Einstellungen sind verschieden zu den neueren und können eigenartige Effekte erzeugen.

Die ersten drei Schritte sind die schwersten, müssen allerdings auch nur ein mal ausgeführt werden.

Rooting eines Android-Phones

Eine Ursache von Komplikationen im Modding-Prozeß ist, dass Hersteller von Smartphones und Mobilfunkprovider dich davon abhalten wollen, die Firmware zu verändern. Von den denen hört man häufig, dass sie Serviceanrufe minimieren wollen, die dadurch ausgelöst werden, dass man all zu leichtfertig die Firmware flasht. Obwohl dies ein Grund ist, spielen hier doch nur monetäre Gründe eine Rolle. Sie wollen dein Smartphone aus verschiedenen Gründen kontrollieren, erstens um dich am ungehinderten nutzen von Features (z.B. Tethering) zu hindern, um Netzwerklasten zu senken und zum ANderen dein Telefon mit nutzloser Software vollzustopfen, die du nicht entfernen kannst, die aber zusätzliches Geld bringen.

Auf Unix-basierenden Smartphones, wie Android oder iOS, wird das getan, indem der Flashspeicher gelockt wird, so dass er nur mit rootrechten beschrieben werden kann. Normaler Code in einer App hat diese Rechte nicht. Deshalb ist es wichtig, im Schritt 1 einen Exploit oder eine Backdoor zu finden, mit denen man sich Rootrechte verschaffen kann, die eigentlich verweigert werden.

Das T-mobile G1 (das erste Android Smartphone) ist ein klassisches Beispiel: Die älteste Android-Version hatte einen Bug, bei dem jeder Buchstabe, den man in der Tastatur eingab, „ausversehen“ in der root-shell wieder gegeben wurde. Auf diesen weg konnte man den Befehl „telnetd“ eingeben, der einen telnet-Daemon-Prozeß startete, welchen man als Debugging-Tool verwenden konnte. Mit laufenden telnetd kann man einen Telnet-Client auf dem Telefon starten und über Port 23 eine Rootshell (Befehlszeile mit Rootrechten) öffnen.

Android 1.5 und frühere hatten einen Defekt im Bluetooth-stack, der das rooten noch einfacher machte (dort war das sogenannte One-click-root mittels App möglich). Einige Hersteller patchten dies in 1.5, andere brachten ein Update auf 1.6 OTA. Vor kurzem wurde ein Exploit in Android 2.2 gefunden, der das „universal androot“ brachte. Da diese Exploits natürlich auch für den normalen Nutzer Risiken in sich bergen ist. z.B. das CyanogenMod gegen diese Exploits gepatcht und damit immun.

Nachden die Hersteller (oder eigentlich die Android-Community) diese Exploits entdeckten, wurden diese in späteren Firmwareversionen gepatcht. Aber oft ist es möglich, einfach eine ältere Version zu flashen, in der der Exploit noch vorhanden ist. Dies zu verhindern würde auch bedeuten, dass keine OTA-Updates mehr möglich sind.

Wie funktioniert ein Upgrade?

Wenn du auf ein OTA-Update hingewiesen wirsr, passiert folgendes:

  1. Eine Datei, die die Firmware enthält, wird auf das Telefon geladen (oft in die cache-Partition)
  2. Das Telefon rebootet ins recovery und startet das Update
  3. Das Flashprogramm löscht den Inhalt eines Teils des Flashspeichers und kopiert die neue Firmware dort hin
  4. Das Telefon rebootet ins neue System

Das Modden eines Smartphones untergräbt diesen Prozeß, da die meisten Mods nicht auf offizielle OTA-Updates prüfen. Stattdessen kannst du dein eigenes Update über die SD-Karte durchführen. Dann startest du das (custom, nicht auf Signaturen prüfende) Recovery und installierst es. Nachden du das getan hast, gibt dir das OS möglicherweise einfacheren Zugriff, so dass du auch ohne Recovery flashen kannst (S-OFF)

Radio Firmware

Auf den meisten Smartphones gibt es einen Teil des Codes, der „Radio Firmware“ oder „radio Image“ genannt wird. Dieser ist nicht im internen Flashspeicher, sondern wird meist direkt auf einen Chip geflasht, der Controller für die Funkfrequenzen (RF) des Telefons. Dieser funktioniert als separate Firmware für den ARM9 Prozessor und steuert Dinge wie: WiFi, Mobile Daten (und Anrufe), Bluetooth, GPS aund eventuell Audioprozessing (DSP).

Dieser Teil ist sehr wichtig, denn die Radio-Firmware muss zwingend zum SPL des Telefons passen. Wenn dies nicht gegeben ist, ist das Telefon gebrickt, so dass man bei Updates aufpassen sollte, um nicht die falsche (z.B. die eines anderen Telefons) Version zu flashen.



avatar

Über Brain McFly

Rooter aus Leidenschaft, Nerd, Erklärbär ;o)

21 Kommentare zu Interner Aufbau von Smartphones und Android im Speziellen

  1. avatarMaik sagt:

    Sehr guter Artikel! Danke!!

  2. avatarEric sagt:

    Super geschrieben!

  3. avataramw sagt:

    Ich kann die vorherigen Kommentare nur bestätigen, Super Artikel und auch insgesamt eine echt gute Website!

  4. avatarroloff sagt:

    Sehr lehrreich ! Im Part „Radio Firmware“ ist ein englischer Absatz nicht entfernt worden… 😉

    Gruß, roloff

  5. avatarJamin sagt:

    wow genial Brain, vielen dank.
    Sehr gute arbeit!

  6. avatarBeni sagt:

    Danke für den super Artikel

  7. Pingback:HTC Desire Z: Touchscreen-Handy mit Volltastatur | Shopping Blog decido

  8. Pingback:HTC-Desire HD rooten - Brutzelstube.de

  9. Pingback:mehr Speicher durch neues Partitionslayout - Brutzelstube.de

  10. Pingback:HOW-TO: Rooten des LG P500 Optimus One - Seite 3 - Android-Hilfe.de

  11. avatarGisbert sagt:

    Das hier verstehe ich nicht ganz:

    „… die Radio-Firmware muss zwingend zum SPL des Telefons passen. Wenn dies nicht gegeben ist, ist das Telefon gebrickt …“

    Was bedeutet das genau? Kann man dann überhaupt noch telefonieren?

    • Wenn du beispielsweise das radio image eines desire hd auf einem classic desire flashst, geht anschließend nix mehr. Die Radio Images müssen zum Telefon passen und durch diese angesprochen werden können

      • avatarmaxi sagt:

        ok. aber nur in dem Fall, also ein FALSCHES RAdio-image flaschen ??
        Passiert es auch wenn man ein fasche ROM-image flascht ? ich meine Handy-brick !!!

        und nicht zu vergessen: Vielen Dank für den tollen Beitrag. hat mir ein Stück nach vorne gebracht 😛

  12. Pingback:Anonymous

  13. Pingback:Partitionierung des Classic Desire, Data++ und der Unterschied zu A2SD+ - Brutzelstube.de

  14. avatarToBü sagt:

    Wow, hab selten so gute, und vor allem so verständliche Beschreibungen gelesen.
    Bestens Dank füe Deine Arbeit.

  15. avatarMRjino sagt:

    Ich will nicht klugscheissen, aber du schreibst android sei auf unix aufgebaut. Android ist doch auf Linux aufgebaut. Die beide haben ähnlichkeiten, aber sind nicht das gleiche.

    • So wie ich das sehe sage ich es an einer Stelle eher indirekt:

      Auf Unix-basierenden Smartphones, wie Android oder iOS…

      Da iOS auf Unix basiert und Linux und somit Android ebenfalls aus einem Unix hervorgingen erhebe ich Einspruch 😉 und sage: Hab‘ ich auch nicht behauptet, dass Unix und Linux das gleiche sind 😉