Cubietruck picture with Tux

Auf dieser Seite stelle ich in unregelmäßigen Abständen meine Cubietruck Mainline-Kernels in binärer Form bereit. Die Mainline-Kernels sind für den stabilen und schnellen Betrieb des Cubietruck als Server um einiges besser geeignet, als der vom Android-Port stammende 3.4er Kernel, der zu vielen für den Cubietruck passenden Distributionen mitgeliefert wird. Mein Hauptfokus liegt auf der ersten Version des Cubietrucks mit Allwinner A20 Chipset, die für der Servereinsatz mit Abstand am besten geeignet ist. Der Kernel sollte auch mit anderen Embedded-Boards basierend auf den Allwinner-Prozessoren kompatibel sein, ich teste jedoch nur noch mit dem Cubietruck, da ich meinen Banana-PI kürzlich verkauft habe.

Die Quellen, Konfigurationsdatei und nötigen Patches um den Kernel selbst zu übersetzen befinden sich jeweils mit im Kernel-Archiv. Über positives bzw. konstruktives Feedback freue ich mich immer.

Achtung: Die bereitgestellten Boot-Skripte gehen von einer EXT2-Bootpartition aus.

Wichtiger Hinweis: Der Cortex A7-Prozessorkern der Allwinner A20-Serie ist nicht von den Prozessorlücken Spectre und Meltdown betroffen.

