BareMetal auf dem Raspberry Pi

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

    seit ein paar Wochen gab es mehrere Fragen zu Projekten, Problemen und Ideen, die z.T. Echtzeit-Fähigkeiten voraussetzen. Oder solche, die unter einem Betriebssystem nicht sinnvollerweise laufen (können). Oder auch, dass Programme gestartet werden sollen, bevor überhaupt ein Betriebssystem vorhanden ist. ...

    Korrekterweise habe ich dann auch jeweils als einfachsten und zugleich wirksamsten Ansatz BareMetal genannt. Aufgrund der schon reichlich aggressiven Reaktionen, die ich daraufhin erhalten habe, bleibt mir nur eine Erklärung, dass diese Technik in diesem Forum allg. nicht so geläufig zu sein scheint und der Wert meiner Antworten auch nicht im Ansatz verstanden wurde.

    Besteht Interesse an einem Tutorial zu diesem Thema inkl. GPIO-Ereignisse in Echtzeit (also ohne Beeinträchtigung durch ein Betriebssystem) mit ein paar Tricks, wie man richtig schnelles Bitbanging veranstaltet? Schnell in dem Sinne, dass innerhalb von wenigen zig ns bis zu 32 GPIOs gleichzeitig gesetzt oder abgefragt werden können.

    Falls ja, dann könnte ich Ende Juni eines erstellen. Vorher geht's nicht, weil ein aktuelles Projekt vor dem Abschluss steht und das Folgeprojekt noch unter Dach und Fach gebracht werden möchte.

    Beste Grüsse

    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.

    Einmal editiert, zuletzt von Andreas (8. Mai 2017 um 01:17)

  • Hallo Andreas!
    Interesse besteht auf jeden Fall. Ich nehme ja nicht an, dass die Sache trivial ist. Es wird schon etwas aufwändiger sein, als ein C-Sketch auf einen Arduino zu schieben... Bin sehr gespannt, ob das für einen halbwegs technikaffinen Menschen umsetzbar ist.

    Im Übrigen verstehst du das völlig falsch. Wenn hier ein totaler Anfänger irgendwelche Fragen stellt, ist eine Lösung, von der kaum einer überhaupt schon mal was gehört hat, einfach kein praktikabler Ansatzpunkt. Man muss die Leute schon da abholen, wo sie sind. Wenn das dann gesagt wird, solltest du es nicht als Angriff auf dich sehen.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Servus Andreas,
    ich denke um das Thema ausführlich zu behandeln wird selbst Deine Rest-Lebenszeit nicht ausreichen ;) ...
    Vielleicht konkretisierst Du das ein wenig. Ich sehe wenig Sinn darin hier nur auf dem nackten Broadcom Chip etwas realisieren zu wollen. Das fänt doch schon damit an, dass Du dann eine Art eigenen Bootloader brauchst und Teile der Firmware nachimplementieren musst.
    Vielleicht habe ich das auch falsch verstanden, aber


    ... GPIO-Ereignisse in Echtzeit (also ohne Beeinträchtigung durch ein Betriebssystem) ...


    ist nach meinem Verständnis von Echtzeit eben nur komplett ohne z.B. Raspbian möglich.
    Mir stellt sich halt die Frage ob das Sinn macht, oder ob man in so einem Fall nicht sinnvollerweise auf den Komfort der Arduino IDE und passenden Arduino/ESP zurückgreift.

    Wie gesagt ... evtl. habe ich da auch nur was falsch verstanden.
    cheers,
    -ds-

  • Hallo Gnom,


    Hallo Andreas!
    Interesse besteht auf jeden Fall. Ich nehme ja nicht an, dass die Sache trivial ist. Es wird schon etwas aufwändiger sein, als ein C-Sketch auf einen Arduino zu schieben... Bin sehr gespannt, ob das für einen halbwegs technikaffinen Menschen umsetzbar ist.


    Es ist recht simpel und unterscheidet sich im prinzipiellen Ablauf nicht von der Toolchain, die abläuft, um einen Sketch auf einem Arduino ablaufen zu lassen.

    Die einzige Hemmschwelle befindet sich in unseren Köpfen, wonach auf einem Computer ein Betriebssystem laufen muss.

    BareMetal stellte übrigens 2012 und auch noch 2013 eine weit verbreitete Technik dar, um mit dem Raspberry Pi Sachen zu machen, die die heutigen Cracks nicht mehr kennen.


    Beste Grüße

    Andreas
    Automatisch zusammengefügt:
    Hi Dreamshader,


    Vielleicht habe ich das auch falsch verstanden, aber


    ist nach meinem Verständnis von Echtzeit eben nur komplett ohne z.B. Raspbian möglich.


    Stimmt - falsch verstanden ;) & ohne Raspbian auf der SD-Karte...



    Mir stellt sich halt die Frage ob das Sinn macht, oder ob man in so einem Fall nicht sinnvollerweise auf den Komfort der Arduino IDE und passenden Arduino/ESP zurückgreift.


    Dann lasse Dich einfach überraschen... Der Raspi tickt halt schneller...

    Das Ganze war ursprünglich ein Nebenstrang zum KernelCompilator 2014, durch den viele Türen geöffnet waren.


    Beste Grüsse

    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.

    Einmal editiert, zuletzt von Andreas (8. Mai 2017 um 01:54)

  • Welche Programmiersprache liegt dem ganzen denn dann zugrunde? Tippe auf C. Und gibt es dann auch Bibliotheken für gewisse Aufgaben - ich denke an sowas wie I2C, LAN, externe Speicher - muss man sowas aufwändig emulieren oder wie ist sowas realisierbar? Oder bleibt es dann im Wesentlichen bei der Behandlung der GPIOs und Operationen im Hauptspeicher und alles andere muss man realisieren, indem man diese schnelle I/O-Maschine über eine serielle Verbindung an einen zweiten Pi anschließt, der dann den ganzen Luxus hat - GUI, LAN/WLAN, SD-Karte, USB, ...
    Bin gespannt.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Naja ... ich hab' schon Deine "Ehe" in die Brüche gehen sehen nachdem ich im Internet zum Thema mal ein bisschen recherchiert habe und u.a. -> dieses Menschlein <- gefunden habe, der daran scheinbar schon seit 5 Jahren sitzt ;) ...
    Noch dazu, weil ich schon oft gelesen habe, dass die Doku von Broadcom scheinbar extrem lückenhaft und grottenschlecht sein soll.

    Klar ... 40,- Euro für nen Quadcore mit 1 GHz und 1 GB Speicher ist schon ein Argument damit auch andere Aufgaben zu realisieren als einen Webserver oder ein Mediacenter unter Raspbian darauf laufen zu lassen.
    Oder auch der Zero ... Preis eines besseren Arduino aber wesentlich mehr unter der Haube. Gerade da wäre das u.U. interessant.

    Ich stell' mir das halt relativ aufwändig vor bis wenigstens mal eine Kommunikation über UART funktioniert. Von Bildschirmausgaben und TCP/IP Stacks ganz zu schweigen. Ich bin seinerzeit mal Monate an einem eigenen BIOS für die damaligen 8088 PCs gesessen.

    Naja ... dann überrasch' uns einfach mal.
    Ich bin da echt gespannt ...

    cheers,
    -ds-

  • Du wirst mir das vermutlich nicht glauben, aber ich hab mich vor einiger Zeit auch mal mit "Bare Metal" auf/für den Pi beschäftigt...

    Sofern ich das noch richtig in Erinnerung habe, kann man am fest eingebrannten Bootloader-ROM und somit dem Startvorgang nichts verändern: GPU sucht auf der SD nach einer bootcode.bin & start.elf die wiederum suchen nach einer Datei "kernel.img" (bzw kernel7.img ab Pi2) ... und genau da setzt "Bare Metal" für den Pi an: einzig "kernel.img" ist nicht original (also kein Linux Kernel) sondern beinhaltet direkt die "bare metal programs".

    Oder vertue ich mich da gerade?

    Jedenfalls wär auch ich an einem Tutorial interessiert

  • Hallo Andreas,

    ich hätte durchaus Interesse an einem solchen Tutorial - auch wenn ich derzeit keinen Anwendungsfall habe und auch für die Zukunft erst mal keinen sehe. Ich würde es also eher durchlesen als -arbeiten.

  • Hallo zusammen!

    Du wirst mir das vermutlich nicht glauben, aber ich hab mich vor einiger Zeit auch mal mit "Bare Metal" auf/für den Pi beschäftigt...

    Sofern ich das noch richtig in Erinnerung habe, kann man am fest eingebrannten Bootloader-ROM und somit dem Startvorgang nichts verändern: GPU sucht auf der SD nach einer bootcode.bin & start.elf die wiederum suchen nach einer Datei "kernel.img" (bzw kernel7.img ab Pi2) ... und genau da setzt "Bare Metal" für den Pi an: einzig "kernel.img" ist nicht original (also kein Linux Kernel) sondern beinhaltet direkt die "bare metal programs".

    Oder vertue ich mich da gerade?

    Jedenfalls wär auch ich an einem Tutorial interessiert

    Darf ich auch mal senfen: Also Meigrafd liegt da richtig: Zunächst einmal sucht das Boot-ROM nach der Bootcode.bin. Aber soweit ich verstanden habe, wird Start.elf von der Bootcode.bin nachgeladen; und anschließend erst Kernel.img gestartet. Man könnte zwar auch schon eine manipulierte Bootcode.bin oder Start.elf verwenden, aber meiner bescheidenen Meinung nach ist es einfacher, die beiden Original-Bootdateien zu benützen und eben "nur" die Kernel.img auszutauschen.. :D
    Und jaa, BareMetal-Programmierung schreckt einige Zeitgenossen ab; ist aber im Grunde genommen Nix Neues:
    In der Schule gab es auch einen Assembler-Crack, der mir einiges in einfachen Worten erklärt hat.. ;) Beim Apple ][ hieß BareMetal noch AutoBoot; gemeint aber war das gleiche: Ohne Betriebssystem (oder nur mit dem Nötigsten davon) Anwendungen (z.B. Spiele) starten. AutoBoot bzw. BareMetal mit Overlay-Technik (mit Nachladen) ging/ geht zwar auch, ist aber schwieriger.. :D
    Nennt zwar keiner so, aber im Prinzip ist der Mem-Tester (bei vielen Linux-Distributionen dabei) auch eine BareMetal-Anwendung für den PC. :) Auch BootManager (gibt ja inzwischen recht komfortable) passen hierher.. ;)

  • Hallo Physikus,

    kann es sein, dass wir uns schon aus einem anderen Forum kennen?

    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.


  • Darf ich auch mal senfen: Also Meigrafd liegt da richtig: Zunächst einmal sucht das Boot-ROM nach der Bootcode.bin. Aber soweit ich verstanden habe, wird Start.elf von der Bootcode.bin nachgeladen; und anschließend erst Kernel.img gestartet.
    Man könnte zwar auch schon eine manipulierte Bootcode.bin oder Start.elf verwenden, aber meiner bescheidenen Meinung nach ist es einfacher, die beiden Original-Bootdateien zu benützen und eben "nur" die Kernel.img auszutauschen.

    Siehe dazu auch: FAQ => Nützliche Links / Linksammlung => Bootverlauf des RaspberryPI's
    Daraus geht auch hervor das es eigentlich nicht viel Sinn macht bootcode.bin oder start.elf zu manipulieren, insbesondere die Firmware ist auch für BareMetal wichtig. start.elf kann nur von der GPU verarbeitet werden. kernel*.img nur von der CPU, die wiederum erst vom "software bootloader" in den sog. 'working state' versetzt wird.

    Ein einfaches Beispiel für BareMetal => http://stackoverflow.com/a/40063032/2641799

Jetzt mitmachen!

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