Cubietruck (Cubieboard 3)

green Tux Im September 2012 hat das Chinesische Unternehmen CubieTech Limited, Inc. mit der Cubiboard Serie ein, wie ich finde, recht erfolgreiches Open-Source Projekt initiiert und zeigt sehr deutlich, dass in den Werkhallen und Entwicklungsbüros von Shenzhen bei weitem nicht mehr nur kopiert wird. Sämtliche Wertschöpfungen entstammen der dort ansässigen Indistrie, begonnen bei der CPU von Allwinner Technology Co., Ltd. weiter über die Boards, Zubehör und Gehäuse sowie deren weltweiter Vertrieb (wie z.B. bei Pollin) bis hin zur mehr oder weniger direkten Unterstützung der Softwareentwicklung im Rahmen des Community Projekts SUNXI Linux.

Ein Wermutstropfen bleibt. Wie auf der Wiki-Seite von SUNXI Linux zu lesen ist, wird dem CPU Hersteller die wiederholte Verletzung der GPL vorgeworfen. Ich will das an dieser Stelle ohne weiteren Kommentar nur erwähnt haben.

Im Ergebnis erhält man mit dem Cubietruck ein mit maximal 10 Watt operierendes Computersystem in die Hand, was leistungsfähig genug ist, einen bestehenden PC auf Basis eines Intel Celeron oder Atom N270 abzulösen.

Hier verweise ich gerne auf die deutsche Wikipedia, das SUNXI Linux Wiki und das Cubiboard Wiki sowie den Cubiboard Blog. Dort gibt es mehr Detailinformationen zu entdecken, als ich hier wiedergeben will und kann. An dieser Stelle werde ich die für mich interessantesten Punkte heraus greifen.

Hardware

  • CPU zzgl. Peripherie, SoC: Allwinner A20 (sun7i)
    • Dual-Core ARM Cortex-A7 mit 1 GHz
    • ARM Mali400 MP2 GPU (OpenGL ES 2.0)
    • Cedar Engine VPU (H.264 2160P und High Profile 1080P@30fps)
    • LCD/VGA/HDMI 1.4 mit TV I/O
    • 10/100/1000 Ethernet Controller
    • USB 1.1 und 2.0 Host Controller
    • SD/MMC Interface
    • SATA II Interface
  • 2 GB DDR3 SDRAM GT GT8UB512M8EN oder Hynix H5TQ4G63AFR mit 480 MHz
  • 8 GB NAND
  • 1x 1000BASE-T Ethernet Transceiver (Realtek RTL8211E)
  • 1x WiFi 802.11 b/g/n und Bluetooth (Ampak AP6210 Modul, Broadcom BCM43xx)
  • 2x USB 2.0 Host
  • 1x USB 2.0 OTG
  • angeschlossene Komponenten:
    • 1x externe SDHC Card Class 10 mit 8 GB
    • 1x interne HDD Hitachi HTS54502 mit 250 GB

Software

Auf den oben genannten Wiki Seiten findet man viele Verweise zu vorgefertigten Images diverser Standard Linux Distributionen wie Debian, Ubuntu und Fedora Core. Auch Android sollte nicht unerwähnt bleiben und für die Freunde von BSD gibt es ebenso Möglichkeiten. Für mich von Interesse ist ausschließlich Debian und Ubuntu. Das Debian Projekt bietet eine von mir nicht weiter verfolgte Anleitung zur Installation auf Allwinner basierender Hardware.

Mein System habe ich mit Hilfe des ARMbian Projekts mit einem aktuellen Ubuntu LTS bestückt und kann es aktuell halten. Dazu mehr weiter unten.

Durch die Anstrengungen der Community rund um SUNXI Linux werden so gut wie alle Allwinner Plattformen direkt aus den Hauptentwicklungszweigen heraus unterstützt, das sind:

Cubietruck (Cubieboard 3) Der Cubietruck kommt von Haus aus nicht als einfaches loses Board daher, sondern punktet schon mit einem einfachen aus Plexiglas hergestellten „Primitivgehäuse“. Darin findet nicht nur das Board selbst sondern auch die SATA Festplatte und ein optionaler Akku genügend Platz für eine feste Montage. Damit bleiben alle Komponenten in Form eines kleinen Stapels fest verbunden und können nicht bei laufendem Betrieb auseinander gezogen werden. Ohne weitere Schutzmaßnahmen ist aber vom Einsatz eines solchen Aufbaus im Alltagsbetrieb abzuraten, es gibt keinen Schutz vor Staub oder Dreck.

