1. Nimm jetzt an unserem 2. ADVENT-Gewinnspiel teil - Alle Informationen findest Du hier!

Allgemeine Fragen zu Android

Dieses Thema im Forum "Android OS Entwicklung / Customize" wurde erstellt von mm9, 23.05.2011.

  1. mm9, 23.05.2011 #1
    mm9

    mm9 Threadstarter Neuer Benutzer

    Beiträge:
    5
    Erhaltene Danke:
    2
    Registriert seit:
    23.05.2011
    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.
     
    EarMaster und Schiwi haben sich bedankt.
  2. mm9, 25.05.2011 #2
    mm9

    mm9 Threadstarter Neuer Benutzer

    Beiträge:
    5
    Erhaltene Danke:
    2
    Registriert seit:
    23.05.2011
    Hab' ich etwas falsch gemacht bei meinem Beitrag?
     
  3. ramdroid, 26.05.2011 #3
    ramdroid

    ramdroid Android-Experte

    Beiträge:
    644
    Erhaltene Danke:
    89
    Registriert seit:
    20.10.2010
    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.
     
  4. mm9, 26.05.2011 #4
    mm9

    mm9 Threadstarter Neuer Benutzer

    Beiträge:
    5
    Erhaltene Danke:
    2
    Registriert seit:
    23.05.2011
    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.
     
  5. Schiwi, 05.06.2011 #5
    Schiwi

    Schiwi Junior Mitglied

    Beiträge:
    35
    Erhaltene Danke:
    4
    Registriert seit:
    20.05.2011
    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: 05.06.2011
  6. mm9, 05.06.2011 #6
    mm9

    mm9 Threadstarter Neuer Benutzer

    Beiträge:
    5
    Erhaltene Danke:
    2
    Registriert seit:
    23.05.2011
    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.
     
  7. Schiwi, 05.06.2011 #7
    Schiwi

    Schiwi Junior Mitglied

    Beiträge:
    35
    Erhaltene Danke:
    4
    Registriert seit:
    20.05.2011
  8. ramdroid, 06.06.2011 #8
    ramdroid

    ramdroid Android-Experte

    Beiträge:
    644
    Erhaltene Danke:
    89
    Registriert seit:
    20.10.2010
    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):

    http://www.android-hilfe.de/android-os-entwicklung-customize/99679-c-programm-auf-android.html

    --> Kurz zusammengefasst: besser nicht irgendeinen komischen cross compiler verwenden, sondern direkt das NDK von Google
     
    Zuletzt bearbeitet: 06.06.2011
  9. ramdroid, 06.06.2011 #9
    ramdroid

    ramdroid Android-Experte

    Beiträge:
    644
    Erhaltene Danke:
    89
    Registriert seit:
    20.10.2010
    Benutze aktuell nur GoogleTalk und Facebook chat...
     
  10. Schiwi, 06.06.2011 #10
    Schiwi

    Schiwi Junior Mitglied

    Beiträge:
    35
    Erhaltene Danke:
    4
    Registriert seit:
    20.05.2011
    Deswegen sagte ich ja auch
    ;)

    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
     
  11. mm9

    mm9 Threadstarter Neuer Benutzer

    Beiträge:
    5
    Erhaltene Danke:
    2
    Registriert seit:
    23.05.2011
    @ramdroid
    GoogleTalk is doch XMPP, soweit ich weiß.
     

Diese Seite empfehlen