Cubietruck Mainline-Kernels

Auf dieser Seite stelle ich in regelmäß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.

aktueller stabiler Kernel 4.12.4

  • Opal-Storage-Unterstützung für selbstverschlüsselnde SSDs aktiviert
  • Erzwungene Initialisierung von Speicherbereichen, die mit dem Userspace geteilt werden
  • 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

aktueller 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: August 3, 2017 at 20:56 pm

46 Antworten auf „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?

  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,

    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

  17. 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.

  18. 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.

Schreibe einen Kommentar

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

18 − sechs =