Für den Cubietruck werden zwei verschiedenen Gehäuse angeboten, eins aus Kunststoff und eins aus Metall, genauer aus schwarz lackiertem Alu-Gussprofil. In meinem Aufbau kommt letzteres zum Einsatz. Es soll schließlich als ein Server im Dauerbetrieb für lange Zeit unbeobachtet seinen Dienst verrichten.

Alle Komponenten bekommt man, zumindest im deutschsprachigen Raum, direkt bei Pollin Electronic zu kaufen. Hier die Liste meiner Komponenten:

Pollin Nr. Beschreibung Preis
Verweise
Basishardware 702 237 Cubieboard 3 (Cubietruck) Kit, A20, 2 GB, 8 GB, WLAN, BT, SATA 99,95 €
Beschreibung (Pollin)
Produktdatenblatt (Pollin)
Schaltplan
Allwinner A20 Datasheet, V1.1 (21. März 2013)
Allwinner A20 User Manual, V1.0 (18. Februar 2013)
AMPAK AP6210 WiFi 802.11b/g/n + BT4.0 SIP Module Specifiaction, V1.2 (26. Dezember 2012)
Gehäuse 702 305 Cubietruck Aluminium-Gehäuse 17,95 €
AutoCad Zeichnung
Montageanleitung
Bootmedium 722 867 MicroSDHC Card VERBATIM 44012, 8 GB 4,75 €
gesamt: 122,65 €
Datenspeicher Bestand Hitachi HTS54502, 250 GB 50,00 €

Dieser Zusammenbau hat von mir nun nachträglich noch folgende Erweiterungen bekommen.

Serielle Konsole

Das Gehäuse ist so konstruiert, dass man es gut im heimischen Wohnzimmer als Medienplayer an einem großen LED Monitor mit Funktastatur über USB betreiben kann. Für den Einsatz als Server ohne Monitor und ohne Tastatur fehlt schlicht und ergreifend der Zugang an die serielle Schnittstelle. An dieser wird in solchen Einsatzszenarien die Linux Konsole und ein Login angeboten, um in Notfällen über ein Terminal direkt vor Ort auf den Server zuzugreifen. Auch für die Installation neuer Systemsoftware oder den Service ist dieser Zugang unabdingbar.

Auf dem Cubietruck wird die Linux Konsole fest über die erste serielle Schnittstelle an Steckverbinder CN7 (direkt hinter den USB Buchsen) angeboten. Im Shop von Cupietech wird auch ein passendes USB UART Kabel angeboten – im Prinzip ein gewöhnliches USB zu RS232 Kabel für 3.3V TTL Pegel mit einzeln steckbaren Anschlüssen, wie es in jedem gut sortierten Elektronikladen angeboten wird. Problem bei diesem Kabel ist, dass es nicht ohne weiteres aus einem geschlossenen Gehäuse herausgeführt werden kann.

Für solche Fälle bietet DELOCK oder FTDI Chip ein solches Kabel mit einem 3,5mm Audio Klinkenstecker an. In der Gehäusewand muss an geeigneter Stelle eine Klinkenbuchse eingebaut werden und die drei Leitungen der serielle Schnittstelle im Gerät an die richtige Pfostenleiste angeschlossen werden. Das Ergebnis könnte so aussehen:

Serielle Konsole (innen) Serielle Konsole (außen)

Auf- und Einbau

Für die Klinkenbuchse habe ich aus Gründen der Langlebigkeit und kompakten Bauweise das etwas teurere Exemplar KLB 4 von Lumberg gewählt. Hinter der Gehäusewand beträgt der Durchmesser dieser Buchse nur 8 mm und der Durchbruch 6 mm. Ferner sind die Kontakte in einem geschlossenen Kunststoffgehäuse untergebracht.

Nach folgendem Schaltplan werden die drei Kontakte der Klinkenbuchse über eine angewinkelte Buchsenleiste mit 4×1 Kontakten im Rastermaß 2,54mm steckbar an die Pfostenleiste CN7 auf dem Cubietruck verbunden. Danach wird in die Rückwand des Cubietruck Gehäuses an geeigneter Stelle ein Loch mit 6mm Durchmesser gebohrt und die Klinkenbuchse mit der beiliegenden Überwurfmutter befestigt. Ich habe mich über den freien Raum direkt über der HDMI Buchse des Cubietruck entschieden.

