Matrix Arm mini PC Kernel konfigurieren

  • Hallo Leute,


    ich habe ein kleines Problem beim Konfigurieren des des Kernels für das Board. Ich habe einige Konfigurationen (multi_v7_defconfig, imx_v6_v7_defconfig und die von Zille) mit verschiedenen Kernelversionen (v4.6 v4.7 v3.19 v4.1) ausprobiert. Dafür habe ich mir das offizielle ubuntu_12.04 Image von TBS draufgespielt, u-boot auf die aktuellste Version gebracht und die Kernel kompiliert. Leider konnte ich mit keinem der Kernel das Board erfolgreich starten. Meistens bleibt es beim "starting Kernel ..." hängen, bzw einmal bin ich auch weiter gekommen, aber dann fand er die rootfs partionen nicht mehr.


    Weiß jemand was man beim Konfigurieren & Kompilieren des Kernels berücksichtigen muss oder hat jemand Tipps wie ich weiter vorgehen kann um meinen Fehler zu finden?


    Ich bedanke mich schonmal im Vorraus,
    Flo

  • Ungefaehr ab hier hatte ich Einiges ueber das Aufsetzen eines eigenen Systems auf dem Matrix-Board geschrieben. Das gilt alles so auch heute noch. Ich habe auf meinem modifizierten Matrix-Board aktuell u-boot-2016.09 und linux-4.8-rc6 laufen, allerdings mit angepasster Minimal-Linux-Config. Mir ist aber nicht bekannt, dass die defconfigs nicht mehr laufen wuerden, die brauchen halt laenger zum Uebersetzen. Wie in dem ersten verlinkten Thread beschrieben, benoetigt man eine gegenueber dem TBS-Original angepasste Linux-Command-Line im u-boot fuer Mainline-Kernel.


    Mit konkreten Fragen kannst Du Dich gerne hier nochmal melden...


    Gruss,
    S:oren

  • Hey, danke für die Hilfe :)
    Den Thread hatte ich komplett gelesen und mich auch an die Anweisungen gehalten. Allerdings habe ich grade festgestellt, dass wenn ich das "rw" bei bootargs_mmc3 nicht mitangebe, der Kernel beim starten hängen bleibt. Mit "rw" startet der Kernel. Ich benutze grade die Version 4.1.9 und stehe vor dem Problem, dass trotz der root-Angabe (root=/dev/mmcblk0p1) der Kernel in mmcblk1p1 nach einem rootfs sucht und natürlich nicht fündig wird. In der Kernel-config ist unter "boot options" nointrd console=ttymxc0,115200 root=/dev/mtdblock2 rw rootfstype=jffs2 ip=off eingetragen. In der Einstellung darunter ist allerdings auch "Use bootloader kernel arguments if available" markiert.
    Liegt es an diesen Einstellungen, dass der Kernel nach mmcblk1p1 sucht oder warum macht er das und nimmt nicht mmcblk0p1 ?

  • Der Kernel nimmt schon immer das angegebene root-Device. Nur ist es bei diesem Board leider so, dass die Numerierung der mmcblk-Devices davon abhaengt, ob eine (mini)SD-Karte steckt oder nicht. Ohne SD-Karte ist das eingebaute eMMC-Modul mmcblk0, sonst mmcblk1 bzw. mit 2 gesteckten Karten mmcblk2. Gesteckte Karten draengeln sich also vor, zuerst die miniSD, dann die "normale" SD, dann eMMC.


    Edit: Das gilt so natuerlich nur fuer beim Booten steckende Karten. Steckt man nachtraeglich eine Karte ein, dann ist die eMMC ja schon mmcblk0 und die neu gesteckte Karte bekommt mmcblk1. Bootet man nun neu, vertauschen sich die Device-Namen...


    Gruss,
    S:oren

  • So den Kernel 4.7.4 konnte ich leider mit der config imx_v6_v7_defconfig nicht zum laufen bekommen. Warscheinlich muss da wohl noch etwas konfiguriert werden.
    Der Kernel 4.1.9 läuft zum Glück ja, allerdings wird kein usb stick oder so erkannt, wenn ich meine externe einstecke. Unter /dev wird mir zwar sda,sda1,sda2 angezeigt, nur leider wird mir beim mounten gesagt, dass es kein valid block device ist und auf unter fdisk -l wird die hdd nicht aufgelistet. Es muss ja irgendwie mit einem Einstellungen zu tun haben, da es unter dem originalen Kernel wunderbar läuft.
    Gibt es bestimmte Einstellunge die aktiviert sein müssen? Ich lad mal meine config hoch

  • So den Kernel 4.7.4 konnte ich leider mit der config imx_v6_v7_defconfig nicht zum laufen bekommen. Warscheinlich muss da wohl noch etwas konfiguriert werden.

    Keine Ahnung, was da passiert ist.


    Ich habe meine configs fuer linux-4.1 bis 4.8 angehaengt. Achtung, das sind Minimalconfigs fuer meine Beduerfnisse. Es sind sehr wenige Treiber fuer USB-Geraete konfiguriert. Wenn man also z.B. fuer die Tastatur ein Spezialmodul braucht, sollte man das rechtzeitig aktivieren. Wenn man andererseits Treiber fuer meine WLAN/DVB-Sticks und TV-Karte nicht braucht (und die Firmware evt. nicht hat), kann man das alles natuerlich auch gerne deaktivieren...


    Gruss,
    S:oren

  • Das imx_v6_v7_defconfig nicht mehr läuft ist mir auch aufgefallen. Ich hab es etwas eingegrenzt. Die angehangene config.txt läuft. config_defekt.txt erzeugt:


    Beim anschauen des diffs ist mir FIQ aufgefallen. Kann aber nicht sagen ob es daran liegt. Das nicht laufende Kernel ist auch reichlich 1 MB größer.


    Gruß zille

  • Es wird voraussichtlich einen u-boot-Fix geben (Version 2016.11?), so dass dieser Workaround dann nicht mehr noetig sein wird.


    Auch mit dem u-boot-2016.09 gibt es eine Moeglichkeit, einen original mit der imx_v6_v7_defconfig gebauten Kernel >=4.4 zu laden. Dazu am u-boot-Prompt

    Code
    setenv bootm_mapsize 0x10000000
    saveenv

    eingeben.


    Edit 20161019: Ab u-boot-2016.11-rc2 ist die bootm_mapsize korrigiert, man braucht keinen Workaround mehr in den Kernel-Settings oder dem u-boot-Environment.


    Gruss,
    S:oren

  • Das hört sich alles schon mal vielversprechend an. Das werde ich später mal ausprobieren.
    Ich hab jetzt erstmal deine config für 4.7.4 benutzt und die dvb-firmware entfernt S:oren, doch leider läuft da wohl beim laden noch etwas schief. Der Kernel lädt und die vier Pinguine erscheinen auch, doch dann kommt die Meldung: "[1.212878] imx6q-pcie 1ffc000.pcie: phy link never came up" und er macht einfach nicht weiter. Ich habe an dem Board auch keine pci card drin. Muss dafür eine drin sein oder woran kann der Fehler liegen?

  • es gab noch eine Fehlermeldung über die Freescale Generic ASoC Sound Card, dass da was nicht funktionieren würde.Die habe ich dann in der config einfach mal deaktiviert. Was mir noch aufgefallen ist, dass wenn der Kernel beim laden "hängt" und ich eine SD-Karte einstecke, er einen kernel panic mit der Meldung: "- not snycing: No working init found Try passing init= option to kernel." macht. Entferne ich die SD-Karte wieder zeigt er an das mmc0: card 1234 entfernt wurde und beim erneuten einstecken zeigt er auch die Größe und so an. Also komplett scheint der wohl nicht zu hängen.


    Ich habe den imx6q-tbs2910.dtb benutzt.


    Zur Kompilierung mache ich immer folgendes:


    - nach make distclean config erstellen.
    - make ARCH=arm CROSS_COMPILE=/media/flo/Linux/gcc-linaro-5.3.1-2016.05-rc2-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf- zImage
    - make ARCH=arm CROSS_COMPILE=/media/flo/Linux/gcc-linaro-5.3.1-2016.05-rc2-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf- dtbs
    - make ARCH=arm CROSS_COMPILE=/media/flo/Linux/gcc-linaro-5.3.1-2016.05-rc2-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf- modules
    - make ARCH=arm CROSS_COMPILE=/media/flo/Linux/gcc-linaro-5.3.1-2016.05-rc2-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf- INSTALL_MOD_PATH=out modules_install (out wurde vorher gelöscht)


    und dann kopiere ich die sachen entsprechend auf das board auf das board. zImage und .dtb kommen in den boot Ordner und die modules unter /lib/modules

  • Auch mit dem Kernel 4.8.0-rc5 bekomme ich folgendes raus:



    und danach passiert halt nix mehr

  • Soundkarte, hm. Welche Board-Version hast Du denn? Ich habe V2.1, kann sein, dass es da zu V1.3 noch Unterschiede gibt.


    Wenn er kein init findet, dann hast Du das falsche root-Filesystem. Da muss das angegeben sein, wo auch /sbin/init drauf ist. Wie schon geschrieben ist die Nummerierung von 'SD-Karte oder nicht' abhaengig.


    Vielleicht braucht Dein root-Filesystem andere console-Settings. Ich habe im u-boot

    Code
    setenv bootargs 'console=ttymxc0,115200 console=tty1 consoleblank=0 root=/dev/mmcblk0p1 rootwait rw'

    Damit gibt's die Bootmeldungen + einen Login auf der seriellen Konsole und ueber HDMI (root evt. anpassen!).


    Laut Deinen Boot-Meldungen hast Du _kein_ richtiges u-boot-2016.09, kein aktives HDMI+USB-Keyboard und keinen Workaround fuer 3G/1G-Kernel, aber offenbar eine 2G/2G-Kernel-Konfiguration.


    Gruss,
    S:oren

  • Auf meinem Board steht V2.1 drauf.
    Die bootargs sind so wie vom original, nur das bei bootargs_mmc3 das rw hinzugefügt wurde. bootcmd wurde entsprechend zum laden des Kernels angepasst. Als rootfs ist noch das Ubuntu 12.04 drauf. HDMI ist angeschlossen und funktioniert soweit auch. Eine usb-Tastur ist derzeit nicht angeschlossen. Arbeite über die serielle console und ssh (wenn das system gestartet ist). Ich versuche mal ein anderes U-Boot drauf zu spielen.

  • Hallo flooh89,


    es sieht aus als ob Early printk nicht eingeschaltet ist. Dann werden nur Fehler ausgegeben und keine Bootmeldungen. Hast Du die console in der inittab eingestellt? Da sollte sowas stehen:

    Code
    s0:12345:respawn:/sbin/agetty -L 115200 ttymxc0 vt100


    Gruss zille

  • So u-Boot ist jetzt auf 2016.09, hat aber leider am Problem nichts geändert. Ist alles noch so wie bisher.

    Zitat

    es sieht aus als ob Early printk nicht eingeschaltet ist. Dann werden
    nur Fehler ausgegeben und keine Bootmeldungen. Hast Du die console in
    der inittab eingestellt? Da sollte sowas stehen:

    Im Kernel ist die earlyprintk Option unter Kernel hacking aktiviert. Eine inittab war auf dem System nicht vorhanden. Die hab ich jetzt erstellt und die Werte reinkopiert. Die Ausgabe beim starten bleibt aber die selbe

  • Leute ich hab das Problem gelöst :D
    Der Kernel startet ja bis zu einem gewissen grad und hat dann einfach nicht weiter gemacht. Das lag daran, dass er mmcblk0p1 nicht gefunden hat. Ein entfernen von "rootwait consoleblank=0 quiet" führte dazu, dass auch die Bootmeldungen ausgegeben wurden und man konnte erkennen, dass der Kernel den nand als mmcblk2 erkannt und gemounted hat. Das Umstellen von "root=/dev/mmcblk0p1" auf "root=/dev/mmcbl2p1" löste letztendlich das Problem. Ich hab die ganze zeit das "quiet" in den Einstellungen übersehen :wand
    Warum der Kernel das jetzt so macht weiß ich nicht. Ich hatte keine SD-Karten eingesteckt und der originale Kernel (3.0.65 oder so) liest das rootfs auch von mmcblk0p1. Gibt es da Einstellungen im Kernel, die zu so einem verhalten führen können?


    Ich bedanke mich nochmal für eure Hilfe und Bemühungen :] Ohne euch hätte ich das nicht geschafft!

Jetzt mitmachen!

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