Bouya

Bouya bündelt alle Experimente mit der Android Spielekonsole Ouya.

Archiv der Kategorie: Bouya

Ouya-Firmware analysieren Analysis

Während unsere selbstgebaute Firmware noch Probleme hat zu Booten, werfen wir einen Blick auf die offizielle Ouya-Firmware. Dazu laden wir die aktuelle Version herunter und entpacken die initial ramdisk:

Dort sehen wir, dass die initrd keine Kernel-Module beinhaltet. Das USB muss also anderst initialisiert werden.

Die Android boot images kann man auch direkt von der Ouya herunterladen: mmcblk0p1 respektive mmcblk0p2.

Literatur:

Linux-Kernel für die OUYA How To

Der Standard-Kernel auf der OUYA ist ein 3.1.10er (siehe bootlog). Kernel-Quellen finden sich, wie üblich, hier: https://www.kernel.org/pub/linux/kernel/. Allerdings ist der OUYA-Kernel speziell. Es fehlen Treiber für Tegra-spezifische Hardware, wie tegrafb etc. Diese finden sich in diesen Quellen: https://android.googlesource.com/kernel/tegra/.

Besonders interessant zu lesen:

Auf Nachfrage an oss-requests@nvidia.com wurden wir auf Nvidia’s Git Repos verwiesen: http://nv-tegra.nvidia.com/gitweb/. Dort finden sich auch ein Linux Kernel Repo und ein U-Boot (Bootloader) Repo.

Wir haben uns Nvidia’s Tegra-Kernel geklont und versuchen, ihn zu compilieren:

Zunächst modifizieren wir das Makefile für Cross-Compiling:

Dann laden wir eine Tegra default config und compilieren (parallel mit 32 Threads):

zImage is ready!

Die tegra_defconfig ist für den Tegra 2, die Ouya hat einen Tegra 3. Mittels make menuconfig unter System Type –> Tegra 2 ab- und Tegra 3 sowie Cardhu board anwählen. Nach kleinen Patches, lässt sich der eigens compilierte Kernel per fastboot auf der Ouya starten und präsentiert seine Ausgaben via serieller Konsole. Dieser Kernel bootet bisher nur bis zu dem Punkt, an dem in das initramfs gesprungen werden sollte. Der Tegra-EHCI-USB-Treiber ist zwar einkompiliert, USB wird aber auch im Ouya-System aus noch unbekannten Gründen erst von der initramfs initiiert, sodass USB-Sticks und die onboard USB-Netzwerkkarte SMSC9500A vorerst nicht funktionieren.

Literatur:

DebOUYAn installieren How To

Einen leeren(!) USB-Stick (oder SD-Karte+USB-Reader) nehmen, zwei Partitionen erstellen:

  • DebOUYAn (2-8GB, ext4) und
  • swap (128-512MB).

Den Stick unter /media/DebOUYAn einmounten und das vorbereitete Installations-Skript ausführen:

Danach das Konfigurations-Skript nach /media/DebOUYAn kopieren und im chroot ausführen:

Literatur:

Bouya : Per Konsole auf die Ouya #tt Session 2014/02/27

Die Ouya verfügt, wie die meisten eingebetteten Systeme, über einen seriellen Port direkt auf der Hauptplatine, über den Boot-Loader und Linux-Kernel ein-/ausgeben. Der Port läuft auf einem Pegel von 3,3 Volt (TTL-Pegel), RS232-Kabel oder USB-Adapter kann man also nicht direkt anschließen – man benötigt einen Pegelwandler. Ein Sockel ist nicht aufgelötet, lässt sich aber leicht nachrüsten bzw. man kann einfach vier Käbelchen für den Pegelwandler auf die Platine löten.
So kann es aussehen:


Bild von http://www.ouya-mods.com/
Dazu öffnet man die Ouya zunächst fachgerecht (siehe iFixit.com).
Neben dem Kühlkörper finden sich vier Löcher, die mit J3 bezeichnet sind. Dabei handelt es sich um +3.3V, TX, RX und GND.
Verbindet man diese vier Pins unter Zuhilfenahme eines 3,3V-Pegelwandler an einen seriellen Port, so kann man z.B. mithilfe von minicom oder Putty die Ausgaben des Bootloaders und des Linux-Kernel verfolgen (115200 8N1).

Eine Shell wird offenbar nicht geladen, auf Eingaben scheint die Ouya über den seriellen Port auch nicht zu reagieren. Die Ausgaben sind aber sehr hilfreich zum besseren Verständnis der Hardware und zur Konfiguration eines passenden Linux-Kernels. Nächster Schritt ist, einen Custom-Kernel zu booten und vielleicht ein Debian von USB-Stick zu booten.