Images für ARM Einplatinenrechner erstellen for dummys

  • git config --global user.name "Your Name"

    git config --global user.email mail@example.com


    Ich habe mir das LE Verzeichnis geklont, kopiere die Patches je Verzeichnis in das Kernel Hauptverzeichnis und dann kannst du sie mit "git am *.patch" auf einmal einpielen und jeder Patch wird zu einem Commit. Das vereinfacht die Sache.

  • Hab es gerade ausprobiert, klappt bestens :thumbup:


    Bei Patch 0030 kam dann dass


    Wende an: media: cedrus: h264: Improve buffer management

    .git/rebase-apply/patch:36: space before tab in indent.

    /* Adjust for the field */

    warning: 1 Zeile fügt Whitespace-Fehler hinzu.


    Ist wahrscheinlich nicht schlim so ein Leerzeichen oder?


    Ansonsten vereinfacht das die Sache sehr.

  • Also Kernel 5.10.4 mit den Allwinner patches, Allwinner crust patches und den H6 Patches erfolgreich gepatcht, die default Config gebaut, jetzt würde der Punkt Menuconfig kommen. Jetzt sollte ich wissen was ich da alles aktivieren muss/soll.

  • Du kannst ja einfach mal nur die defconfig bauen, damit du etwas hast, das startet... In der Zwischenzeit überleg ich mir, was du brauchst ;)

  • Perfekt :thumbup:

  • CONFIG_DRM_DW_HDMI_I2S_AUDIO

    CONFIG_SND_SIMPLE_CARD

    CONFIG_VIDEO_SUNXI_CEDRUS

    CONFIG_CMA_SIZE_MBYTES auf ca. 256

    CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE

    (CONFIG_DRM_LIMA) für späteres OpenGL evtl.


    sind so die ersten, die mir einfallen. Ich weiß es zwar nicht, hoffe aber, dass der Rest in der defconfig schon drin ist.

  • Kann ich die DRM Treiber für Allwinner alle in den Kernel kompilieren oder soll ich da welche als Module lassen?


    DRM Support for Allwinner A10 Display Engine wird benötigt für DRM_DW_HDMI

    Allwinner A10 HDMI Controller Support

    Allwinner A10 HDMI CEC Support

    Support for Allwinner A10 Display Engine Backend

    Allwinner A31 MIPI-DSI Controller Support

    Support for Allwinner version of DesignWare HDMI wird benötigt für DRM_DW_HDMI

    Support for Allwinner Display Engine 2.0 Mixer

  • Weiß ich nicht, sollte beides kein Problem sein. Du kannst ja mit <HELP> schauen, was für H6 überhaupt relevant ist...

  • Hier gehts weiter, da im Anfangs Tread schon die 10000 Zeichen überschritten wurden ;)


    Jetzt geht es an's Kernel bauen


    Als erstes wieder ins Arbeitsverzeichnis wechseln und mit

    git clone https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ die letzten Linux stabel Quellen clonen und bei mir eine Weile warten :whistling:

    Nachdem alles heruntergeladen wurde wechseln wir ins Verzeichnis /linux

    und wechseln auf den Kernel den aktuell LE verwendete (siehe hier)

    git checkout v5.10.4

    Um "git am" anzwenden muss man vorher noch git einwenig konfigurieren. Dazu folgendes eingeben

    git config --global user.name "Your Name" 

    git config --global user.email mail@example.com

    Um alle Kernel einfach anwenden zu können holen wir uns auch noch LE aus dem git mit

    git clone https://github.com/LibreELEC/LibreELEC.tv.git

    danach können wir die Patches ganz einfach anwenden. Für die Allgemeinen Allwinner Patches lautet der Befehl dann wiefolgt

    git am -i ../../LibreELEC/LibreELEC.tv/projects/Allwinner/patches/linux/*.patch

    für die crust Patches

    git am -i ../../LibreELEC/LibreELEC.tv/projects/Allwinner/patches/linux/crust/*.patch

    und noch für die H6 spezifischen Patches

    git am -i ../../LibreELEC/LibreELEC.tv/projects/Allwinner/devices/H6/patches/linux/*.patch


    Sind die Patches alle eingespielt kann die default Konfiguration (64bit) mit

    ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- make defconfig

    erstellt werden.

    Per Menuconfig (64bit) wird danach der Kernel konfiguriert

    ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- make menuconfig


    Um den Kernel nicht für alle möglichen ARM Prozessoren zu kompilieren, sollte man unter Platform Selection nur Allwinner auswählen. So bleibt der Kernel schön schlank.


    Aktivieren sollte man die folgenden Punkte:


    CONFIG_DRM_DW_HDMI_I2S_AUDIO

    CONFIG_SND_SIMPLE_CARD

    CONFIG_CMA_SIZE_MBYTES auf ca. 256

    CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE

    (CONFIG_DRM_LIMA) für späteres OpenGL auf H3 und H5 evtl.

    (CONFIG_DRM_PANFROST) für späteres OpenGL auf H6 evtl.

    CONFIG_MEDIA_SUPPORT

    CONFIG_MEDIA_CONTROLLER

    CONFIG_MEDIA_CONTROLLER_REQUEST_API

    CONFIG_V4L_MEM2MEM_DRIVERS

    CONFIG_VIDEO_SUNXI_CEDRUS

    CONFIG_VIDEO_MEM2MEM_DEINTERLACE

    CONFIG_VIDEO_SUN50I_DEINTERLACE

    CONFIG_RC_CORE

    CONFIG_LIRC

    CONFIG_IR_RC5_DECODER ---> Je nachdem welches Protokoll eure Fernbedienung verwendet
    CONFIG_IR_SUNXI

    CONFIG_INPUT_UINPUT

    CONFIG_PHY_SUN50I_USB3



    Damit alles wieder sauber durchläuft muss noch mit

    sudo apt-get install libssl-dev

    das Development Paket für ssl installiert werden.


    Danach wird der Kernel mit

    ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- make -j4 Image

    gebaut.


    Jetzt müssen noch der Devicetree, die Module und die Header gebaut werden.

    ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- make -j4 dtbs

    ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- make -j4 modules

    die neu kompilierten Module kopiere ich ins Verzeichnis "newmoduls" im Source Verzeichnis

    ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- INSTALL_MOD_PATH=./newmodules make modules modules_install

    die neuen Header landen im Verzeichnis "newheader"

    make ARCH=arm64 INSTALL_HDR_PATH=./newheaders headers_install


    Mal wieder die 10000 Zeichen überschritten ;) hier geht es weiter

    18 Mal editiert, zuletzt von JoeBar ()

  • rell Bei dem U-boot Teil brauch ich ein wenig Unterstützung, da steig ich nicht so richtig durch. Aktuell bin ich bei Abschnitt Bootloader bei Bootable SD Card.

    u-boot-sunxi-with-spl.bin habe ich bereits mit dd auf die SD Karte geschrieben. Muss ich für den nächsten Schritt U-boot auf dem Pine64 starten und die Befehle dort in der Konslole eingeben?

  • Nein, du musst die SD Karte so herrichten, dass sie auf Konsole bootet.


    Kurzanleitung:

    - SD Karte partitionieren (am besten / und /boot)

    - U-Boot auf SD-Karte schreiben

    - SD Karte mounten

    - boot.cmd/boot.scr erstellen und nach /boot kopieren

    - Kernel nach /boot kopieren

    - *.dtb nach /boot kopieren

    - Rootfs auf die Karte schreiben

    - Kernel-Module nach /lib/modules schreiben

    - SD Karte unmounten

    - Booten (hoffentlich)

  • rell Bei dem U-boot Teil brauch ich ein wenig Unterstützung, da steig ich nicht so richtig durch. Aktuell bin ich bei Abschnitt Bootloader bei Bootable SD Card.

    u-boot-sunxi-with-spl.bin habe ich bereits mit dd auf die SD Karte geschrieben. Muss ich für den nächsten Schritt U-boot auf dem Pine64 starten und die Befehle dort in der Konslole eingeben?

    Dir reicht der dd Befeh, dann kannst du mit dem Partitionieren weitermachen.

  • Also hat der nächste Schritt ind der sunxi Anleitung nur etwas mit einem möglichen Update zu tun oder?

  • Die boot.cmd hab ich mal so gemacht. Die Speicheradresse hab ich hier her

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

    Stimmt das so annähernd?

  • rootfs kann ich arm64 von ubuntu focal von hier nehmen oder?

    Da hab ich mich vertan das schein wohl irgendwas für's windows sub system zu sein.


    Dann von hier

    Einmal editiert, zuletzt von JoeBar ()

  • Die boot.cmd hab ich mal so gemacht. Die Speicheradresse hab ich hier her

    Stimmt das so annähernd?

    Versuchs einfach. Sieht gut aus.


    rootfs kann ich arm64 von ubuntu focal von hier nehmen oder?

    Da hab ich mich vertan das schein wohl irgendwas für's windows sub system zu sein.


    Dann von hier

    Wenn das root fs sind, ja. Ich hab mir bisher immer ein Debian selbst gemacht.

  • Ich hab jetzt mal alles auf die Karte gepackt und bekomme vier Pinguine und einen blinkenden Cursor zu sehen... hat er zu diesem Zeitpunkt das Kernel Image schon gefunden?

  • Hm, keine Ahnung wie weit er da bootet. Ich sehe bei mir am Anfang etwas UBoot Gedöns und dann kommt irgendwann "Starting Kernel", dann wirds schwarz und irgendwann taucht die Konsole auf... Letztendlich sollte irgendwann die Konsole kommen... wohl abhängig vom RootFS.

  • Verwendest du als erste Partition fat und als zweite ext4?

Jetzt mitmachen!

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