Bootprozess

Aus Android Wiki
Wechseln zu: Navigation, Suche

Der Bootprozess beschreibt die Schritte und Vorgänge, die ausgeführt werden, wenn das Android-Gerät mit der Power-Taste gestartet werden soll. Für den Startprozess von Android sind insgesamt 7 Schritte notwendig, bis das System vollständig zur Verfügung steht.

Die Schritte beim Starten[Bearbeiten | Quelltext bearbeiten]

Im Folgenden werden die einzelnen Schritte, die beim Booten des Gerätes durchlaufen werden, genauer erklärt.[1][2][3][4]

Einschalten[Bearbeiten | Quelltext bearbeiten]

Einschalten

Beim Einschalten, also dem Betätigen der Power-Taste, ist die CPU noch nicht initialisiert. Der einzige verfügbare Speicher ist der interne RAM. Sobald die Stromversorgung über den Akku stabil ist, wird der Boot ROM Code ausgeführt, dessen Aufgabe es im ersten Schritt ist, anhand eines Systemregisters den Speicherort des Bootloaders zu finden. Sobald der Ort des Bootloaders bekannt ist, wird dieser in den RAM geladen und, sobald dies abgeschlossen ist, die Systemkontrolle vom Boot ROM Code an den Bootloader übergeben.

Der Bootloader[Bearbeiten | Quelltext bearbeiten]

Der Bootloader

Der Bootloader ist ein vom Kernel getrenntes Programm, welches der Initialisierung von Speicher und dem Laden des Kernels in den RAM dient. Vereinfacht werden dabei folgende Schritte durchlaufen:

  • Initialisieren von externem RAM
  • Laden des Main Bootloaders in den externen RAM
  • Ausführen des Hauptprogramms des Bootloaders, zum Laden von beispielsweise weiteren Speichereinheiten, Netzwerkunterstützung oder dem Modem. Auch low level memory protection (Security Check) und weitere Sicherheitsoptionen werden in diesem Schritt geladen.
  • Nachdem einige Bootparameter in den Speicher geschrieben wurden, sucht der Bootloader nach einem Linux-Kernel vom eingestellten Bootmedium und lädt diesen in den RAM.
  • Sind alle Aufgaben des Bootloaders abgearbeitet, übergibt dieser die Systemverantwortng an den Kernel.

Der Kernel[Bearbeiten | Quelltext bearbeiten]

Der Kernel

Der Linux-Kernel hat beim Android-Startprozess dieselben Aufgaben wie bei einem normalen Desktop-PC. Neben der Initialisierung von Controllern, Caches und Speicherrestriktionen ist es dem Kernel nun auch möglich, virtuellen Speicher zu verwalten und Benutzerprozesse zu starten.[5] Im Anschluss an die Initialisierungen sucht der Kernel nach dem Init-Prozess und führt diesen als ersten Userspace-Prozess aus.

Der Init-Prozess[Bearbeiten | Quelltext bearbeiten]

Der Init-Prozess

Der Init-Prozess ist der erste Prozess, von dem aus alle anderen Prozesse als "Tochterprozesse" gestartet werden. Der Init-Prozess wird in erster Linie nach einer Datei namens init.rc suchen, welche im AOSP unter system/core/rootdir zu finden ist. Diese Datei beschreibt die Services und andere Parameter des Systems. Nachdem die Datei geladen wurde, wird diese interpretiert und die darin befindlichen Aktionen ausgeführt (zum Beispiel Starten von Systemprozessen).

Zygote und die Dalvik-VM[Bearbeiten | Quelltext bearbeiten]

Zygote und die Dalvik-VM

Zygote, welcher sich hinter der Binary /system/bin/app_process verbirgt, hat einzig die Aufgabe die Dalvik VM zu starten und zu initialisieren. Zygote hat den Autostart-Wert 1, was bedeutet, dass der Service neu gestartet wird, sobald er beendet wurde[6].

System Server[Bearbeiten | Quelltext bearbeiten]

Der System Server

Die erste Javakomponente, die beim Start von Android ausgeführt wird, ist der System Server, welcher die Aufgabe hat, alle Androidsystem-Dienste zu starten, zum Beispiel Bluetooth oder den Telefonmanager. Es werden die Dienste gestartet, welche direkt in der SystemServer.java eingetragen sind, welche im Android Open Source Project unter der Datei frameworks/base/services/java/com/android/server/SystemServer.java zu finden ist. Die Services werden direkt in die run-Methode geschrieben.

Bootvorgang abgeschlossen[Bearbeiten | Quelltext bearbeiten]

Mit der Broadcast Action ACTION_BOOT_COMPLETED gibt Android allen Diensten bekannt, dass der Bootvorgang abgeschlossen ist.

Einzelnachweis[Bearbeiten | Quelltext bearbeiten]