Serielle Konsole (Schaltplan und Anschlussdaten)

FIXME Achtung: Wer die beiliegenden Blenden mit den Beschriftungen aufkleben will, der muss sich noch Gedanken über einen Durchbruch auch in dieser Blende machen. Ich selber nutze die Blenden nicht, da sie die Schrauben verdecken. Jedes mal, wenn man das Gehäuse öffnen will, müssten die Blenden abgelöst und beim Zusammenbau neu aufgeklebt werden. Das ist nicht servicefreundlich.

Materialliste

Hersteller Artikel Bezeichnung Farnell (element14) Reichelt
Bestellnummer Preis Bestellnummer Preis
Lumberg KLB 4 Klinkeneinbaukupplung nach JIS C 6560 JC35J3A,
3,5 mm, 3-polig/stereo, mit Lötaugen,
für Rückseitenmontage, Kunststoffgehäuse
Datenblatt, 3D-Ansicht, STEP-Daten
120-0144 1,35 € LUM KLB 4 0,86 €
DELOCK 83114 Konverter USB 2.0 Stecker → Seriell-TTL
3,5 mm Klinke 1,8 m (3,3 V)
Datenblatt, Zeichnung
DELOCK 83114 18,95 €
FTDI Chip TTL-232R-3V3-AJ USB zu TTL Seriell Kabel (3,3V) – 1,8m
3,5mm Audio Klinke
Datenblatt
174-0363 19,80 €

Igor Pecovnik, der Kopf hinter dem Projekt ARMbian, stellt seit Dezember 2013 für verschiedene ARM Plattformen fertig nutzbare Debian und Ubuntu Sytemimages bereit. Ebenso ist seine gesamte Buildumgebung bei GitHub verfügbar (meiner Erfahrung nach, fast tagesaktuell). Die Dokumentation ist ausgewogen und geht an entscheidenden Stellen auch etwas mehr in die Tiefe. Für mich ein ansprechender Projektstatus, ums sich etwas mehr damit auseinander zu setzen und die Nutzung im Alltag eines Administrators zu prüfen.

Letzte Veröffentlichung v5.24

Beginnen will ich mit einer kurzen Anleitung zum Installieren der letzten Veröffentlichung für den Cubietruck. Da es sich um ein Serversystem handeln soll, habe ich die „Legacy“ Version ignoriert. Eine 3D/2D Grafikbeschleunigung oder sogar eine GUI ist nicht erforderlich. Der Vorteil ist dann die Nutzung eines aktuellen 4.x Linux Kernel.

Zum Vorbereiten der SD Karte wird ein Linux Host benötigt. Alle weiteren Administrationsschritte werden dann auf dem Cubietruck selbst ausgeführt.

