U-Boot (mainline) für RPi 2 B+

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Moin,

    ich habe mir die aktuellste Version (rc3) aus dem Git von denx.de gesaugt und mir damit ein u-boot.bin-Binary gebaut. So weit so einfach. Ich habe zwar auch damit experimentiert diverse Netzwerkfunktionalität abzuschalten, habe dies aber nicht vollständig hinbekommen und erst einmal verschoben.

    Das Binary funktioniert so weit man das sehen kann. Allerdings habe ich noch keinen einzigen sauberen Boot hinbekommen.

    Was ich bisher getan habe ist, die u-boot.bin-Datei einfach in die Boot-Partition (FAT) von dem Raspbian zu kopieren und in der config.txt einfach kernel=u-boot.bin zu setzen.

    Ich bekomme zwar bei den meisten Boots meine USB-Tastatur zum laufen, aber ab da wird's problematisch. Habe mir den Device-Tree vom Raspbian versucht zu laden und das war bisher auch das vielversprechendste Ergebnis, die Himbeeren erschienen oben am Bildschirmrand, aber in falscher Farbe und ab da hing alles. Zuvor hing es schon nachdem mir U-Boot die Info ausgegeben hatte, daß jetzt der Kernel gestartet wird. Probiert hatte ich es mit dem kernel7.img der Boot-Partition von Raspbian, via bootz.

    Grob:

    Code
    mmc dev 0
    fatload mmc 0:1 ${kernel_addr_r} kernel7.img
    bootz ${kernel_addr_r}

    Im Falle mit dem Device-Tree habe ich den auch via fatload geladen und die Adresse bei bootz übergeben. Als Adresse hatte ich 0x02000000 benutzt. Keine Ahnung ob die sinnvoll ist oder nicht.

    Kann mir jemand Anhaltspunkte geben, insbesondere Hinweise auf Dokumentation. https://elinux.org/RPi_U-Boot ist mir bekannt, sowie auch https://raspberrypi.stackexchange.com/questions/6816…uildroot-u-boot und http://ltekieli.com/buildroot-with-raspberry-pi-u-boot/ und https://blog.night-shade.org.uk/2015/05/bootin…nd-hyp-enabled/ (letzteres fand ich am hilfreichsten).

    Der Grund warum ich U-Boot nutzen möchte ist, daß es mir ermöglichen kann ein Raspbian auf der SD-Karte zu haben auf welchem ich "normal" arbeiten kann, aber gleichzeitig ein per Buildroot erstelltes Image standardmäßig zu laden. Bin noch nicht sicher ob ich das über nen Jumper auf zwei GPIO-Pins oder eine andere Methode ermittle (also welche Modus gebootet werden soll).

    Zum Bau benutze ich:

    Code
    env ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make -j 8 rpi_2_defconfig all

    und zwischen meinen Experimenten:

    Code
    make mrproper distclean

    Wenn ihr schnell hilfreiche Antworten wollt, lest bitte diesen Artikel (Fehlerberichte - wie Sie Softwarefehler melden sollten) und beherzigt die darin enthaltenen Ratschläge. Herzlichen Dank!

    Einmal editiert, zuletzt von Assarbad (1. November 2017 um 22:41)

  • Hallo Assarbad,

    so weit ich weiß, kannst Du nur das Betriebssystem laden, das in der /boot/config.txt eingetragen ist.

    Mir ist keine Möglichkeit bekannt, dass Du während des Bootens in einem sehr frühen Stadium Zugriff auf die GPIOs hast, um daraufhin mal eben die besagte Datei in /boot/config.txt einzutragen, damit dieses dann geladen wird.

    All das inkl. DeviceTree kommt erst danach ins Spiel.

    Das Einzige, was funktioniert, wenn Du im Autostart ein kleines Programm laufen hast, das einen an einem GPIO-Eingang angeschlossenen Taster abfragt. In Abhängigkeit dieses Ereignisses kannst Du die Datei bestimmen, die das nächste Mal als KERNEL verwendet werden soll. Das kannst Du aber auch über das Linux-Kommando dialog festlegen. Aber wie gesagt, nur für den nächsten Boot-Vorgang.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Hi Andreas,

    Danke für die schnelle Antwort. Nach meiner Recherche sieht es so aus, als sei GPIO durchaus auch schon von U-Boot aus verfügbar. Natürlich nicht mit dem von der RPi-Foundation mitgelieferten Bootloader, das ist klar.

    Zugegeben, ich habe es noch nicht probieren können, da es schon am starten des Kernels scheiterte, aber hier findest du ein Beispiel dessen was ich im Sinn habe. Möglich daß das beim RPi nicht verfügbar ist, aber erst einmal geht es ohnehin ums Starten des Raspbian an Bord mithilfe von U-Boot.

    Ach ja eins noch. Es kann auch darauf hinauslaufen, daß die Verfügbarkeit einer Tastatur als die Bedingung benutzt wird. Sprich: GPIO ist hier nicht das wichtige Thema und auch (noch!) nicht das bedingte Starten des einen oder anderen Kernels. Erst einmal muß ich überhaupt irgendeinen der Kernel überzeugen, daß sie mit U-Boot starten.

    Ich probiere das gerade mal etwas systematischer durch.

    Wenn ihr schnell hilfreiche Antworten wollt, lest bitte diesen Artikel (Fehlerberichte - wie Sie Softwarefehler melden sollten) und beherzigt die darin enthaltenen Ratschläge. Herzlichen Dank!

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!