CoreELEC auf Ordroid N2+ wie UHS-I (SDR104) microSD Geschwindigkeit nutzen? Device Tree modifizieren?

  • Hallo,


    bei mir läuft ein CoreELEC (VDRSternELEC) auf Odroid N2+ Hardware. Installiert auf eMMC.

    Videodaten werden auf microSD abgelegt.


    Jetzt fällt auf das der interne Kartenleser microSD nicht im UHS-I (SDR104) Mode angesprochen wird.


    Gegentest mit einem nicht modifizierten CoreELEC ergibt das gleiche. Außerdem habe ich Hardkernel Ubuntu auf eMMC installiert - und siehe da UHS-I (SDR104) wird gesetzt.


    CoreELEC scheint den microsd Kartenleser, aus Kompatibilitätsgründen, absichtlich zu bremsen. Einstellen soll sich das über Device Tree... hat jemand bereits Erfahrung damit gesammelt?

    Wie lässt sich das setzen bzw. modifizieren?


    Gruß

    Rossi

  • Gegentest mit einem nicht modifizierten CoreELEC ergibt das gleiche. Außerdem habe ich Hardkernel Ubuntu auf eMMC installiert - und siehe da UHS-I (SDR104) wird gesetzt.

    Wie kann ich denn feststellen, ob der Modus verfügbar ist? Dann kann ich mal schauen, ob das unter LE funktioniert. Ich hatte danach mal gesucht, wurde aber nicht richtig schlau.


    Ich vermute entweder Kernel und/oder DeviceTree. Aber sobald klar ist, wie man das einschaltet, dann kann ich eine Integration versuchen.

  • Wie kann ich denn feststellen, ob der Modus verfügbar ist?

    mit cat /sys/kernel/debug/sd/ios oder dmesg | grep SDXC


    So soll es aussehen:

    so sieht es aus:


    Quelle

  • Ich habe die dtb patched und es wird tatsächlich "sd uhs SDR104" angezeigt. Allerdings ist das System sehr instabil, weil die Signalspannung nicht geändert werden kann (es gibt eine Fehlermeldung) und die Karte mit 3,3V statt 1,8V geröstet wird.


    Irgendwas stimmt mit dem Patch noch nicht. Ich habe den Hardkernel/Ubuntu dtb als Basis genommen:


    Jetzt muss ich mal schauen, was falsch sein könnte und dann wieder den Mut fassen, einen neuen Versuch zu starten.

    Irgendwo gibt es einen Unterschied beim vol_switch zwischen Hardkernel/CoreELEC - denke ich.


    dtbs sind spannend, aber irgendwie auch unheimlich.

  • Zabrimus Auf welchem Rechner testest Du das? Der Odroid-N2+ hat doch einen S922X-Prozessor. Du editierst aber ein device tree für einen A311D, also z.B. Radxa Zero 2. Passt das dts-file zu Deinem Rechner oder sind die device trees zufällig identisch?

  • Auf welchem Rechner testest Du das? Der Odroid-N2+ hat doch einen S922X-Prozessor. Du editierst aber ein device tree für einen A311D, also z.B. Radxa Zero 2. Passt das dts-file zu Deinem Rechner oder sind die device trees zufällig identisch?

    Ja. Es ist ein Odroid-N2+. Ich habe die Includes nachverfolgt, bis ich auf die SD-Karte gestossen bin:

    Code
    g12b_s922x_odroid_n2plus.dts (#include "coreelec_g12b.dtsi")
    coreelec_g12b.dtsi (#include "g12b_a311d_w400.dts")
    
    und darin (g12b_a311d_w400.dts) dann das
    
    &sd_emmc_b {
       // neue Version
    }

    Falls ich das jemals zum Laufen bekomme, dann will ich das explizit in das N2+ dts verschieben um keine negativen Effekte für andere Systeme zu erzeugen.


    Ich sehe gerade, es gibt auch das "MMC_CAP_1_8V_DDR". Hmm.. Vielleicht wird damit die Signalspannung von 1,8V ermöglicht. Aber wo wäre das dann im Hardkernel-Kernel zu finden? Alles seltsam. Oder liegt das evt. an unterschiedlichen Treibern?

  • Das erklärt es natürlich. Der Eintrag "MMC_CAP_1_8V_DDR" scheint für das eMMC zu sein.

    Der A311D hat sowieso noch ein Problem mit der SD-Karte unter CoreElec. Ich habe das mit einem Radxa Zero 2 getestet und da funktioniert die SD-Karte so gut wie gar nicht (Schreib- und Lesefehler, auch bei einer neuen Karte).

  • Ich habe mich bei den Werten an Hardkernel gehalten, aber wenn CoreELEC den normalen Treiber verwendet, dann wundert mich nicht mehr, das es nicht so richtig funktioniert.

    Die Dokumentation ist da ziemlich erleuchtend. Ich werde erstmal versuchen herauszufinden, ob CE nicht doch einen eigenen Treiber hat und dann welche Werte vernünftig sind.

  • So. Ich bin weiter. Ob es der große Wurf ist, weiß ich nicht. Zuerst einmal ein paar Daten:


    SHDC (ohne Patch):


    SDXC (ohne Patch):


    SDHC (mit Patch):

    SDXC (mit Patch):


    Ich habe keine anderen SD-Karten zur Verfügung und habe nur die Schreibgeschwindigkeit getestet, die für beide SDs schon zugenommen hat. Ich muss den Patch noch an die richtige Stelle bugsieren und nochmal testen. Meine Frage wäre, ob ich das schon einchecken soll oder ob jemand unabhängiges vorher Tests machen will? Ich bin mir da unsicher.


    @vdr_rossi Kompilierst du selber oder nutzt die fertigen Packages?


    Edit:

    Die SD sind auf auf dem PC 3-4 mal schneller, wobei ich nicht weiß ob da Puffer eine Rolle spielen.


    Der Patch sieht aktuell so aus:

    Mit "f_max = <200000000>;" sind gar keine Karten erkannt worden. Vielleicht gibt es noch Zwischenwerte, die funktionieren könnten.

  • Wow!

    So. Ich bin weiter. Ob es der große Wurf ist, weiß ich nicht. Zuerst einmal ein paar Daten:

    ...

    @vdr_rossi Kompilierst du selber oder nutzt die fertigen Packages?

    Die Praxis wird zeigen ob es ein großer Wurf war :]

    Teste mit einer SanDisk Extreme Pro A2 (SDSQXCD-1T00-GN6MA) SDXC welche 200MB lesen und 140MB schreiben können soll.


    Ja, ich kompiliere selber und schaue mir das heute Abend auf meiner Ubuntu vm direkt an. Benötige allerdings eine rudimentäre Anleitung, wo und wie ich das einbaue.

  • Ja, ich kompiliere selber und schaue mir das heute Abend auf meiner Ubuntu vm direkt an. Benötige allerdings eine rudimentäre Anleitung, wo und wie ich das einbaue.

    Das ist ganz einfach :)

    Den angehängten Patch in das Verzeichnis

    package_patches/CoreELEC/projects/Amlogic-ce/packages/linux/patches

    kopieren (Endung .patch) und dann neu bauen.

    Die dtb wird neu erstellt und alles paketiert.


    Sobald sicher ist, daß es funktioniert und/oder keine schädlichen Nebenwirkungen hat, werde ich den Patch direkt in das N2+-dts verlagern und committen.


    Bei den Frequenzen habe ich den Eindruck, daß die automatische Regulierung (Justierung) nach unten nicht richtig funktioniert. Weil der Treiber immer nur bei 200000000 stehen zu bleiben scheint.

    Ich werde mal schauen, ob ich da ein paar Debug-Ausgaben erzeugen kann. Ich meine in der (Hard-)Kernel Variante irgendwas dazu gelesen zu haben, als ich die beiden Versionen verglichen habe. Aber das ist nur aus dem Bauch raus...


    hardkernel-odroid-n2-sdr104.patch.txt

  • Build ist mit Patch durchgelaufen.

    Der ganze Build Vorgang war schnell durch...


    Habe das Image auf eine separate eMMC geflashed. Boot funktioniert, Setup usw. läuft.

    Aber offenbar hat er den Patch nicht angewendet.


    Komisch....


    Hatte vor dem Build noch git pull ausgeführt. Dann

    ./build.sh -config CoreELEC-20-ng -extra dynamite,channellogos -addon dvb-latest,dvb-tools,network-tools,system-tools


    Wie erreiche ich das er nicht nur in Teilen baut, sondern alles komplett neu baut?

  • Sobald ein Paket Änderungen an der package.mk oder im Patch-Verzeichnis hat, sollte es neu gebaut werden.

    Du kannst aber mit ./clean-package.sh linux das Löschen des linux Pakets erzwingen und danach mit

    ./build.sh -config CoreELEC-20-ng -package linux einzeln bauen.

    Du solltest dann im Log sehen, ob der Patch angewandt wurde.

    Danach baust du ein Image wie gewohnt.


    Im Verzeichnis CoreELEC/build..../build/linux findest du die Quellen nach dem Patchen. Da kannst du mal nach der gepatchten Datei suchen...


    Ansonsten wird alles komplett neu gebaut, wenn du CoreELEC/build.... löscht, aber dann dauerts. Das brauchst du evtl. nur, wenn sich die toolchain geändert hat.

  • Ok, habe es umgesetzt. Aber auch beim zweiten Versuch wird der Patch nicht angewendet:

    Finden unterCoreELEC/build..../build/linux... keinen Patch?


    Morgen probiere ich tiefer einzusteigen....

  • Ich kann keinen Fehler sehen. Durch die ganzen Tests und Versuche, habe ich das permanent so gemacht.


    Die package_patches werden in der Build-Info am Start leider nicht ausgegeben.

    Für doch mal bitte folgendes aus:

    Code
    ./build.sh -config CoreELEC-20-ng -patchonly 

    Dann sollte der Patch in das richtige Verzeichnis kopiert werden:

    Code
    ls CoreELEC/projects/Amlogic-ce/packages/linux/patches/hardkernel-odroid-n2-sdr104.patch


    Und nach einem normalen Build als finalen Check die Datei lesen:

    Code
    cat CoreELEC/build.CoreELEC-Amlogic-ng.arm-20/build/linux-ab03043a776354e02be86d06007751f652680c00/arch/arm64/boot/dts/amlogic/g12b_a311d_w400.dts

    Darin müsste sich der neue Eintrag

    befinden.

  • Ich glaube, der Patch muss nachpackage_patches/CoreELEC/projects/Amlogic-ce/packages/linux/patches, ansonsten wird er nicht angewendet.

    Vergiss es, das hast du ja geschrieben. Hab versehentlich CoreELEC/packages/linux/patches/ gelesen, das wäre nämlich falsch.

  • Habe nun ./build.sh -config CoreELEC-20-ng -patchonly ausgeführt.


    Im Pfad ist der Patch vorhanden:

    Code
    rossi@ubuntu:/home/rossi/VDRSternELEC/CoreELEC/projects/Amlogic-ce/packages/linux/patches# ls hardkernel-odroid-n2-sdr104.patch
    hardkernel-odroid-n2-sdr104.patch

    Inhalt:

    Auch hier liegt ein g12b_a311d_w400.dts

    Code
    rossi@ubuntu:/home/rossi/VDRSternELEC/CoreELEC/build.CoreELEC-Amlogic-ng.arm-20/build/linux-ab03043a776354e02be86d06007751f652680c00/arch/arm64/boot/dts/amlogic# ls g12b_a311d_w400.dts
    g12b_a311d_w400.dts

    mit diesem Inhalt:

    Am Ende das erzeugte Image auf eMMC geflashed:

    Ergebnis bleibt:

    verdammt.

  • Meine emmc wurde mal wieder neu geflasht mit einem frisch erstelltem Build. CoreELEC konfiguriert, ssh gestartet, eingeloggt, sd eingesteckt und geprüft.

    Es sieht so aus, wie erwartet. Es hätte mich auch gewundert, wenn das Image und das Update-Tar unterschiedliche dtbs haben.

    Reboot mit eingesteckter (verschiedenen) SD und auch da funktioniert es.


    Eine SD wurde bei dir ja erkannt, aber die Werte stimmen nicht. Hast du noch andere SD, die du probieren kannst?


    Ich verstehe es nicht. Kannst du die /flash/dtb.img irgendwie bereitstellen? Dann kann ich die decompilieren und schauen, ob alles drin ist.


    Hat noch jemand anderes die Möglichkeit den Patch zu testen? Mir gehen die Ideen aus.


    Edit:

    Oder anders. Ich hänge die dtb an, von der ich weiß, das sie eigentlich funktionieren sollte.

    Code
    mount -o remount,rw /flash
    cd /flash
    mv dtb.img dtb.img.Backup
    cp <Pfad zur neuen unzippten dtb> dtb.imb
    reboot

    dtb.img.zip

  • So, bin weiter gekommen.


    Gut das ich einen zweiten Odroid N2+ zum testen habe. War jetzt so mutig und habe das oben erstellte Image auf meinem schon fast produktiv laufenden Odroid N2+ eingespielt. Dort steckt auch die schnelle 1TB microSD drin.


    Ergebnis:

    Das ist ein Grund zur Freude :)


    Warum es auf meinem Test Odroid N2+, welcher - bis auf 64GB microSD SanDisk Extreme Pro -identisch ist, nicht klappt? Kann ja nur die microSD Karte sein...

    Da schaue ich nochmal mit einer SanDisk Ultra Karte.


    Danke für die Geduld! Meinetwegen kann der Patch übernommen werden.

  • Meinetwegen kann der Patch übernommen werden.

    Ich bin mir immer noch unsicher, ob ich den Patch generell übernehmen soll und es in allen Lebenslagen funktioniert. Ich habe jetzt so 4 verschiedene SD probiert, die funktionieren. Dazu kommen noch deine. Also gibt es Hoffnung.


    Ich werde mich dann mal dranmachen, den Patch nach N2+ zu schieben.

Jetzt mitmachen!

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