aktueller stabiler Kernel mit Langzeitunterstützung 4.15.12

  • Die Audioausgabe wurde durch die Unterstützung der Audio-PLL verbessert
  • HDMI-Autodetect, HDMI-CEC und DRM Unterstützung
    Wichtig: Wenn kein Display am HDMI-Ausgang angeschlossen ist, sollte man die folgenden Module in die Blacklist aufnehmen, um das ständige Abfragen des Ausganges zu vermeiden:  sun4i_drm_hdmi, sun4i_drm, cec
  • zweite UART für Bluetooth hinzugefügt (zur Nutzung von Bluetooth bitte hier schauen: https://github.com/phelum/CT_Bluetooth)
  • Windows LDM-Unterstützung
  • EFI GUID Partitionen werden unterstützt
  • CONFIG_SECCOMP um nicht vertrauenswürdigen Bytecode auszuführen
  • Unterstützung für div. USB-Netzwerkadapter hinzugefügt
  • NFS-Server mit ParallelNFS-Unterstützung integriert
  • Watchdog-Infos via Sysfs auslesbar
  • Filter für I/O-Zugriffe auf /dev/mem aktiviert
  • WiFi-Treiber – bitte die nötigen Firmware-Binaries hier herunterladen:
    WiFi-Firmware-Images auf Cubietech-Download-Server
  • Maximale Taktfrequenz von 1008MHz wiederhergestellt
  • Integration des SUNXI-Security-Systems (Hardware Crypto-Beschleuniger)
  • CPUFreq-Treiber
  • Dateisysteme mit Boot-Unterstützung: F2FS, BTRFS, EXT2, EXT4, NFS über einen NFSv4-Server
  • Dateisysteme (als Modul eingebunden): XFS, JFFS2, SquashFS, CIFS
  • EXT4 Verschlüsselung
  • Stack-Protector Buffer Overflow Detection
  • Loopback-Device und Crypto-Target-Unterstützung
  • Unterstützung für den Temperatursensor
  • SRAM Controller Treiber
  • DMA-Engine aktiviert
  • einige Optionen für die Unterstützung von LXC-Containern aktiviert – bitte testen
  • AXP20x Treiber (power supply)
  • reduced serial bus – Treiber
  • CAN-Bus-Treiber
  • Allwinner A10/A20 Codec Treiber (Audioausgabe) und SPDIF
  • IP-Tables-Unterstützung als Modul
  • experimentelle NAND-Unterstützung

DOWNLOAD DES KERNEL-IMAGES

aktueller stabiler Kernel mit Langzeitunterstützung 4.14.13

  • Das CIFS-Dateisystem nutzt nun standardmäßig das SMB3 Protokoll
  • Die Effizienz des EXT4-Dateisystems wurde verbessert
  • zweite UART für Bluetooth hinzugefügt (zur Nutzung von Bluetooth bitte hier schauen: https://github.com/phelum/CT_Bluetooth)
  • Windows LDM-Unterstützung
  • EFI GUID Partitionen werden unterstützt
  • CONFIG_SECCOMP um nicht vertrauenswürdigen Bytecode auszuführen
  • IRDA aktiviert
  • Unterstützung für div. USB-Netzwerkadapter hinzugefügt
  • Verbesserungen am TCP-Subsystem für geringere Latenzen
  • Lokaler Caching-Manager für Netzwerk-Dateisysteme
  • NFS-Server mit ParallelNFS-Unterstützung integriert
  • Performance-Optimierung: Laufzeit-Patch für udiv/sdiv Instruktionen
  • Watchdog-Infos via Sysfs auslesbar
  • Filter für I/O-Zugriffe auf /dev/mem aktiviert
  • WiFi-Treiber – bitte die nötigen Firmware-Binaries hier herunterladen:
    WiFi-Firmware-Images auf Cubietech-Download-Server
  • Maximale Taktfrequenz von 1008MHz wiederhergestellt
  • Integration des SUNXI-Security-Systems (Hardware Crypto-Beschleuniger)
  • CPUFreq-Treiber
  • Dateisysteme mit Boot-Unterstützung: F2FS, BTRFS, EXT2, EXT4, NFS über einen NFSv4-Server
  • Dateisysteme (als Modul eingebunden): XFS, JFFS2, SquashFS, CIFS
  • EXT4 Verschlüsselung
  • Stack-Protector Buffer Overflow Detection
  • Loopback-Device und Crypto-Target-Unterstützung
  • Unterstützung für den Temperatursensor
  • SRAM Controller Treiber
  • DMA-Engine aktiviert
  • einige Optionen für die Unterstützung von LXC-Containern aktiviert – bitte testen
  • AXP20x Treiber (power supply)
  • reduced serial bus – Treiber
  • CAN-Bus-Treiber
  • Allwinner A10/A20 Codec Treiber (Audioausgabe) und SPDIF
  • IP-Tables-Unterstützung als Modul
  • experimentelle NAND-Unterstützung

DOWNLOAD DES KERNEL-IMAGES

vorheriger langzeitunterstützter Kernel 4.4.74

  • Fix für Dirty-COW-Rechteausweitung
  • WiFi-Treiber – bitte die nötigen Firmware-Binaries hier herunterladen:
    WiFi-Firmware-Images auf Cubietech-Download-Server
  • Maximale Taktfrequenz von 1008MHz wiederhergestellt
  • Integration des SUNXI-Security-Systems (Hardware Crypto-Beschleuniger)
  • CPUFreq-Treiber
  • Dateisysteme: BTRFS, EXT2, EXT4
  • NFS-Boot-Support über NFSv4
  • EXT4 Verschlüsselung
  • Stack-Protector Buffer Overflow Detection
  • Loopback-Device und Crypto-Target-Unterstützung
  • Ünterstützung für den Temperatursensor
  • SRAM Controller Treiber
  • DMA-Engine aktiviert
  • einige Optionen für die Unterstützung von LXC-Containern aktiviert – bitte testen
  • AXP20x Treiber (power supply)
  • reduced serial bus – Treiber
  • CAN-Bus-Treiber
  • Allwinner A10/A20 Codec Treiber (Audioausgabe)
  • IP-Tables-Unterstützung als Modul

DOWNLOAD DES KERNEL-IMAGES

Robert Sperling, Android & Linux, Last updated: April 13, 2018 at 9:31 am

75 thoughts on “Cubietruck Mainline-Kernels

  1. Hallo!

    Ich habe kernel-4.1.1 versucht zu installieren, bekomme im bootvorgang jedoch einen CRC fehler:
    ## Booting Kernel from legacy image at 460…
    Image Name: Linux-4.1.1
    :
    :
    Verifying Checksum … Bad Data CRC.
    ERROR: Can’t get kernel image!
    SCRIPT FAILED: continuing

    Irgend eine idee?

    Danke,
    Alex.

    1. Booting legacy image klingt erstmal nicht so gut. Image-Name Linux-4.1.1 auch nicht. Hast Du das TAR-File ausgepackt, oder versuchst Du das direkt zu booten? Der Image-Name lautet „uImage“.

  2. Hallo!

    Ich habe jetzt erneut folgendes gemacht, irgend eine idee woran es scheitern koennte?
    sda1 ist swap :-/ sda2 ist root 🙂

    Vielen dank!

    # wget https://www.robert-sperling.de/public/kernel-linux-4.1.1.tgz
    # mkdir kernel-linux-4.1.1
    # cd kernel-linux-4.1.1
    # tar xfz ../kernel-linux-4.1.1.tgz
    # fdisk -l

    Disk /dev/nand: 7.2 GiB, 7700742144 bytes, 15040512 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes

    Disk /dev/sda: 232.9 GiB, 250059350016 bytes, 488397168 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: dos
    Disk identifier: 0x9714689c

    Device Boot Start End Sectors Size Id Type
    /dev/sda1 2048 8390655 8388608 4G 82 Linux swap / Solaris
    /dev/sda2 8390656 488397167 480006512 228.9G 83 Linux

    Disk /dev/mmcblk0: 1.9 GiB, 2032664576 bytes, 3970048 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: dos
    Disk identifier: 0x00000000

    Device Boot Start End Sectors Size Id Type
    /dev/mmcblk0p1 2048 3970047 3968000 1.9G 83 Linux

    # cd boot
    # dd if=u-boot-sunxi-with-spl.bin of=/dev/mmcblk0 bs=1024 seek=8
    362+1 records in
    362+1 records out
    371556 bytes (372 kB) copied, 0.139974 s, 2.7 MB/s

    # mkdir /mnt/sd-card
    # mke2fs /dev/mmcblk0p1 -L „cubie_boot“
    mke2fs 1.42.12 (29-Aug-2014)
    /dev/mmcblk0p1 contains a ext2 file system labelled ‚cubie_boot‘
    created on Thu Jul 9 14:33:59 2015
    Proceed anyway? (y,n) y
    Creating filesystem with 496000 4k blocks and 124160 inodes
    Filesystem UUID: 9a9db64d-ba91-4907-9c0c-4a43a627c8e0
    Superblock backups stored on blocks:
    32768, 98304, 163840, 229376, 294912

    Allocating group tables: done
    Writing inode tables: done
    Writing superblocks and filesystem accounting information: done

    # mount /dev/mmcblk0p1 /mnt/sd-card/
    # cp boot_sata_part2_vga.scr /mnt/sd-card/boot.scr
    # cp uImage /mnt/sd-card
    # cp u-boot-sunxi-with-spl.bin /mnt/sd-card/
    # cp sun7i-a20-cubietruck.dt* /mnt/sd-card/

    # ll /mnt/sd-card/
    total 4300
    drwxr-xr-x 3 root root 4096 Jul 11 19:56 ./
    drwxr-xr-x 4 root root 4096 Jul 9 14:30 ../
    -rw-r–r– 1 root root 341 Jul 11 17:11 boot.scr
    drwx—— 2 root root 16384 Jul 11 17:10 lost+found/
    -rw-r–r– 1 root root 26488 Jul 11 17:13 sun7i-a20-cubietruck.dtb
    -rw-r–r– 1 root root 7119 Jul 11 17:13 sun7i-a20-cubietruck.dts
    -rw-r–r– 1 root root 371556 Jul 11 19:56 u-boot-sunxi-with-spl.bin
    -rw-r–r– 1 root root 3954920 Jul 11 17:13 uImage

    # md5sum /mnt/sd-card/*
    fda8a4c99a30b60078e2488a16950002 /mnt/sd-card/boot.scr
    md5sum: /mnt/sd-card/lost+found: Is a directory
    ed0724efcb4cc275dcbd2784af92c083 /mnt/sd-card/sun7i-a20-cubietruck.dtb
    da6ed57fa2ad9ffbf43bcb9e5308af35 /mnt/sd-card/sun7i-a20-cubietruck.dts
    22419cb003ce1fc3ef648faaef022ad5 /mnt/sd-card/u-boot-sunxi-with-spl.bin
    6959ce5365094a1f9d65bc96b278f91a /mnt/sd-card/uImage

    # cp -a ../lib/modules/4.1.1 /lib/modules
    # depmod -r 4.1.1
    # reboot

  3. Hallo!

    Vorsicht, falle: nachdem ich auf der sd-karte eine leere ext4 partition angelegt hatte funktionierte der bootvorgang?!
    Die meldung: ext4fs_devread read error – block
    hat mich darauf gebracht.

    Danke,
    Alex.

  4. Hallo!

    Habe heute versucht Deine patches auf einen 4.1.1 mainline kernel anzuwenden. 1008MHZ und clocksource gehen.
    Die sunxi-ss-[1-4].patch files machen allerdings probleme. Siehe unten.

    Gibt es im mainline kernel auch eine möglichkeit den A20 temperatur sensor abzufragen? Es feht mir dazu /sys/devices/platform/sunxi-i2c.0/i2c-0/0-0034/temp1_input.

    Detto für die abfrage des akku lade zustandes (/sys/class/power_supply/battery/*).

    lg
    Alex.

    root@cubietruck:~/Work/linux-4.1.1# cat ../Kernel-Upgrades-to-SD-Card/kernel-linux-4.1.1/KERNELPATCHES/
    1008MHZ.patch clocksource.patch sunxi-ss-1.patch sunxi-ss-2.patch sunxi-ss-3.patch sunxi-ss-4.patch
    root@cubietruck:~/Work/linux-4.1.1# cat ../Kernel-Upgrades-to-SD-Card/kernel-linux-4.1.1/KERNELPATCHES/1008MHZ.patch | patch -p0
    patching file arch/arm/boot/dts/sun7i-a20.dtsi
    root@cubietruck:~/Work/linux-4.1.1# cat ../Kernel-Upgrades-to-SD-Card/kernel-linux-4.1.1/KERNELPATCHES/clocksource.patch | patch -p0
    patching file kernel/time/clocksource.c
    root@cubietruck:~/Work/linux-4.1.1# cat ../Kernel-Upgrades-to-SD-Card/kernel-linux-4.1.1/KERNELPATCHES/sunxi-ss-* | patch -p1
    patching file Documentation/devicetree/bindings/crypto/sun4i-ss.txt
    patching file drivers/crypto/Kconfig
    patching file drivers/crypto/Makefile
    patching file drivers/crypto/sunxi-ss/Makefile
    patching file drivers/crypto/sunxi-ss/sun4i-ss-cipher.c
    patching file drivers/crypto/sunxi-ss/sun4i-ss-core.c
    patching file drivers/crypto/sunxi-ss/sun4i-ss-hash.c
    patching file drivers/crypto/sunxi-ss/sun4i-ss.h
    patching file MAINTAINERS
    patching file arch/arm/boot/dts/sun7i-a20.dtsi
    Hunk #1 succeeded at 680 (offset 1 line).
    patch unexpectedly ends in middle of line

    1. Prinzipiell sieht die Ausgabe der Patches doch gut aus, es kommt kein rejected. Am Ende der Patch-Files sind manchmal noch ein paar Leerzeichen, wenn ich sie via Diff-Speichern aus der Linux-Kernel-Mailingliste extrahiere.

      Meiner Ansicht nach gibt es noch keine Möglichkeit, die Temperatur korrekt auszulesen. Aber ich kann ja noch einmal schauen, ob ich was finde.

    2. Die Temperatur des SOCs kann man via:

      /sys/class/hwmon/hwmon0/temp1_input
      bzw.
      /sys/devices/virtual/thermal/thermal_zone0/temp

      auslesen. Allerdings ist mir noch nicht so ganz klar, was die ausgegebenen Werte bedeuten bzw. welche Skala anzusetzen ist. Mit dem Auslesen des Battery-Power-Levels habe ich mich noch nicht beschäftigt, da dies bei meinem Cubie nicht im Fokus liegt. Mutmaßlich habe ich den entsprechenden Sensor noch nicht in der DBT oder Kernel-Config aktiviert.

      1. Ich habe den Kernel nun auf 4.1.2 aktualisiert und das Auslesen des Temperatursensors funktioniert nun wie erwartet.

        LG,
        Robert

  5. Habe ich gestern 4.1.3 von oben probiert:
    # uname -a
    Linux cubietruck 4.1.3 #1 SMP Wed Jul 22 22:59:44 CEST 2015 armv7l GNU/Linux
    # cat /sys/devices/virtual/thermal/thermal_zone0/temp
    cat: /sys/devices/virtual/thermal/thermal_zone0/temp: Invalid argument
    # ls /sys/class/hwmon/*
    /bin/ls: cannot access /sys/class/hwmon/*: No such file or directory

    Btw, hats einen grund warum in Firefox markieren von text zum kopieren nicht funktioniert? Sollte das grundsaetzlich gehen?

    lg
    Alex.

    1. Welche Module sind denn geladen?

      Was den Firefox angeht, das solltr eigentlich funktionieren. Kann ich mir ja mal ansehen, danke für den Hinweis!

      1. Keine:

        # lsmod
        Module Size Used by

        Ich finde aber mit find /lib/modules/4.1.3 auch nix interessantes zum laden:
        /lib/modules/4.1.3/kernel/lib/lz4
        :
        /lib/modules/4.1.3/kernel/crypto
        :
        /lib/modules/4.1.3/kernel/fs
        :
        /lib/modules/4.1.3/kernel/net
        :
        /lib/modules/4.1.3/kernel/drivers

        @Markieren: geht bei mir im IE auch nicht.
        /lib/modules/4.1.3/kernel/drivers/input
        /lib/modules/4.1.3/kernel/drivers/input/touchscreen
        /lib/modules/4.1.3/kernel/drivers/input/touchscreen/sun4i-ts.ko.gz
        /lib/modules/4.1.3/kernel/drivers/crypto
        :
        /lib/modules/4.1.3/kernel/drivers/cpufreq
        :
        /lib/modules/4.1.3/kernel/drivers/bluetooth
        :
        /lib/modules/4.1.3/kernel/drivers/net
        /lib/modules/4.1.3/kernel/drivers/net/wireless
        :
        /lib/modules/4.1.3/extra
        /lib/modules/4.1.3/extra/cryptodev.ko.gz

  6. Soda, funktioniert ja doch.
    Habe die module in /lib/modules/4.1.3 via cp -a aus deinem kernelarchiv kopiert. Musste sie aber noch entpacken weil mein modprobe sie sonst als *.ko.gz files nicht findet. Damit werden sie dann beim booten brav geladen.
    Und ich habe sun7i-a20-cubietruck.dtb nicht neu kopiert – somit war der temperaturwert negativ %-}

    Danke fuer Deine hilfe,
    Alex.

  7. Ich habe ARCH Linux auf dem CT laufen.
    ARCH kommt standardmässig mit 4.1.6-1-ARCH
    Angeblich soll DMA noch nicht unterstuetzt sein?? Wie kann ich das pruefen?
    Ich habe gesehen, dass dein 4.2rc Kernel DMA unterstuetzt.
    Nun . Wie bekomme ich den auf meine ARCH Installation?

    ARCH nutzt zImage und .dts/.dtb. Warum nutzt du noch uImage? Ich muesste mein boot.scr anpassen. Das erwartet
    entweder zImage+.dtb oder uImage+script.bin
    Sollten die .dts files nicht nach /boot/dtbs?

    Zudem muss ich dann wohl noch den pacman Package-Manager anweisen uboot, kernel etc. nicht meht upzudaten??
    Irgendwelche Ideen ??

    Vielen Dank.

    1. Der Arch-Kernel hat einen leicht anderen Fokus und auch ein anderes Setup. Hier wird versucht so viel Hardware wie möglich zu unterstüten und damit wurden die .dts der Übersichtlichkeit wegen in einen eigenen Unterordner verschoben. Ich optimiere meinen Kernel für den Server-Betrieb und versuche alles, was nicht unbedingt benötigt wird wegzulassen. Das uImage nutze ich, weil es die beste Kompatibilität zu den verschiedensten Bootloadern gewährleistet. Die DMA-Unterstützung in meinem 4.2er Kernel ist noch extrem experimentell und noch nicht für den täglichen Einsatz geeignet. Eine Integration in den Vanilla-Kernel ist schließlich erst zur Version 4.3 geplant. Von der DMA-Unit kannst Du erst profitieren, wenn die wichtigsten Gerätetreiber die DMA auch aktiv nutzen. Das Sunxi-Security-System wird zusammen mit dem NAND-Controller wohl die Speerspitze werden. Noch ist hier aber nicht viel benutzbar.

      Die Installation des Kernels habe ich hier beschrieben:

      https://www.robert-sperling.de/2015/03/16/cubietruck-gentoo-linux-mit-kernel-4-0/
      bzw.
      https://www.robert-sperling.de/2015/01/03/cubietruck-migration-auf-mainline-kernel/

      Das Ignorieren von Paketen kannst Du via „IgnorePkg“ in /etc/pacman.conf realisieren.

      Ich habe nun auch einen Cubietruck mit Arch-Linux und werde evtl. in den nächsten Wochen mal einen Desktop-Kernel bereitstellen. Das hängt aber primär davon ab, ob ich die Mali-Treiber in den Kernel integriert bekommen.

      1. Danke für die Info.

        Ich verstehe die ARCH Leute nicht. Wieso nutzen die einen halbfertigen Kernel 4.1er !?!? Hauptsache „Bleeding Edge“ !

        Ggfs. sollte man enfach wieder downgraden – weg vom Mainline – auf Danand’s 3.4.107er .

      2. Gern geschehen. Prinzipiell ist die Entscheidung vom ARCH-Team nachvollziehbar. Der 3.4.x-Kernel ist eigentlich ein für Android gedachter Kernel, der sicherlich gut für die Desktopaufgaben geeignet ist. Ich habe selbst einen Banana-PI der mit dem 3.4er Kernel und Grafikausgabe läuft. ABER: Wenn der Cubietruck Server-Aufgaben übernehmen soll und nicht unbedingt aus dem quälend langsamen NAND-Flash booten muss, ist der Mainline-Kernel mittlerweile die wesentlich bessere Wahl. Sowohl aus Sicht der Sicherheit als auch unter Stabilitätsgesichtspunkten läuft der Mainline-Kernel um einiges besser – und schneller, gerade wenn man z.B. auf BTRFS setzt.
        Sicher, es wird ein Großteil der Hardware mit dem 3.4er unterstützt, jedoch sollte man sich immer vor Augen halten, dass dies ein Fork des offiziellen Kernels ist, der vom Sunxi-Projekt explizit für Android vorbereitet wurde und die meisten Patches keine Chance hätten, jemals in den offiziellen Kernel übernommen zu werden. Daher mein dringender Rat:

        Bitte keine alten Kernels verwenden, wenn man nicht einen sehr guten Grund dafür hat.

        Was die Aussage „halbfertig“ angeht, ist der Cubietruck ja nur eine der unterstützen Plattformen für Arch-Linux/ARMv7. Der Cubietruck läuft mit dem ARCH-Kernel einigermaßen brauchbar, schleppt aber sehr viel Ballast von den anderen Plattformen mit sich und hat einige Teile noch nicht integriert, die mir wichtig sind. Also passe ich mir den Kernel selbst an und übersetze ihn mir selbst.

        Wofür möchtest Du denn Deinen Cubietruck einsetzen, wenn ich fragen darf?

      3. Hallo Robert, ich kenne mich mit den Kernel nicht so gut aus. Habe derzeit auf dem cubie Kernel 3.4 von Igor und debian jessie.
        Wollte nun openvpn auch auf ipv6 bringen. Dazu muss ja für den Tunnel auch ipforwarding aktiviert sein. Lauf RFC kann aber dann keine ipv6 – Adresszuweisung per ra mehr erfolgen.
        Nun gibt es hierfür aber ein Workaround in der sysctl.conf:
        Enabling IPv6 forwarding will disable IPv6 autoconf. Usually you want routers (devices that forward) to have static addresses.
        This is documented in the Linux IPv6 HOWTO.
        Here is the relevant part:
        forwarding
        Type: BOOLEAN
        Default: FALSE if global forwarding is disabled (default), otherwise TRUE
        Configure interface-specific Host/Router behaviour.
        Note: It is recommended to have the same setting on all interfaces; mixed router/host scenarios are rather uncommon.
        Value FALSE: By default, Host behaviour is assumed. This means:
        • IsRouter flag is not set in Neighbour Advertisements.
        • Router Solicitations are being sent when necessary.
        • If accept_ra is TRUE (default), accept Router Advertisements (and do autoconfiguration).
        • If accept_redirects is TRUE (default), accept Redirects.
        Value TRUE: If local forwarding is enabled, Router behaviour is assumed. This means exactly the reverse from the above:
        • IsRouter flag is set in Neighbour Advertisements.
        • Router Solicitations are not sent.
        • Router Advertisements are ignored.
        • Redirects are ignored.
        By setting forwarding to TRUE your machine will behave like a router. You either need to force it to accept Router Advertisements (RAs) or you need to manually configure your addresses and routes.
        To enable autoconf even when using forwarding use this:
        accept_ra
        Type: BOOLEAN
        Accept Router Advertisements; autoconfigure using them.
        Possible values are:
        • 0: Do not accept Router Advertisements.
        • 1: Accept Router Advertisements if forwarding is disabled.
        • 2: Overrule forwarding behaviour. Accept Router Advertisements even if forwarding is enabled.
        Yes, it’s a boolean with values 0, 1 and 2 🙂
        Feste ipv6 – Adressen kann ich nicht einstellen, da alle 24 h das prefix seitens des ISP wechselt.
        Wenn ich ra auf 2 setze und forwarding für ipv6 aktiviert ist, bekomme ich trotzdem keine ipv6 – Adresse zugewiesen. Vermutlich ist dies in meinem Kernel 3.4 von igor nicht implementiert.
        Frage: Wie sieht das mit Deiner Kernel – Version aus? Kann die ra bei gleichzeitigem ipforwarding?
        Frage: Wenn ja, würde ich gerne den Kernel upgraden ohne die bestehende debian Installation „kaputt“ zu machen. Wie ich da migrieren muss, ist mir noch nicht ganz klar. Zumal ich nand1 mit der uenv.txt zum booten benutze. Das müsste ich ja auf u-boot umstellen. lässt sich das überhaupt den u-boot schon auf einem nand installieren? Will eigentlich den SD – Steckplatz nicht dauerhaft mit einer Karte blockieren.

        Gruß

        Elektrolurch

      4. Hallo Elektrolurch, 🙂

        leider ist das Booten vom NAND mit dem Mainline-Kernel noch nicht möglich – und wenn man es mit einem angepassten uboot hinbekommen würde, wäre das Update sehr schwierig, weil man mit dem Mainline-Kernel aktuell das NAND weder sicher lesen noch schreiben kann, das ist alles noch seeeehr experimentell. Das vom eigentlichen Android-Kernel, 3.4 verwendete NAND-Partitionsschema wird auch nicht unterstützt werden. Was IPv6 und den Tunnel angeht: Prinzipiell sollte dies genauso wie oben im Workaround beschrieben mit Kernel 4.x funktionieren. Ich kann das leider aktuell nicht testen, weil zur Zeit keinen funktionstüchtigen Cubietruck habe und einen neuen erst mal wieder aufsetzen muss.
        Mein Vorschlag: versuche mal via SD-Card den neuen Kernel mit Deinem System zu booten. Anleitungen dafür habe ich schon einige geschrieben, am aktuellsten ist die Gentoo-Anleitung.

        Gruß,
        Robert

  8. Ich nutze das Cubitruck Board fuer „Squeeze on Arch“.
    Momentan in einer adaptierten Version, da die ursprüngliche Lösung derzeit nicht gepflegt wird.

    Es läuft darauf der Squeezeboxserver. Und Squeezelite.
    Auf dem Server habe ich das Qobuz plugin and zudem das DLNA Plugin aktiviert.

    Squeezelite würde z.B. DMA nutzen.

    1. >Squeezelite würde z.B. DMA nutzen.
      Das verstehe ich nicht. DMA – aka. Direct Memory Access dient der direkten Anbindung von Geräten an den Hauptspeicher des Systems ohne die CPU zu Hilfe nehmen zu müssen. Mir fällt dabei bei einem puren Server-Dienst keine Verwendungsmöglichkeit ein. Gibt es dafür eine Beschreibung/Referenz?

  9. Ich wollte nur mal kurz meinen Dank da lassen. Spiele seit ein paar Tagen auf einem Cubietruck rum, den ein Kollege über hatte. Ist das erste mal, dass ich mit gentoo zu tun habe und es macht mir viel Spaß. 🙂

    Ich habe noch nicht ganz raus, wie/ob ich die root-partition auf die Sataplatte verschieben kann, so weit ich mich erinnere, müsste ich dazu an die Bootpartition im NAND. (habe das vor ~2 Jahren mal mit nem Arch Image gemacht)
    Aber das kriege ich auch noch raus, bzw. ist mir auch nicht so wichtig (/usr und /var kann ich ja von dort mounten).
    Dieser Kommentar soll wie Anfangs schon gesagt vor allem einem Dankeschön gelten.
    Weiter so!

  10. Hallo,

    ich habe vor kurzem Debian 8 mit dem offiziellem Debian installer auf dem Cubietruck
    installiert und habe den Mainline 3.16.0-4-armmp-lpae Kernel. Kann ich deinen aktuellen Kernel installieren?
    Und wenn ja wie mache ich das?
    In habe das System auf der Festplatte, und der U-Boot auf der SD-Karte bootet automatisch die HDD.

    Gruß
    Michael

    1. Hallo Michael,

      den aktuellen Kernel von mir kann man natürlich auch auf einem Debian-System installieren. Die Installation des Kernels habe ich z.B. hier:

      Migration auf Mainline-Kernel

      beschrieben. Kurz zusammengefasst:

      Was gebootet wird und wie (VGA/HDMI & Co.), regelt das Boot-Skript (boot.scr/boot.cmd). Der Device-Tree-Blob und das uImage gehören auf die Boot-Partition, die Module unter /lib/modules. Ansonsten steht dem erfolgreichen Booten nichts im Weg. Ich hoffe, das hilft.

      Gruß,
      Robert

  11. Hallo!

    Hat dein kernel auch iptables support? Weil:
    root@cubietruck:/etc/fail2ban# iptables -L
    modprobe: FATAL: Module ip_tables not found.
    iptables v1.4.21: can’t initialize iptables table `filter‘: Table does not exist (do you need to insmod?)
    Perhaps iptables or your kernel needs to be upgraded.
    root@cubietruck:/etc/fail2ban# uname -a
    Linux cubietruck 4.6.2 #5 SMP Wed Jun 8 13:37:53 CEST 2016 armv7l GNU/Linux

    Falls nicht, wie komme ich am besten dazu? Ich will die chinesichen brute force hacker endlich los werden …

    Danke,
    Alex.

  12. Hello Robert,

    i just have installed a fresh gentoo (Cubietruck: Howto – Installing Gentoo Linux with mainline kernel 4.x) with your new kernel 4.7.4 and it works. Thanks a lot!

    Do you have a hint how to establish the other possible UART serial interfaces in sun7i-a20-cubietruck.dts.

    Currently we only have uart0 and uart2. Is there a way to enable others (like 3,4,7) too? In the fex area it was easy to make that, but in dtb area i dont have the knowledge to make that working.

    Inside your sun7i-a20-cubietruck.dts file i found the reference to the sun7i-a20.dtsi from Maxime Ripard which itself contains the following section: (all disabled)

    uart0: serial@01c28000 {
    compatible = „snps,dw-apb-uart“;
    reg = ;
    interrupts = ;
    reg-shift = ;
    reg-io-width = ;
    clocks = ;
    status = „disabled“;
    };

    uart1: serial@01c28400 {
    compatible = „snps,dw-apb-uart“;
    reg = ;
    interrupts = ;
    reg-shift = ;
    reg-io-width = ;
    clocks = ;
    status = „disabled“;
    };

    uart2: serial@01c28800 {
    compatible = „snps,dw-apb-uart“;
    reg = ;
    interrupts = ;
    reg-shift = ;
    reg-io-width = ;
    clocks = ;
    status = „disabled“;
    };

    uart3: serial@01c28c00 {
    compatible = „snps,dw-apb-uart“;
    reg = ;
    interrupts = ;
    reg-shift = ;
    reg-io-width = ;
    clocks = ;
    status = „disabled“;
    };

    uart4: serial@01c29000 {
    compatible = „snps,dw-apb-uart“;
    reg = ;
    interrupts = ;
    reg-shift = ;
    reg-io-width = ;
    clocks = ;
    status = „disabled“;
    };

    uart5: serial@01c29400 {
    compatible = „snps,dw-apb-uart“;
    reg = ;
    interrupts = ;
    reg-shift = ;
    reg-io-width = ;
    clocks = ;
    status = „disabled“;
    };

    uart6: serial@01c29800 {
    compatible = „snps,dw-apb-uart“;
    reg = ;
    interrupts = ;
    reg-shift = ;
    reg-io-width = ;
    clocks = ;
    status = „disabled“;
    };

    uart7: serial@01c29c00 {
    compatible = „snps,dw-apb-uart“;
    reg = ;
    interrupts = ;
    reg-shift = ;
    reg-io-width = ;
    clocks = ;
    status = „disabled“;
    };

    So it seems to me that everything should be there to easily enable that, but how?

    In your (Oliver Schinagl) sun7i-a20-cubietruck.dts file is a section

    &uart0 {
    pinctrl-names = „default“;
    pinctrl-0 = ;
    status = „okay“;
    };

    Can i add i.e others uarts like

    &uart3 {
    pinctrl-names = „default“;
    pinctrl-0 = ;
    status = „okay“;
    };
    &uart4 {
    pinctrl-names = „default“;
    pinctrl-0 = ;
    status = „okay“;
    };
    &uart7 {
    pinctrl-names = „default“;
    pinctrl-0 = ;
    status = „okay“;
    };

    or is there another trick to have that working?

    Thanks for a hint
    Wolfgang

    1. Hi Wolfgang,

      the current version of the sun7i-a20-cubietruck.dts file is taken directly from the vanilla kernel sources. It should be safe to enable the missing UARTs by adding the missing entries – just like you’ve proposed. At least it’s worth a try and you won’t break you system with it. Please keep me posted 😉

      Best regards,
      Robert

  13. Hi Robert,
    due to the fact that only uart0, uart3, uart4 and uart7 are usable with dedicated header pins i changed the dts file in the following way and it works.
    aliases {
    ethernet0 = „/soc@01c00000/ethernet@01c50000“;
    serial0 = „/soc@01c00000/serial@01c28000“;
    serial3 = „/soc@01c00000/serial@01c28c00“;
    serial4 = „/soc@01c00000/serial@01c29000“;
    serial7 = „/soc@01c00000/serial@01c29c00“;
    };
    and i added the pinctrl-o item to each serial definition. Here 0x0 is the default (0,1,2,5,6,7) but for 3,4 there is also a configuration 0x1 (which sets different pins)
    uart3@0 { allwinner,pins = „PG6“, „PG7“, „PG8“, „PG9“; …. };
    uart3@1 { allwinner,pins = „PH0“, „PH1“; …. };
    uart4@0 {allwinner,pins = „PG10“, „PG11“; …. };
    uart4@1 {allwinner,pins = „PH4“, „PH5“; …. };

    serial@01c28000 {
    clocks = ;
    pinctrl-0 = ;
    };
    serial@01c28400 {
    clocks = ;
    };
    serial@01c28800 {
    clocks = ;
    pinctrl-0 = ;
    };
    serial@01c28c00 {
    clocks = ;
    pinctrl-0 = ;
    };
    serial@01c29000 {
    clocks = ;
    pinctrl-0 = ;
    };
    serial@01c29400 {
    clocks = ;
    pinctrl-0 = ;
    };
    serial@01c29800 {
    clocks = ;
    pinctrl-0 = ;
    };
    serial@01c29c00 {
    clocks = ;
    pinctrl-0 = ;
    };

    The biggest problem is to understand that a decompiling (dtb –> dts) of a compiled dts version does not result that same content as the original dts file due to the includes.
    So i just testing the use the uart7 to communicate with a microcontroller board.

    Best regards ,
    Wolfgang

  14. Hallo Robert,

    danke für dieses Blog! Könntest du bitte eine einfache Step-by-Step Beschreibung für Dummies machen, wie man den Kernel installiert. Am besten für Arch. Danke!

  15. Hallo Robert, wollte mich an dieser Stelle mal bedanken! Dank deiner Anleitung und den Kernels hatte ich den Cubie ziemlich schnell am laufen (bin sonst eher Arch gewohnt).

    Spricht eigentlich etwas dagegen, das Rootfs in den Flash zu legen? Irgendwie traue ich SD Karten nicht und die Platte würde ich am liebsten so lange es geht im Sleep lassen.

    1. Aktuell gibt es noch keine stabile Flash-Treiber-Implementierung für den Cubietruck. Es gibt zwar schon eine Menge exprerimentellen Code, aber nichts, dem ich mein Root-Filesystem anvertrauen würde. Aktuell würde ich in Deiner Situation das Root-Filesystem entweder auf eine SD-Karte oder einen USB-Stick legen. Wenn es nur um das Lesen geht, sind SD-Karten gar nicht so unzuverlässig 😉

  16. Hallo Robert,

    ich habe gerade versucht, einen Kommentar zu den Cubietruck Mainline-Kernels zu verfassen, aber die Captcha-Abfrage (vier – 1 sollte doch 3 sein) lässt mich nicht durch. Was stimmt da nicht?

  17. Hallo Robert,

    mittels Deiner Anleitungen konnte ich meinen Cubietruck auf U-Boot und einen aktuellen Kernel umrüsten. Danke für die ausführlichen Anleitungen! Momentan läuft bei mir ein 4.9.9er Gentoo-Kernel, den ich mit dem 1008MHz-Patch und Deiner config-Datei gebaut habe. Allerdings strebe ich auch den minimalistischen Weg an und wollte deshalb fragen, wie Du von einem „unkonfigurierten“ Kernel zu Deiner Konfiguration kommst.
    Hintergrund ist der, dass ich versuchen will, aus den gentoo-sources und aufbauend auf der sunxi_defconfig meinen eigenen Kernel zu bauen, der die in Deinen Features gelisteten Vorteile hat, ansonsten aber genau meine Anforderungen erfüllt.
    Also in etwa:
    emerge gentoo-sources
    cd /usr/src/linux
    make sunxi_defconfig
    ???? (Patches, Aktivieren bestimmter Einstellungen mittels make menuconfig)
    Profit!

    Könntest Du bitte beschreiben, wie Du die einzelnen Features jeweils aktivierst?

    Zusatzfrage: Ist es Dir gelungen, die proprietären Mali-Treiber aus dem 3.4er-Android-Kernel in einen aktuellen Linux-Kernel zu verpflanzen?

    1. Hallo Andreas,

      die Konfiguration des Kernels mache ich immer noch von Hand. Ich habe dazu angefangen eine Howto zu schreiben (Kernel-Konfigurationsempfehlung) – mangels Zeit ist diese jedoch noch nicht weit gekommen. Aber ich gelobe Besserung 😉 Mit den Gentoo-Kernels habe ich bisher noch keine zufriedenstellenden Erfahrungen machen können. Die Patches-Sammlung auf den Vanilla-Kernel ist ziemlich x86/64-lastig und nur ein kleiner Bruchteil der Änderungen ist überhaupt für armv7 interessant. Mein Fokus liegt eindeutig auf dem stabilen Betrieb des Cubietruck als 24/7-Server, daher nutze ich auch nicht den systemd und schon gar nicht die Anpassungen des Gentoo-Kernels für den systemd.
      In einem Punkt hast Du aber Recht – und das ist schon länger für mich als internen Workflow geplant: Ich möchte alle mir besonders wichtigen Konfigurationsoptionen als Patch für die sunxi-Defaultkonfiguration bereitstellen. Dies wird mit dem Update des oben genannten Artikels einhergehen.

      Was die Mali-Treiber angeht, ist die Community sehr gespalten. Ich persönlich sehe keinen Vorteil darin: Die Mali-Treiber rüsten nur eine OpenGL-ES-Unterstützung nach. Der Nutzen ist dabei sehr überschaubar und geht kaum über eine Referenz-Implementierung von Doom und ein paar Desktop-Effekten hinaus. Es handelt sich halt nicht um ein vollwertiges OpenGL. Ein (zugegebenermaßen weit zurückliegender) Test mit KDE und dem 3.4er-Kernel war mehr als unzufriedenstellend – der Desktop war viel langsamer als ohne Beschleunigung (ich hatte XRender zum Vergleich verwendet). Einen geplanten Test mit den neuen Mali GPU User-Space-Treibern habe ich auch noch nicht durchgeführt.

      1. Mit systemd kann ich mich auch nicht so recht anfreunden, vor allem, weil es viele Dinge verkompliziert. Bei OpenRC sind die Dateien einfach aufgebaut und man muss nur an wenigen Stellen schauen, um z.B. eine Abhängigkeit zu definieren. Deswegen laufen alle meine Systeme mit Ausnahme der Raspberry Pis mit Raspbian auf OpenRC.
        Die Idee mit den gentoo-sources als Basis hängt vielmehr damit zusammen, dass man (bis auf den 1008MHz-Patch) auf die gängigen Mechanismen (Portage) zurückgreifen kann und auch manche Pakete gerne mal in /usr/src/linux nachschauen, ob in der .config bestimmte Optionen gesetzt sind.
        Bei einer Howto bin ich gerne behilflich. Man müsste nur vorfiltern, welche Features alleine durch die neue Kernel-Version mitkommen und nicht extra konfiguriert werden müssen (z.B. Dirty-COW, denke ich), welche durch zusätzliche Patches (z.B. 1008MHz) und welche durch Anpassungen in der Kernel-Konfig aktiviert werden. Bei letzteren könnte man noch unterscheiden, welche grundsätzlich gesetzt sein sollten (z.B. cpufreq) und welche optional sind (Dateisysteme, CAN-Bus, IRDA usw.) und entsprechend dem Einsatzzweck gesetzt werden.

        Mit Doom und den paar Desktop-Effekten sprichst Du sicher den Lima-Treiber von libv an, der ja schon seit längerem keine Fortschritte mehr macht, weil er wohl starken Gegenwind von den Herstellern bekommt. Für den sehr ähnlichen Banana Pi habe ich eine Anleitung gefunden, die den proprietären Mali-Treiber und einige andere Optimierungen soweit nutzt, dass tatsächlich eine brauchbare Desktop-Performance herauskommt. Allerdings geht dies eben nur mit dem von Sunxi gepatchten Android-3.4er-Kernel.
        Ich hatte mal versucht, den Mali-Treiber aus dem 3.4er-Kernel herauszuholen und in einen 4er-Kernel einzubauen, bin aber gescheitert, bin aber auch kein erfahrener Kernelfrickler…

      2. Was die Patches für den Kernel angeht, so waren diese in der Vergangenheit noch sehr viel umfangreicher und werden in Zukunft wahrscheinlich auch wieder umfangreicher werden, wenn ich das NAND-Subsystem zum Laufen bekommen habe. Die Konfiguration der aktuellen Distributionen wie z.B. Arch und auch Gentoo sind mir viel zu generisch und zu „fett“. Die Änderungen von Release zu Release zu tracken, habe ich bereits aufgegeben. Ich orientiere mich bei dem Major-Updates nun am Sunxi Mainlining Effort und an den generellen Kernel-News. Ich denke die Aufteilung der Kernel-Howto in plattformspezifische Optionen und „Nice-to-have“-Features für den Embedded-Server/Desktop ist die sinnvollste Alternative.

        Was die Mali-Treiber angeht, habe ich den Port von 3.4 auf 4.x auch schon versucht, musste aber aus Zeitgründen aufgeben. Ich bin zwar Kernel-Entwickler, habe privat aber nur ein sehr beschränktes Zeitbuget. Ein erfolgversprechender Ansatz wäre übrigens der direkt von ARM angebotene Treiber. Aber da muss ich auch noch einmal genauer schauen. Jedoch steht das auf meiner Prioritätenliste gaaaanz unten, da meine beiden Cubietrucks aktuell für die Nextcloud eingespannt sind und für ein Desktop-Linux auf den Cubietruck habe ich keine Anwendung – die Möglichkeiten in Bezug auf Foto- und Videobearbeitung sind mir zu beschränkt und Office/Internet erledige ich mobil.

    1. Hi! You need at least some kind of supported boot media. The cubietruck integrated boot rom is able to boot from SD or NAND flash. It is (maybe) possible to install a uboot bootloader into the NAND flash and boot the kernel from SATA but this is a rather hard way to go. You may start reading here:

      Boot process:
      http://linux-sunxi.org/Boot_Process#SATA

      General uboot info:
      https://linux-sunxi.org/Mainline_U-boot

      Instructions to flash the uboot image to NAND:
      https://lists.denx.de/pipermail/u-boot/2015-May/215159.html

      I haven’t tried it, yet – so good luck 😉 If you succeed, please report back.

      Kind regards,
      Robert

  18. Ich habe jetzt den Kernel 4.12.1 gestartet bekommen. Allerdings ohne Ethernet. Ist das mit dem Kernel noch nicht unterstützt? Sonst sieht alles ok aus.

    1. Der Kernel unterstützt natürlich Ethernet – er ist ja schließlich für den Serverbetrieb gedacht. Wenn ich tippen darf, dann wurde entweder ein Modul oder die Firmware für den Ethernet-Adapter nicht gefunden. Sie liegen mit im Paket und müssen nach /lib/modules bzw. /lib/firmware kopiert werden. Ähnliche Effekte können auch auftreten, wenn die falsche *.dtb-Datei verwendet wird. Falls dies nicht hilft, sollte das Kommando „dmesg“ das Kernel-Log ausgeben – evtl. sind da Fehlermeldungen enthalten.

  19. Danke. Die Kontrolle der Kernel-Installation reichteimmer nocht nicht. Erst als ich das Cubian X1 mit einem frischen Gentoo nach Deiner Anleitung übergebügelt habe, habe ich ein funktionsfähiges System. Leider macht Gentoo eine Menge Arbeit im Vergleich zu apt-get basierten Systemen.

    Was kann eigentlich der experimentelle Nand-Support?

    1. Cubian X1 sollte mit dem Kernel auch problemlos zurechtkommen – wahrscheinlich hat sich aber nur der Name der Ethernet-Schnittstelle gegenüber dem Stock-Kernel geändert. „ifconfig -a“ hätte gezeigt, welche Schnittstellen auf dem System erkannt wurden.
      Die experimentelle NAND-Unterstützung kann vom internen NAND lesen (falls dort Partitionen nach dem neuen (Mainline-)Schema vorhanden sind) und prinzipiell auch schreiben, was aber seeeehr mit Vorsicht zu genießen ist.

  20. Hallo,

    vielen Dank für den Kernel er läuft auch soweit problemlos im Cubietruck.

    Gibt es auch eine Step-by-Step Anleitung um vom Vanilla-Kernel von kernel.org auf einen Kernel für den Cubietruck zu kommen?

    Eine weitere Frage, beinhaltet das Kernel-Image auch SCST? Dann könnte man den Cubietruck als iSCSI-Target konfigurieren und so evtl. ein paar Raspi’s über iSCSI zu booten 🙂

    1. Hallo,

      ich nutze selbst die Vanilla-Kernels von kernel.org für meine Binary-Builds hier. Die Vorgehensweise ist also denkbar einfach. Kernel herunterladen, Patches aus meinen Pakete anwenden, Konfigurationsdatei als .config ins Verzeichnis legen und übersetzen. Falls das nicht an Information reicht, kann ich ja mal eine kleine Anleitung schreiben. Was SCSI angeht, sollte alles Nötige im Kernel aktiviert sein. Ich kann ja noch einmal schauen, wenn ich wieder davor sitze. Der Cubietruck hat bei mir nun andere Aufgaben übernommen und ist nicht mehr am Netz, die Cloud wird nun von einem x86-Rechner gehostet. Insofern bin ich mit den Kernel-Updates ein wenig zögerlicher geworden, stecke aber mehr Zeit ins Testing. In der nächsten Zeit plane ich aber zumindest ein Update auf den langzeitunterstützten Kernel 4.14.

      1. Hallo,

        vielen dank für die schnelle Antwort… Das reicht mir schon .. 🙂

        Bei mir wird der Cubietruck als Entwicklerplattform in naher Zukunft herhalten da ich selbst auf Odroid-HC1 umsteigen werde als Server.
        Der XU4 mit SSD läuft sehr schnell und zuverlässig.

        Dank deiner Hilfe, denke ich, kann ich es auch für den HC1 übernehmen/anpassen…

        Warum bist denn auf x86 umgestiegen?

        Grüße Andreas

      2. Da werde ich irgendwann auch mal einen längeren Artikel zu schreiben. Aber zusammengefasst sind es diese Punkte:
        1. Nutzung von x86-Docker-Containern (Collabora Office in der NextCloud),
        2. Mehr RAM – meine Anwendungen profitieren von 8GB-RAM,
        3. Crypto-Beschleunigung,
        4. Vernünftiges Gigabit-Ethernet zusammen mit nativem SATA.

        Alles das habe ich in einem Celeron-NUC gefunden, der im Idle-Stromverbrauch sehr nahe am Cubietruck liegt (3.3W). Den HC1 hatte ich auch schon im Warenkorb, allerdings ist die Schnittstellenausstattung und die Speicherbegrenzung indiskutabel für mich. Der NUC war da für mich die erste Wahl und hat nun das Gespann aus drei Cubietruck abgelöst.

    1. Danke für den Hinweis, da scheint etwas beim Migrieren des Webhosting-Paketes verloren gegangen zu sein… Ich schaue mir das schnellstmöglich an. Ich werde (wenn alles gut geht) sehr bald einen 4.14er Kernel veröffentlichen.

    2. So, ich habe nun viel wiederhergestellt, was verloren gegangen war. Der aktuelle Kernel ist nun auf der Seite, jedoch bisher erst mit wenig Testlaufzeit bei mir. Der 4.12.10er Kernel, der schon viele Wochen bei mir lief, ist hier erhältlich.

  21. Hallo,
    ich hab den CT seit langem als Server laufen. Ausgangspunkt war das Hybrid-Image von Stephanius mit Kernel von Danand (https://www.danand.de/index.php/unixlinux/cubieboard-danand-3-4-91-kernel/).
    Kürzlich habe ich den aktuellen Danand-Kernel installiert (3.4.113) und auf Lubuntu 16.0.4 upgegraded und Nextcloud auf 12.0.4. Daneben läuft noch Samba und Twonky als Media-Server. Läuft soweit alles ganz proper.

    Nun meine Frage: Kann ich den Danand-Kernel einfach gegen deinen Kernel austauschen? Oder muss ich auch noch bei den modules bzw. firmware was ergänzen oder austauschen? (Ich bin mir über die Zusammenhänge nicht wirklich im klaren und deswegen ein bisschen unsicher.)
    Vielen Dank

    1. Hallo Walther,

      der 3.4er Kernel geht aus dem Sunxi-Android-Port hervor und macht vieles anders, als es im „Mainline“-Kernel der Fall ist. Eine wichtige Info vorab: Der Mainline-Kernel kann noch nicht hinreichend mit dem internen NAND-Flash umgehen und wenn er es später kann, wird er das Partitionsschema des 3.4er nicht verstehen.

      Wird jedoch von SD-Karte gebootet, ist es recht einfach: 1. korrekten Bootloader verwenden und die mitgelieferten Module und Firmware-Files an die richtige Stelle der Boot-Partition auspacken. Alle wichtigen Dateien sind im Archiv vorhanden. Eine Anleitung, wo, was hingehört, steht hier: Gentoo-Guide.

      Gegenüber dem 3.4er Kernel kannst Du Dich dann über höhere Stabilität und mehr Geschwindigkeit in Hochlast-Situationen freuen.

      Viele Grüße und Erfolg,
      Robert

  22. Hallo Robert,
    danke für die superschnelle Antwort.
    Mein CT bootet von der SD-Karte. Das scheint sich ja dann recht einfach zu gestalten. Das werde ich gleich mal testen.

  23. Hallo Robert,
    endlich habe ich für das Cubieboard passenden Kernel mit NAND Unterstützung gefunden. Leider bin ich nicht damit vertraut einen Kernel in den NAND zu legen. Die Scripte bei kompletten IMAGES für SD-Karten haben in der Regel was dabei, aber auch meistens fehlerhaft, bei den weezys ist PHP veraltet und neu kompilieren geht in die Hose.
    Was muss ich nun von einem laufenden Linux auf SD tun um Dein Kernel mit allen weiteren Tools in den NAND zu bringen?
    Vielen Dank und Gruß Stefan

    1. Hallo Stefan,

      im Prinzip habe ich alles Nötige zum Booten des Kernels in dem Artikel zu Gentoo-Linux geschrieben. Was man dazu noch braucht, ist ein Bootloader, der den Kernel vom NAND auch starten kann. Dies soll der U-Boot 2018.03 können – ich habe das bisher aber mangels Zeit noch nicht ausprobieren können. Eine Warnung muss ich Dir aber noch auf den Weg geben – getestet oder gar stabil ist die ganze NAND-Unterstützung auf den Cubietruck noch nicht. Scheinbar scheint sich damit auch keiner wirklich auseinanderzusetzen. Schade eigentlich.

      Viele Grüße,
      Robert

  24. Hallo,

    What U-Boot version did you use to get NAND correctly up?

    U-Boot 2018.03 can be installed on NAND to boot without SD-card. It can be set to load kernel and rest of the OS from SATA. This can be done in such a way, SD-card is not needed at all. I have done this, but NAND does not act correctly.

    I have only tried wit kernel version 4.9 though. Have you made some major changes?

    It would be very nice if we got the whole boot process and everything work nice again.

    MfG: Harri Markkula

    1. Hi,

      NAND support was added in kernel 4.10 and later. There is a HOWTO available on that topic. I did my best to integrate patches, devicetree changes and all needed stuff into my kernel but is it really experimental and I didn’t had the time to do testing, yet. If you need the kernel for booting from SATA only, your kernel doesn’t need NAND support at all. You only have to install the bootloader and kernel into NAND using a kernel 3.4 based linux-distribution. Once started, it doesn’t have to read the NAND since you boot from SATA.

      Regards,
      Robert

  25. I know, but does the U-Boot you use have NAND support too?

    We don’t need to use the old bootloader any more, because using new U-Boot SPL can be loaded directly from NAND without boot0/boot1 made by Allwinner.

    Just look at this:

    http://git.denx.de/?p=u-boot.git;a=blob_plain;f=board/sunxi/README.nand;hb=HEAD

    There is one error in that guide. You have to use u-boot-dtb.img instead of u-boot-dtb.bin. Then it works just fine.

    This U-Boot has NAND support, but I did not manage this U-Boot NAND support and kernel 4.9 NAND support to work together.

    What I still have not done is comparing if U-Boot 2018.03 and kernel 4.15 do fit together while using NAND.

    If they do work together, it would give this little device still longer life.

    MfG: Harri Markkula

    1. The U-Boot in my packages is an old one I chose for safety reasons. But you may use any recent U-Boot. Please feel free to try kernel 4.15 – I will also release 4.16 within the next days. Unfortunately I only have very limited time to test so I won’t be able to do any NAND related experiments. I would be glad to hear from you regarding your progress.

      MfG,
      Robert

  26. Hallo Robert,

    ich habe da ein (hoffentlich) kleines Problem mit dem starten des Kernels. Ich hab bis jetzt den CT mit Ubuntu und dem Sunxi Kernel laufen und wollte jetzt auf einen neueren Kernel umschwenken.
    Den Kernel hat es bis jetzt von der SD-Karte gebootet und die SATA-Platte als root-Partition genommen. Nun dachte ich mir ich kann die SD-Karte mit einer anderen ersetzen, auf der dein Kernel ist.
    Ich hab mich an die Anleitung von hier gehalten: https://www.robert-sperling.de/cubietruck-gentoo-linux-mit-kernel-4-0/

    SD-Karte mit gparted partitioniert Partionstyp msdos / erste Partition 50 MB ext2 und den rest als ext4 Partition. Und dann noch mit dd den Bootloader geschrieben. Als Bootskript „boot_sata_sda1_hdmi.scr“ gesetzt. Beim folgenden booten findet er dann zwar das bootskript aber nicht das Kernelimage und die dtb-Datei.
    Der verwendete Kernel ist 4.15.12

    Ausgabe beim Booten:
    >> MMC: SUNKI 3D/MMC: 0
    >> *** Warning – bad CRC, using default enviroment
    *
    *
    *
    >> mmc0 is current device
    >> Scanning mmc 0:1…
    >> Found U-Boot script /boot/boot.scr
    >> 314 bytes read in 422ms (0 Bytes/s)
    >> ## Executing script at 43100000
    >> ** File not found uImage **
    >> ** File not found sun7i-a20-cubietruck-dtb **
    >> Wrong Image Format for bootm command
    >> ERROR: can’t get kernel image!
    >> SCRIPT FAILED: continuing…
    >> Scanning mmc 0:2

    Das ist nur ein teil der Ausgbe und ich hoffe ich hab alles wichtige abgetippt. Der Rest sah eigentlich ganz gut aus. Kann ich aber nochmal nachliefern wenn nötig. Danach rast noch eine menge gleiche Fehlermeldungen über den Schirm bei denen ich glaube das er versucht die gpt der SATA-Platte zu lesen.

    Der Bootloader scheint ja zu arbeiten, aber hast du eine Idee wieso es den Kernel auf der SD-KArte nicht findet? Des weiteren sind sind „uImage“, „boot.scr“ und „sun7i-a20-cubietruck.dtb“ rechtemäßig auf -rw-r–r– gesetzt. Ist das so richtig?

    Ich hoffe du oder jemand anderes hat eine Idee dazu.

    Viele liebe Grüße 😉

    1. Hallo Stefan,

      das Skript „boot_sata_sda1_hdmi.scr“ erwartet (wie der Name schon sagt) die Kernel-Partition auf der ersten Partition eines per SATA angeschlossenen Datenträgers. Also einer SSD oder Festplatte. Wenn Du nur eine SD-Karte einsetzt, solltest Du das Skript „boot_mmcblk0p1_hdmi_uart.scr“ verwenden, das den Kernel über das MMC/SD-Interface läd.

      Viele Grüße,
      Robert

      1. Hallo Robert,

        erstmal vielen dank für die schnelle Antwort. Ich habe das ganze jetzt nochmal komplett ohne Festplatte probiert um erstmal den Kernel zum laufen zu bringen.
        Die Dateien aus dem Kernel-Archiv sind auf der Boot-Partition und der Root-Partition in den passenden Verzeichnissen. Aber er findet Kernel und ctb-Datei immer noch nicht.

        Hier nochmal ein Bild der Ausgabe:
        https://imagebin.ca/v/5Emdoi2FMq9b

        Vielleicht hast du noch ein wenig Zeit und eine Idee zu dem Problem.

        Liebe Grüße

      2. Fehler gefunden! uImage und dtb Datei gehören direkt auf die boot-Partition nicht in einen boot-Ordner auf der boot-Partition.

        Da komme ich vielleicht erst mal weiter.

      3. Hallo Robert,

        der Kernel startet erst mal. Zwar nicht von der SD-Karte, aber dafür von der SATA-Platte. Bei der SD-Karte habe ich auf die 2te Partition wie beschrieben gentoo draufgezaubert, was aber nicht starten will. Ich hab da „boot_mmcblk0p1_hdmi_uart.scr“ und „boot_mmcblk0p2_hdmi_uart.scr“ als „boot.scr“ probiert. Nach der Ausgabe „Starte Kernel …“ werden nur kurz 2 Tuxe angezeigt und dann startet er neu.

        Aber das stört mich momentan nicht so sehr, da er ja erstmal vom der SATA-Platte bootet. Das Problem was ich jetzt dort habe ist das das System nicht vollkommen startet. Während des bootens kommt noch folgende Fehlermeldung, die bei den sunxi-kernel nicht kommt.
        >> The disk drive for / is not ready yet or not present.
        >> keys:Continue to wait, or Press S to skip mounting or M for manual recovery

        Danach startet/stoppt er noch ein paar dienst und bleibt dann hängen. Hast du dazu noch eine Idee?

      4. Die Boot-Skripte beinhalten nicht nur die Anweisungen, den Kernel zu Booten, sondern auch die Kernel-Argumente um die Root-Partition zu finden. Mit Gentoo auf der zweiten Partition der SD-Karte, solltest Du das Skript „boot_mmcblk0p2_hdmi_uart.scr“ verwenden. Dies versucht den Kernel auf der ersten Partiton zu finden und übergibt ihm „/dev/mmcblk0p2“ als Root-Partition – also die zweite SD-Karten-Partition. Die Meldung „The disk drive for / is not ready yet or not present.“ besagt, dass der Kernel das Dateisystem nicht lesen konnte, oder die Partition nicht gefunden hat. Ist die Root-Partition eventuell aus versehen in einer Erweiterungspartition gelandet? Welches Dateisystem verwendest Du?

    2. … und ist es normal das die USB-Tastatur mit dem Kernel nicht arbeitet? Wenn ja, wie kann ich die zum laufen bekommen.

      Liebe Grüße Stefan 🙂

  27. Hallo Robert, zunächst mal vielen Dank für Deine wertvollen Anleitungen!

    Eine Frage dazu:
    Der Link zu den Wifi Firmware Images ist leider tot. Hättest Du noch eine alternative Quelle und vielleicht noch ein paar kleine Hinweise, welche Dateien genau wo hin müssen?

    Danke!

    1. Hallo Christoph,

      ja, schade der Link ist tot. Versuche es mal mit diesem Backup:
      https://packages.aosc.io/packages/firmware-wifi-ap6210
      bzw.
      https://github.com/hadi77ir/BananaPi-Wireless-Firmware/tree/master/ap6210

      Die Firmware muss unter /lib/firmware liegen, bei den anderen Dateien kannst Du gerne in meiner Installationsanleitung unter: https://www.robert-sperling.de/cubietruck-gentoo-linux-mit-kernel-4-0/ nachschauen. Ansonsten sind im Kernel-Archiv alle Dateien in den korrespondierenden Verzeichnissen abgelegt. Ich hoffe, das hilft.

Schreibe einen Kommentar

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

Name *

drei × drei =