Linux Host:

  1. auf die ARMbian Seite für den Cubietruck gehen: http://www.armbian.com/cubietruck/
  2. unter Mainline 4.9.5 das SD-Kartenimage für einen Ubuntu Xenial Server herunterladen und danach entpacken (pro forma 7zip noch installieren):
    cd /tmp
    sudo apt-get install p7zip
    wget http://image.armbian.com/Armbian_5.20_Cubietruck_Ubuntu_xenial_4.7.3.7z
    7z x Armbian_5.20_Cubietruck_Ubuntu_xenial_4.7.3.7z
  3. entpackte Daten verifizieren, siehe auch How to check download authenticity? (pro forma gnupg noch installieren):
    cd /tmp
    sudo apt-get install gnupg
    # Igor Pecovniks öffentlichen Schlüssel vom MIT Server herunter laden
    gpg --keyserver pgp.mit.edu --recv-key 9F0E78D5
    
    # Die Signatur des RAW Images verifizieren
    gpg --verify Armbian_5.20_Cubietruck_Ubuntu_xenial_4.7.3.img.asc
    
    # ordentliche Antwort
    gpg: Signature made Thu Sep 15 02:43:04 2016 CEST using RSA key ID 9F0E78D5
    gpg: Good signature from "Igor Pecovnik (Ljubljana, Slovenia) <igor.++++++++++++@gmail.com>"
    
    # falsche Antwort -- kein  originales Armbian Image!
    gpg: Signature made Sun 03 Jan 2016 11:46:25 AM CET using RSA key ID 9F0E78D5
    gpg: BAD signature from "Igor Pecovnik (Ljubljana, Slovenia) <igor.++++++++++++@gmail.com>"
  4. eine mindestens 2GB große SD Karte über einen geeigneten Card Reader anschließen
  5. den richtigen Namen des zugehörigen Blockgeräts der SD Karte ermitteln (pro forma util-linux noch installieren):
    cd /tmp
    sudo apt-get install util-linux
    lsblk

    … ergibt bei mir (nur ein Auszug):

    NAME                               MAJ:MIN RM   SIZE RO TYPE   MOUNTPOINT
    sdg                                  8:96   1   3,7G  0 disk   
    └─sdg1                               8:97   1   3,7G  0 part   /media/user/EC71-196C

    … und der Name lautet dann also /dev/sdg

  6. wie bei mir hier im Beispiel, alle eventuell ein gehangenen Dateisysteme dieser SD Karte aushängen:
    sudo umount /dev/sdg*

    … und noch mal prüfen:

    lsblk

    … ergibt:

    NAME                               MAJ:MIN RM   SIZE RO TYPE   MOUNTPOINT
    sdg                                  8:96   1   3,7G  0 disk   
    └─sdg1                               8:97   1   3,7G  0 part   
  7. RAW Image auf das oben ermittelte Blockgerät (also die SD Karte) kopieren, siehe auch How to prepare SD card? (pro forma coreutils und pv noch installieren):
    cd /tmp
    sudo apt-get install coreutils pv
    pv -ptebacN Armbian.img < Armbian_5.24_Cubietruck_Ubuntu_xenial_next_4.9.5.img | \
       sudo dd of=/dev/sdg oflag=sync conv=notrunc,fsync bs=1M

    … verläuft mit:

    Armbian.img:  154MB 0:00:19 [8,07MB/s] [==>                               ] 14% ETA 0:01:55

    … endet mit:

    Armbian.img: 1,21GB 0:02:48 [7,38MB/s] [=================================>] 100%            
    0+9936 Datensätze ein
    0+9936 Datensätze aus
    1302331392 Bytes (1,3 GB) kopiert, 168,533 s, 7,7 MB/s

