Allgemeine Fragen zu Android

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:

  • 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?
Android Source:

  • 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?
Bauen:

  • 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?
Bootvorgang:

  • 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?
Verschlüsselung:

  • 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?
LUKS:
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.
 
  • Danke
Reaktionen: EarMaster und Schiwi
Hab' ich etwas falsch gemacht bei meinem Beitrag?
 
Fand ihn eigentlich sehr interessant, aber irgendwie den Überblick verloren was davon jetzt Infos, Fragen oder Vermutungen sind.

Zum Beispiel Thema bootloader. Na gut... Ich schreib einfach mal was ich darüber weiß:

1. Grundsätzlich erlaubt der Bootloader das nur Firmware-Files geflasht werden die auch vom Hersteller kommen, mit entsprechendem Regional-Code
2. Bei Google Experience Geräten (Nexus One, Nexus S, Xoom) kannst du über ein fastboot command diesen Check einfach deaktivieren
3. Bei allen anderen "retail phones" steht dir das nicht zur Verfügung, und der bootloader muss gepatcht werden
4. Motorola haben/hatten (zumindest auf früheren Geräten) einen signierten Bootloader. Das heißt ein Hardwarechip prüft ob der Bootloader mit einer gültigen Signature signiert ist, und macht somit ein Patchen unmöglich

oder das Thema Android source/builden:

auf Welcome to Android | Android Open Source gibt es eine Anleitung wie du den Android source code runterladen und compilieren kannst. Ähnliche Anleitungen gibt es auch für CyanogenMod. Vor dem Build musst du sagen für welches Gerät du bauen willst. Dafür werden von dem Gerät ein paar propietäre (closed source) Files geholt. Und du brauchst natürlich noch den Kernel, den der Hersteller zur normalerweise zur Verfügung stellt (muss er auch laut GPL). Wenn du Android für ein Gerät bauen willst das sich noch nicht im Repository befindet (im Android repository gibts nur die Nexus Geräte, bei CM z.B. gibt es gleich einen Sack voll der unterstützten Geräte HTC, Samsung, SE, etc.) dann musst du dafür eine gerätespezifische Config anlegen.

Es gibt ein build command mit dem die Firmware komplett gebaut wird. Du kannst aber auch einzelne Komponenten seperat builden (z.B. die Recovery, oder einzelne "Stock" Apps)

Ansonsten, mit Samsung Geräten kenn ich mich sonst eigentlich nicht wirklich aus.
 
Danke für deine Antwort. :)

Und ich hab mich so bemüht, das übersichtlich zu gestalten. *g* Alles mit einem Punkt davor ist eine Frage oder eine Aussage, zu der ich mich über einen Kommentar freuen würde.

Danke auch für den Link. Den werd ich mir dann morgen ansehen, da ich heute leider nicht mehr dazu komme.
 
Danke für deine Fragen, sowas interessiert mich auch brennend
Was ich bisher zusammengetragen habe:

Das Dateisystem ist momentan noch YAFFS NAND-Flash TerritorioScuola Verbesserte Wiki Deutsch , wenn du mal ein NANDROID Backup gemacht hast, kannst du die files von system.img und data.img mit diesen tools entpacken
yaffs2utils - Utilities to create/extract a yaffs2 image - Google Project Hosting
unyaffs - unyaffs is a program to extract files from a yaffs image - Google Project Hosting

Für die boot.img gibts in den Debian/Ubuntuquellen abootimg, mit dem kann man die boot.img schön bearbeiten
Und ja, die ramdisk ist ein gzip cpio file
HOWTO: Unpack, Edit, and Re-Pack Boot Images - Android Wiki


Bei den restlichen fragen bin ich momentan auch noch etwas überfragt ^^

edit: Noch n interessanten link gefunden
http://jiggawatt.org/badc0de/android/index.html
 
Zuletzt bearbeitet:
Danke für die vielen Links. Ich muss warten, bis mein neues Handy endlich ankommt. Es dauert aber wohl noch mindestens zwei Wochen. :-(

Inzwischen versuch' ich, C-Code für die ARM-Architektur zu compilieren. Für Gentoo gibt es ein Programm namens crossdev, das dabei anscheinend helfen soll. Für andere Distributionen gibt es sicher etwas ähnliches.

Ob es wohl möglich ist, die anderen Android Pakete zur uClibc zu linken? Vor allem die Java-VM. Mein erster Schritt wird wohl ein eigenes recovery-Image sein. Ich denke mal, dass ich damit am wenigsten kaputt machen kann.

@Schiwi und ramdroid
Verwendet ihr XMPP/Jabber? Meine ID wäre mm9@abox.el1t3.org.
 
Schiwi schrieb:

YAFFS ist für Android inzwischen veraltet.... mit dem Nexus S (bzw. Gingerbread) wurde das EXT4 für Android eingeführt, das auf kurz oder lang das YAFFS ablösen soll/wird. EXT4 eigent sich vor allem für bessere Performance bei Verwendung von multi-core CPUs.

Was Samsung angeht, soweit ich weiß haben die (im Gegensatz zu den meisten anderen Hersteller) NICHT yaffs verwendet, sondern ein eigenes propietäres Dateisystem. Auf aktuellen Geräten ist meines Wissens nach jetzt aber auch EXT4 in Verwendung...

Was nativen C code unter Android angeht, verweise ich gerne auf diesen Thread hier (vor allem die letzten 4 Posts):

https://www.android-hilfe.de/forum/...ustomize.23/c-programm-auf-android.99679.html

--> Kurz zusammengefasst: besser nicht irgendeinen komischen cross compiler verwenden, sondern direkt das NDK von Google
 
Zuletzt bearbeitet:
ramdroid schrieb:
YAFFS ist für Android inzwischen veraltet.... mit dem Nexus S (bzw. Gingerbread) wurde das EXT4 für Android eingeführt, das auf kurz oder lang das YAFFS ablösen soll/wird. EXT4 eigent sich vor allem für bessere Performance bei Verwendung von multi-core CPUs.

Deswegen sagte ich ja auch
ist momentan noch YAFFS
;)

Leider hat nicht jeder Hersteller die Updatepolitik von Google und seinem Nexus, bei meinem 2.3.4 Leak ist z.b. noch YAFFS2 drauf. Bei den meisten wird sich das anscheinend auch nicht so schnell ändern, auch wenns schade ist
 
@ramdroid
GoogleTalk is doch XMPP, soweit ich weiß.
 

Ähnliche Themen

Slinthorax
  • Slinthorax
Antworten
5
Aufrufe
1.819
Kosake77
Kosake77
O
Antworten
10
Aufrufe
2.739
BOotnoOB
BOotnoOB
WWolf
Antworten
1
Aufrufe
1.259
Andy
Andy
Zurück
Oben Unten