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:

nandc_sda2

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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Name *

8 + 16 =