Trotz durchaus respektabler Geschwindigkeit, macht der Cubietruck aus meiner Sicht unter Android keine gute Figur. Ich habe einen Cubietruck als Arbeits-PC für meinen Sohn gekauft und bin an sich begeistert – wären da nicht die ständigen kleinen Hänger, das Stottern z.B. bei der Maus-App und der sehr knappe Speicher. Dies liegt am knappen und sehr langsamen NAND-Speicher des Cubietrucks.
Selbst wenn man Android auf einer SD-Karte installiert, löst sich das Speicherplatz-Problem nicht wirklich. Die „data“-Partition ist nur 1GB groß und APP2SD hilft auch nur beschränkt weiter, weil die „SD-Karte“ auf die NAND-Partition „nandk“ gemappt wird. Es ist also Zeit, Hand an den Cubietruck zu legen.
Eingebaut ist ja bereits die Möglichkeit die System-Partition auf eine SATA-Festplatte auszulagern und damit die gefühlte Geschwindigkeit des Cubietruck erheblich zu verbessern, wenn da nicht das Speicherplatzproblem wäre. Meine Web-Recherchen haben gezeigt, dass es nicht vorgesehen ist, die „data“- oder „sdcard“-Partition auch auf die SATA-Festplatte zu legen.Hier ist eine Anleitung, wie dies möglich ist, ohne sich ein eigenes Android-Image zu übersetzen. Wer keinen Linux-PC zur Hand hat, oder sich die Schritte unten ersparen möchte, beginnt mit dem fertigen Image für die Kernel-Partition und kann die Schritte 1 und 2 überspringen.
0. Vorbereitungen
Vor dem Kopieren der Data-Partition auf die SATA-Festplatte lohnt es sich zunächst via Cubie-Tools-App die System-Partition auf die SATA-Festplatte zu kopieren und das Starten von SATA zu aktivieren. Idealerweise legt man dabei gleich eine zweite Partition an, die unser Daten aufnehmen wird.
Als nächstes benötigen wir eine Root-Konsole wie z.B. den Android Terminal Emulator. Auf die Partitionen darf aus verständlichen Gründen nur als Root zugegriffen werden. Via „su“ erwerben wir Root-Rechte.
Nach dem Reboot wird via „mount“ kontrolliert, ob nun „/dev/block/sda1“ nach „/system“ eingebunden wurde. Danach können wir ein EXT4-Dateisystem auf „/dev/block/sda2“ erstellen und dieses unter „/mnt/data2“ einhängen:
mkfs.ext4 /dev/block/sda2 mkdir /mnt/data2 mount -text4 /dev/block/sda2 /mnt/data2
Nun können die Daten von der Data-Partition, die unter „/data“ eingehängt ist, nach „/mnt/data2“ kopiert werden. Anschließend sollte die neue Partition wieder ausgehängt werden:
umount /mnt/data2
1. Speichern der Kernel-Partition
Nun können wir ein Abbild der Kernel-Partition nach „/mnt/sdcard“ speichern:
su cd /mnt/sdcard dd if=/dev/block/nandc of=nandc.img bs=1M
Das extrahierte Abbild der Kernel-Partition muss nun auf einen Linux-PC übertragen werden. Anschließen benötigen wird das Programm „abootimg“ aus diesem Archiv:
ac100-abootimg-7e127fee6a3981f6b0a50ce9910267cd501e09d4.tar
Dies ist die aktuellste GIT-Version des Programmes. Die Projekt-Webseite liegt hier:
http://ac100.grandou.net/abootimg
Das Programm wird über das übliche „make“ übersetzt.
2. Modifizieren des Abbild-Datei
Nun geht es daran zu verifizieren, ob das Extrahieren der Kernel-Partition geklappt hat. „abootimg -i nandc.img“ sollte in etwa dieses Ergebnis liefern:
Android Boot Image Info: * file name = nandc * image size = 16777216 bytes (16.00 MB) page size = 2048 bytes * Boot Name = "" * kernel size = 9415940 bytes (8.98 MB) ramdisk size = 2572123 bytes (2.45 MB) * load addresses: kernel: 0x40008000 ramdisk: 0x41000000 tags: 0x40000100 * empty cmdline * id = 0x2af437be 0x75dbfc1f 0x933c6b24 0x474ae794 0xd6ba35ba 0x00000000 0x00000000 0x00000000
Falls dem so ist, können nun Kernel und Initrd extrahiert werden:
abootimg -x nandc.img
Anschließend wird die Initrd via:
mkdir -p ramdisk zcat initrd.img | ( cd ramdisk; cpio -i ) #oder abootimg-unpack-initrd initrd.img
entpackt und die enthaltene Datei „init.sda.rc“ angepasst. Hier muss beim Mount-Kommando der Verweis auf /dev/block/data durch die entsprechende Partition auf der SATA-Festplatte ersetzt werden. Mein Abschnitt für Partition 2 sieht dementsprechend so aus:
on fs # try to mount /data wait /dev/block/data mount ext4 /dev/block/sda2 /data wait noatime nosuid nodev barrier=1 setupfs /dev/block/sda2 umount /data exec /system/bin/logwrapper /system/bin/e2fsck -y /dev/block/sda2 exec /system/bin/busybox mount -t ext4 -o noatime,nosuid,nodev,barrier=1,journal_checksum,noauto_da_alloc /dev/block/sda2 /data
Anschließend kann die Initrd wieder gepackt werden:
cd ramdisk; find | sort | cpio --quiet -o -H newc ) | gzip > initrd-new.img #oder abootimg-pack-initrd
Die neu gebaute Initrd wird dann wieder in das Abbild der Kernelpartition re-integriert:
abootimg -u nandc.img -r initrd-new.img
Fertig. Nun kann die Abbilddatei wieder auf den Cubietruck übertragen werden.
3. Aktualisieren der Kernel-Partition mit der Abbild-Datei
Vorausgesetzt, die frisch erstellte Abbild-Datei ist nun nach /mnt/sdcard gespeichert worden, kann die Kernel-NAND-Partition nun aktualisiert werden. Mein fertiges Image für die Benutzung der zweiten Partition der SATA-Festplatte liegt hier:
und basiert auf der offiziellen „Android-Ultimate“ genannten Android-Version von cubieboard.org.
So wird die Datei in die Kernel-NAND-Partition geschrieben:
su cd /mnt/sdcard dd if=nandc_sda2.img if=/dev/block/nandc bs=1M
Nun kann das System via Netztrennung neu gestartet werden und sollte die zweite Partition mit voller Größe als Datenpartition verwenden. Ob dies wirklich so ist, lässt sich über das „mount“-Kommando prüfen.