Cubietruck:

  1. die wie oben beschrieben präparierte SD Karte in das Cubietruck einstecken
  2. die serielle Konsole mit dem Linux Host verbinden und ein geeignetes Terminalprogramm damit öffnen (8N1@11500: 8 bit, keine Parität, 1 Stopp Bit, 11500 Baud)
  3. Cubietruck einschalten und Konsole beobachten:
    U-Boot SPL 2017.01-armbian (Jan 20 2017 - 22:26:32)
    DRAM: 2048 MiB
    CPU: 912000000Hz, AXI/AHB/APB: 3/2/2
    Trying to boot from MMC1
    
    ...
    ...
    Found U-Boot script /boot/boot.scr
    2352 bytes read in 211 ms (10.7 KiB/s)
    ## Executing script at 43100000
    ...
    ## Loading init Ramdisk from Legacy Image at 43300000 ...
    ## Flattened Device Tree blob at 43000000
    
    Starting kernel ...
    
    Uncompressing Linux... done, booting the kernel.
    Loading, please wait...
    
    Ubuntu 16.04.1 LTS cubietruck ttyS0
    
    cubietruck login: _
  4. als root mit Passwort 1234 anmelden, und sofort ein eigenes sicheres Passwort vergeben:
    cubietruck login: _                                                        <-- root
    Password: _                                                                <-- 1234
    You are required to change your password immediately (root enforced)
    Changing password for root.
    (current) UNIX password: _                                                 <-- 1234
    Enter new UNIX password: _                                                 <-- wahnsinniggeheim
    Retype new UNIX password: _
  5. neuen normalen Benutzer anlegen (Aufforderung erfolgt automatisch direkt im Anschluss):
    Creating a new user account. Press <Ctrl-C> to abort
    
    Please provide a username (eg. your forename):                             <-- user
    Adding user `user' ...
    Adding new group `user' (1000) ...
    Adding new user `user' (1000) with group `user' ...
    Creating home directory `/home/user' ...
    Copying files from `/etc/skel' ...
    Enter new UNIX password: _                                                 <-- geheim
    Retype new UNIX password: _                                                <-- geheim
    passwd: password updated successfully
    Changing the user information for user
    Enter the new value, or press ENTER for the default
    	Full Name []: _                                                    <-- Local User
    	Room Number []: _
    	Work Phone []: _
    	Home Phone []: _
    	Other []: _
    Is the information correct? [Y/n] _                                        <-- y
    
    Dear Local User, your account user has been created and is sudo enabled.
    Please use this account for your daily work from now on.
    
    root@cubietruck:~# _
  6. umgehend abmelden und mit dem neuen user Konto wieder anmelden:
    root@cubietruck:~# _                                                       <-- logout
    
    Ubuntu 16.04.1 LTS cubietruck ttyS0
    
    cubietruck login: _                                                        <-- user
    Password: _                                                                <-- geheim

    FERTIG:

      ____      _     _      _                   _    
     / ___|   _| |__ (_) ___| |_ _ __ _   _  ___| | __
    | |  | | | | '_ \| |/ _ \ __| '__| | | |/ __| |/ /
    | |__| |_| | |_) | |  __/ |_| |  | |_| | (__|   < 
     \____\__,_|_.__/|_|\___|\__|_|   \__,_|\___|_|\_\
                                                      
    
    Welcome to ARMBIAN 5.24 stable Ubuntu 16.04.1 LTS 4.9.5-sunxi   
    System load:   0.11            	Up time:       7 min		
    Memory usage:  1 % of 2014Mb 	IP:            192.168.10.154
    CPU temp:      30°C           	HDD temp:      26°C           	
    Usage of /:    15% of 7.0G   	
    
    
    [ 17 updates to install: apt-get upgrade ]
    
    To run a command as administrator (user "root"), use "sudo <command>".
    See "man sudo_root" for details.
    
    user@cubietruck:~$ _
  7. Ubuntu Systempakete erneuern:
    user@cubietruck:~$ sudo apt-get update
    [sudo] password for user: _                                                <-- geheim
    
    ...
    ...
    user@cubietruck:~$ sudo apt-get dist-upgrade
    
    ...
    ...
    Do you want to continue? [Y/n] _                                           <-- Y

Selber bauen

Die folgenden Schritte sollen nur eine minimale Hilfe für den Bau eines eigenen ARMbian Images sein und exemplarisch das Grundprinzip darstellen. ARMbian ist gegenwärtig so dynamisch, dass sich die Ausschriften oder Ergebnisse schon in wenigen Tagen anders darstellen, als hier notiert. Aktuelle Informationen können und sollten dem ARMbian Developer Guide entnommen werden.

Auf einem aktuelle Ubuntu Host mit bereits installiertem Git sind folgende Schritte notwendig:

  1. ein Build Verzeichnis erstellen:
    mkdir build-stable
    cd build-stable
  2. ARMbian Build Library von GitHub holen und auf letzte Releas stellen:
    git clone https://github.com/igorpecovnik/lib.git lib

    … verläuft mit:

    Cloning into 'lib'...
    remote: Counting objects: 13999, done.
    remote: Compressing objects: 100% (124/124), done.
    remote: Total 13999 (delta 54), reused 0 (delta 0), pack-reused 13873
    Receiving objects: 100% (13999/13999), 167.28 MiB | 965.00 KiB/s, done.
    Resolving deltas: 100% (8753/8753), done.

    … lokaler Branch vom Tag:

    cd lib; git checkout -b build-v2016.09 v2016.09; cd -
  3. das Compile Script in das eigene Build Verzeichnis kopieren und die Kontrolle auf aktuelle Veränderungen abschalten:
    cp lib/compile.sh .
    touch .ignore_changes
  4. das Compile Script mit entsprechenden Parametern aufrufen, um ein Ubuntu Xenial (16.04) mit dem aktuellen sunxi-next Kernel für den Cubietruck zu bauen:
    ./compile.sh BOARD=cubietruck \
                 BRANCH=next \
                 RELEASE=xenial \
                 KERNEL_ONLY=no \
                 BUILD_DESKTOP=no \
                 ROOTFS_TYPE=ext4 \
                 COMPRESS_OUTPUTIMAGE=yes \
                 SEVENZIP=yes \
                 PROGRESS_DISPLAY=plain