M
mm9
Neues Mitglied
- 2
Hallo!
Ich hab' recht viele Fragen und hoffe, dass manche beantwortet werden können. Leider gibt es nicht wirklich viel detailierte Information zu Android. Meistens ist sie für Menschen, die ihr Handy einfach nur verwenden wollen und nicht wirklich an allem interessiert sind. Die wirklichen "low-level"-Informationen sind dazu noch weit verstreut und oft sehr speziell für ein Handy (zugegeben, manche meiner Fragen zielen auch auf das neue Galaxy S2 ab). Neben Fragen gibt es auch Aussagen. Wäre schön, wenn ihr mir die bestätigen oder berichtigen würdet.
Vielleicht wäre es auch für andere interessant, dann alles in einer Art FAQ oder so aufzubehalten. Die bisher beste Information hab' ich im Wiki des Cyanogen-Mods gefunden.
Kurz zu mir: Ich verwendet seit 10 Jahren Linux (seit ein paar Jahren Gentoo). Ich kann C, C++, Python, x86-Assembler. Ich bin derzeit Netzwerkadmin. Ich hab' Ahnung von hardware-naher Programmierung und zumindest schon einen Bootloader für x86 geschrieben. Mit echter embedded-Hardware hatte ich noch nichts zu tun. Ich sag' das alles nur, um deutlich zu machen, dass mir nicht gerade gestern mein erster PC geschenkt wurde.
Nun zu den Fragen und Aussagen.
Flashspeicher und flashen:
Theoretisch sollte es möglich sein, sowohl die "system"-Partition als auch die SD-Karte per LUKS zu verschlüsseln. Ich hab' eine initrd für meine Rechner daheim geschrieben, das cryptsetup verwendet, um die LUKS-verschlüsselten Festplatten zuentsperren. Man müsste doch einfach den Code mit dem der Android-initrd mischen. Die Frage ist nur, wie man das Passwort eingibt. Lösungen wären z.B. eine USB-Tastatur oder einfach ein USB-Stick, auf dem der Schlüssel unverschlüsselt als Datei drauf liegt. Das würde zumindest beim Verlust des Handys alleine schützen.
SD-Karte:
Baut man die initrd so um, dass sie nicht die "system"-Partition verwenden sondern die SD-Karte, so kann man auch von der SD-Karte booten.
Gentoo (anderes Linux):
Es sollte möglich sein, ein komplettes Gentoo auf dem Gerät zu installieren, vorausgesetzt, man installiert sich vorcompilierte Pakete, die man sich auf einem normalen PC cross-compiliert hat. Das einzige Problem ist die Grafik. Es gibt keinen Xorg-Treiber. Android macht alles über den Standard-Linux-Framebuffer. Könnte man dann nicht den fbdev Treiber von Xorg verwenden? 3D-Unterstützung und wahrscheinlich sogar 2D-Unterstützung wird es allerdings damit eher nicht geben.
Ich hab' recht viele Fragen und hoffe, dass manche beantwortet werden können. Leider gibt es nicht wirklich viel detailierte Information zu Android. Meistens ist sie für Menschen, die ihr Handy einfach nur verwenden wollen und nicht wirklich an allem interessiert sind. Die wirklichen "low-level"-Informationen sind dazu noch weit verstreut und oft sehr speziell für ein Handy (zugegeben, manche meiner Fragen zielen auch auf das neue Galaxy S2 ab). Neben Fragen gibt es auch Aussagen. Wäre schön, wenn ihr mir die bestätigen oder berichtigen würdet.
Vielleicht wäre es auch für andere interessant, dann alles in einer Art FAQ oder so aufzubehalten. Die bisher beste Information hab' ich im Wiki des Cyanogen-Mods gefunden.
Kurz zu mir: Ich verwendet seit 10 Jahren Linux (seit ein paar Jahren Gentoo). Ich kann C, C++, Python, x86-Assembler. Ich bin derzeit Netzwerkadmin. Ich hab' Ahnung von hardware-naher Programmierung und zumindest schon einen Bootloader für x86 geschrieben. Mit echter embedded-Hardware hatte ich noch nichts zu tun. Ich sag' das alles nur, um deutlich zu machen, dass mir nicht gerade gestern mein erster PC geschenkt wurde.
Nun zu den Fragen und Aussagen.
Flashspeicher und flashen:
- Die "Partitionierung" des Flashspeichers ist fix, in der Art, als dass die Aufzeichnung der Partitionierung nicht selbst Teil des Flashspeichers ist, wie es etwa der Fall bei Standard-DOS-Partitionen auf Festplatten wäre. Sie ist hardcoded im Kernel, IPL und/oder SPL enthalten.
- Der Flashspeicher muss nicht zwangsläuft wegen der Hardware Partitionierung werden, sondern nur, damit die Software alles findet (z.B. der SPL den kernel und die initrd).
- Die "boot"-Partition enthält ein Blob, das aus einem Header, dem bzImage des Kernels und einer initrd besteht.
- Die "system"-Partition ist ein normales Dateisystem wie z.B. ext3. Man könnte sie mit dd kopieren und dann mit -o loop mounten.
- Die "recovery"-Partition ist auch ein normales Dateisystem wie z.B. ext3.
- Was genau ist verschlüsselt, wenn man von einem "crypted" Bootloader spricht?
- Ein signierter Bootloader ist kein signierter Bootloader, sondern ein Bootloader,
- der nicht geflasht werden kann,
- im Blob der "boot"-Partition eine Signatur über das bzImage des Kernels und der initrd erwartet
- und diese mit einem hardcoded Public-Key überprüft.
- Wo findet man IPL und SPL?
- Heimdall ist eine Open-Source-Implementierung des USB-Protokolls, das auch Odin verwendet, um das Gerät zu flashen.
- Mit welcher "Software" spricht Heimdall auf dem Gerät (IPL, SPL, ...)?
- Um ein Gerät un-flashbar zu machen (zu "bricken") muss man den IPL und/oder SPL kaputt flashen. Sowohl kaputte kernel, initrds und "system"-Partitionen können immer wieder geflasht werden.
- Wieso gibt man Heimdall nur den Kernel an und nicht das Blob für die "boot"-Partition?
- Der Kernel, die initrd, die nativen Binaries der "system"-Partition und manche APK-Pakete sind zusammen Android.
- Welche Teile von Android sind Closed Source (vor allem bei den Treibern oder anderen Teile des Kernels).
- Gibt es ein "originales" Android? Ist es auf android.org zu finden? Wenn ja, welches ist es dort (es gibt sehr viele Branches im git)?
- Was fügen die Handy-Hersteller (zum Kernel) hinzu? Was wurde für das Galaxy S2 im speziellen hinzugefügt?
- Wo findet man den Source Code zu einem bestimmen Handy (z.B. des Galaxy S2)?
- Was enthält dieser "Source Code" alles? Nur den Kernel oder mehr?
- Man muss den kernel, die initrd, die nativen Binaries der "system"-Partition und die in Java geschriebenen APK-Pakete bauen.
- Welche Build-Umgebung braucht man für den Kernel?
- Welche Build-Umgebung braucht man für die initrd und die nativen Binaries?
- Welche Build-Umgebung braucht man für die APK-Pakete?
- Ist irgendein Teil der Build-Umgebungen Closed Source?
- Ein Handy (z.B. das Galaxy S2) bootet wie folgend:
- Das Gerät wird eingeschalten, die CPU initialisiert sich selbst.
- Die CPU startet den IPL (Initial Program Loader).
- Der IPL initialisiert die Hardware (Speicher z.B.) und startet den SPL (Second Program Loader).
- Der SPL läd aus der "boot"-Partition kernel und initrd in den RAM und startet den kernel.
- Der Kernel findet irgendwie die initrd, entpacket sie und startet sie.
- Die initrd startet das System aus der "system"-Partition des Flashspeichers.
- Ist der IPL vergleichbar mit dem BIOS auf x86-Maschine?
- Ist der SPL vergleichbar mit GRUB?
- Ist das bzImage ein Standard-bzImage für ARM und mit LZMA komprimiert?
- Ist die initrd ein Standard-CPIO-Image mit LZMA komprimiert?
- Sind IPL und SPL Teil von Android? Ist eines davon uboot?
- Welche Daten auf dem Handy sind verschlüsselt?
- Laut Dokmentation von ARM, sollten die ARM-CPUs hardware-beschleunigte Verschlüsselung unterstützen. Stimmt das für das Galaxy S2?
Theoretisch sollte es möglich sein, sowohl die "system"-Partition als auch die SD-Karte per LUKS zu verschlüsseln. Ich hab' eine initrd für meine Rechner daheim geschrieben, das cryptsetup verwendet, um die LUKS-verschlüsselten Festplatten zuentsperren. Man müsste doch einfach den Code mit dem der Android-initrd mischen. Die Frage ist nur, wie man das Passwort eingibt. Lösungen wären z.B. eine USB-Tastatur oder einfach ein USB-Stick, auf dem der Schlüssel unverschlüsselt als Datei drauf liegt. Das würde zumindest beim Verlust des Handys alleine schützen.
SD-Karte:
Baut man die initrd so um, dass sie nicht die "system"-Partition verwenden sondern die SD-Karte, so kann man auch von der SD-Karte booten.
Gentoo (anderes Linux):
Es sollte möglich sein, ein komplettes Gentoo auf dem Gerät zu installieren, vorausgesetzt, man installiert sich vorcompilierte Pakete, die man sich auf einem normalen PC cross-compiliert hat. Das einzige Problem ist die Grafik. Es gibt keinen Xorg-Treiber. Android macht alles über den Standard-Linux-Framebuffer. Könnte man dann nicht den fbdev Treiber von Xorg verwenden? 3D-Unterstützung und wahrscheinlich sogar 2D-Unterstützung wird es allerdings damit eher nicht geben.