Images für ARM Einplatinenrechner erstellen for dummys

  • Irgendwas scheint am Kernel nicht zu passen. Die Pinguine scheinen schon ein Teil des Kernelimages zu sein. So wie es ausschaut startet U-Boot den Kernel denn wenn ich etwas an den Speicheradressen ändere kommt gar nichts.

  • Vielleicht musst du einfach mal einen Kernel ohne Patches und nur mit der defconfig testen und das Board erstmal zum Booten kriegen.

    Evtl. stimmt auch am Rootfs was nicht? Hast du ein Kabel um den UART anzuzapfen? https://linux-sunxi.org/PineH64#Locating_the_UART

  • OK Kernel läuft mit allen Patches und wenn man bei Platform Selection nur den Allwinner auswählt baut er auch nicht lange :)8) zum Glück hab ich von den FTDI Adaptern ein paar rum liegen, ohne den wäre es wohl noch länger gegangen. Jetzt mach ich erst mal Pause und morgen werde ich das ganze mal noch dokumentieren bevor es weiter geht.

  • Schön. Das Schlimmste hast du hinter dir und vielleicht sogar noch was über Allwinner gelernt ^^

    Jetzt ist's “nur“ noch VDR :)

  • Erstellen der Dateien für die SD Karte


    Um rootfs zu erstellen habe ich debootstrap benutzt, dazu müssen noch folgende Pakete installiert werden:

    sudo apt-get install debootstrap qemu-user-static


    Ich habe mir Ubuntu Focal als Unterbau ausgesucht, dazu wird das rootfs unter /mnt eingebunden

    debootstrap --arch=arm64 --foreign focal /mnt/


    jetzt muss qemu ins Zielsystem kopiert werden

    cp /usr/bin/qemu-aarch64-static /mnt/usr/bin/


    anschließend wechselt man chroot ins root-Verzeichnis des Zielsystems

    chroot /mnt /usr/bin/qemu-aarch64-static /bin/sh -i


    und stellt dieses fertig mit

    /debootstrap/debootstrap --second-stage


    im Zielsystem ändert man noch das root Passwort

    passwd


    und aktiviert noch die Serielekonsole auf ttyS0

    systemctl enable serial-getty@ttyS0.service


    mit exit verlässt man die chroot Umgebung wieder.


    In das rootfs kopiert man noch die Module und die Header Dateien, dazu wechsel ich in's Source-Verzeichnis

    cd /home/"Dein HomeDir"/PineH64/sunxi/linux

    cp -R newmodules/. /mnt/usr

    cp -R newheader/. /mnt/usr


    Mit einem Editor ändert man noch den Hostnamen, fstab,Netzwerkkonfiguration und die apt sourcen.

    sudo nano /mnt/etc/hostname

    Code
     "name_der_neuen_Maschiene"

    sudo nano /mnt/etc/fstab

    Code
    none        /tmp    tmpfs    defaults,noatime,mode=1777    0    0
    /dev/mmcblk0p2    /    ext4    defaults    0    1
    /dev/mmcblk0p1    /boot    vfat    defaults    0    2

    sudo nano /mnt/etc/netplan/01-network-manager-all.yaml

    Code: 01-network-manager-all.yaml
    network:
     version: 2
     renderer: networkd
     ethernets:
      eth0:
       dhcp4: true

    sudo nano /mnt/etc/apt/sources.list

    Die schon vorhandenen Zeile ändert man dann in

    Code: /etc/apt/sources.list
    deb http://ports.ubuntu.com/ focal main universe

    Das ganze kann man dann mit

    mkdir /home/"Dein HomeDir"/files_for_sdcard/

    cd /mnt

    sudo tar -cjpf /home/"Dein HomeDir"/files_for_sdcard/rootfs.tar.bz2 .

    zu einem Archiv verpacken, welches man später auf der sd-Karte wieder enpacken kann. In diese Verzeichnis packe ich jetzt alles was ich für den Systemstart benötige. Das rootfs unter /mnt kann jetzt wieder gelöscht werden


    Das Kernel Image befindet sich im Sourceverzeichnis unter arch/arm64/boot/ nach einem Wechsel in dieses Verzeichnis cd /home/"Dein HomeDir"/PineH64/sunxi/linux/arch/arm64/boot/wird das Image mit

    cp Image /home/"Dein HomeDir"/PineH64/files_for_sdcard/  kopiert.


    Ebenfalls werden für den PineH64 die Dateien sun50i-h6-pine-h64-model-b.dtb sun50i-h6-pine-h64-model-b.dts benötigt, diese kopiert man mit

    cp dts/allwinner/sun50i-h6-pine-h64-model-b.dtb dts/allwinner/sun50i-h6-pine-h64-model-b.dts /home/"Dein HomeDir"/PineH64/files_for_sdcard/


    Aus dem Buildverzeichnis von U-Boot wird die Datei u-boot-sunxi-with-spl.bin benötigt, dazu wechselt man in dieses Verzeichnis cd /home/"Dein HomeDir"/PineH64/sunxi/u-boot-2021.01/und kopiert die Datei mit

    cp u-boot-sunxi-with-spl.bin /home/"Dein HomeDir"/PineH64/files_for_sdcard/ 


    Um das ganze später booten zu können benötigt u-boot noch die datei boot.scr, diese wird mit den u-boot tools mit dem Programm mkimage generiert.

    Diese lege ich gleich im Verzeichnis files_for_sdcard an.

    nano /home/"Dein HomeDir"/PineH64/files_for_sdcard/boot.cmd


    Code
    fatload mmc 0:1 0x40080000 Image
    fatload mmc 0:1 0x4FA00000 sun50i-h6-pine-h64-model-b.dtb
    
    setenv bootargs console=ttyS0,115200 earlyprintk root=/dev/mmcblk2p2 rootwait panic=10
    
    booti 0x40080000 - 0x4FA00000

    Die Speicheradressen sind für den PineH64 gültig ob diese für alle H6 SOCs gelten kann mir gerne mitgeteilt werden, dann vermerke ich es hier.


    Aus dem Arbeitsverzeichnis (sunxi) wandelt man die die boot.cmd in boot.scr mit dem Befehl

    u-boot-2021.01/tools/mkimage -C none -A arm -T script -d ../files_for_sdcard/boot.cmd ../files_for_sdcard/boot.scr



    Damit hat man alle Dateien für die SD Karte zusammen und kann sich daran machen diese zu erzeugen.

    7 Mal editiert, zuletzt von JoeBar ()

  • Erzeugen der SD Karte


    Ich habe meine SD Karte mit einem USB SD Karten Adapter im Raspberry erstellt, Verwendet habe ich eine 16 GB Sundisk.


    Um die Karte zu identifizieren einfach tail -f /var/log/syslog ausführen den Reader einstecken und sich das Device merken, bei mir /dev/sda.


    Als erster Schritt wird das erste MB der Karte mitels dd überschrieben

    sudo dd if=/dev/zero of=/dev/sda bs=1M count=1

    danach kann partitioniert werden.


    Ich habe per sudo fdisk /dev/sda zwei primäre Partitionen angelegt. Die erste mit 500MB als FAT und mit bootflag. Die zweite vom Typ ext4 mit dem restlichen Speicherplatz der Karte.


    Den Bootloader u-boot-sunxi-with-spl.bin habe ich per scp mit den restlichen Dateien aus dem Orner files_for_sdcard von buildsystem auf den pi übertragen.

    (Vom buildsystem aus als Beispiel)

    scp -r files_for_sdcard/ pi@"IP des Raspberry":/home/pi/PineH64

    Dann auf dem pi in das Verzeiniscd /home/pi/PineH64/files_for_sdcard wechseln

    Geschrieben wird er durch

    sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/sda bs=1024 seek=8


    Um auf die Partitionen schreiben zu können werden diese mit einem Dateisystem versehen.

    sudo mkfs.fat /dev/sda1

    sudo mkfs.ext4 /dev/sda2


    sda1 wird jetzt nach /mnt per mount ins Dateisystem eingehängt

    sudo mount /dev/sda1 /mnt

    und die nötigen Dateien dort hin kopiert

    sudo cp Image boot.scr sun50i-h6-pine-h64-model-b.dtb /mnt  

    danach kann sda1 wieder ausgehängt werden und sda2 wird eingehängt

    sudo umount /dev/sda1

    sudo mount /dev/sda2 /mnt

    das vorher komprimierte rootfs wird jetzt auf sda2 entpackt werden

    sudo tar xvjf rootfs.tar.bz2 -C /mnt

    anschließend wieder unmounten

    sudo umount /dev/sda2

    und die SD Karte in den PineH64 stecken und starten.

    Nicht wundern der H6 kann bisher keine Ausgabe von U-Boot oder Kernelmessages und zeigt direkt den Login.


    Alle, die beim ersten Starten sehen wollen was vor sich geht, sollten ein FTDI USB Adapter an den UART klemmen, beim PineH64 sind das die Pinheader neben dem HDMI Anschluss (TX und RX kreuzen). Die Belegung findet man hier.

    Verbinden kann man sich mit einem Terminalprogramm, in meinem Fall habe ich Putty benutzt. Einfach auf Seriel schalten den Com Port eingeben und die Geschwindigkeit auf 115200 Baud einstellen.


    Hier geht's weiter

    9 Mal editiert, zuletzt von JoeBar ()

  • rell ich versuche gerade ffmpeg zu compilieren leider bekomme ich einen Fehler

    V4L2_BUF_FLAG_M2M_HOLD_CAPTURE_BUF deutet evtl auf einen fehlenden kernel Patch hin. Ich habe aber alle eingespielt! Weist Du wie man das zum Laufen bringt?

  • Wie baust du ffmpeg und mit welcher Version und Patches?

  • Ich habe die Version von LE genommen, also das tar.gz Archiv 4.3.1-Matrix-Beta1 heruntergeladen. Die Patches von LE für ffmpeg sowie auch die allwinner Patches.

    In der Headerdatei videodev2.h unter /usr/include/linux ist die Variable V4L2_BUF_FLAG_M2M_HOLD_CAPTURE_BUF auch definiert.

    ffmpeg habe ich folgendermaßen konfiguriert evtl. fehlt da noch was.

    Muss man den Speicherort der Headerdateien im rootfs noch irgendwo eintragen? Ist doch eigentlich der Standartpfad.

  • OK ich habe ein Spur... Irgendwas muss beim Header installieren schief gelaufen sein. War wohl eine Version in der ich noch nicht alle Kernelkonfigs aktiviert hatte.

    ffmpeg baut gerade neu, wir werden sehen ;)

  • Ja, header können einen manchmal ärgern..

    Bei der FFmpeg config hab ich bedeutend weniger. Ich glaube nur das, was in https://github.com/LibreELEC/L…timedia/ffmpeg/package.mk als Variable gesetzt wird.

    Vaapi und vdpau habe ich deaktiviert.

  • Jetzt ist es durchgelaufen :)

  • Bild hab ich jetzt auch schon, jetzt muss ich mal schauen was man da so alles am vdr-plugin-softhddevice-drm einstellen kann, das Bild ist ziemlich streifig.

    Sound hab ich noch keine und auf die Tastatur reagiert der VDR auch noch nicht.

  • So Sound ist da und war auch da, ich musste nur den Eingang am Versträrker wechseln *g*

    Wenn mir jetzt noch jemand sagen kann wie man die Tastatur in so einem Minimalsystem zum laufen bringt bin ich erstmal happy :)

  • OK Ich hab es gefunden, muss in vdr.service eingetragen werden. Jetzt geht es ans testen der HD+ Kanäle

  • OK HD+ Läuft auf dem Pine H64 :)

    So jetzt mach ich erst mal Pause

  • Kannst du was dazu erzählen wie sich das anfühlt, normale Umschaltzeiten?

    CKone: yavdr-ansible/18.04 LTS/2.4.1/kodi18 auf Intel DH67BL, Intel Celeron G540, 2x 2GB Kingston DDR3, Zotac GT630 1GB, S2-1600, Ocz Agility 3 60GB, LG GH24NS DVD, 15.6" Selbstbau TFT, Harmony 665, CIR Selbstbau - das Ganze im Silverstone SST-SG03B
    CKtwo: yavdr-ansible/18.04 LTS/2.4.1/kodi18 auf Intel DH67BL, Intel Celeron G1610, 2x 2GB Corsair DDR3, Zotac GT630 1GB, TT S2-1600, Ocz Vertex 2 50 GB, 92 Kanal Seduatmo, Harmony 665, atric USB
    CKthree: yavdr-ansible/22.04 LTS/2.6.1/kodi19.3 auf Intel NUC, Celeron J4005, UHD Graphics 600, 4GB Crucial DDR4, Ocz Vertex2 50 GB, Harmony 350

    PowerEdge: Ubuntu Server 16.04 LTS / VDR 2.4.1 auf Dell PowerEdge T20, Xeon E3-1225 v3, 16GB ECC DDR3, 2x Cine S2 V6 mit Duoflex, Samsung 840 EVO 120GB, 3x WD White WD80EZAZ 8TB in SW Raid5



  • Komischerweise streikt RTL gerade noch etwas... schicken da die Sendere andere Streams? Bei den Sendern bei denen es funktioniert ca. 2 Sekunden. Ich musste dvbapi Version 2.2.5 gegen libdvbcsa bauen damit es auf arm64 funktioniert der aktuelle master streikt mit Fehlermeldungen. Ansonsten werde ich das heute Abend noch ein bischen testen.

  • Bei den Sendern bei den Kein Bild kommt bekomme ich die Fehlermeldung [softhddev] invalid PES audio packet kann mir da jemand nen Tip geben?

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!