Himbeer-PI ohne Betriebssystem?

9

Ich habe in letzter Zeit viel mit Arduino gemacht. Es ist sehr einfach, da Sie C ++ - Code direkt ausführen können, ohne Betriebssysteme oder Treiber zu benötigen.

Ich habe einige Nachforschungen angestellt und AFAIK. Normalerweise installieren Sie Linux auf dem Raspberry PI und erstellen darauf Python-Skripte oder C ++ - Binärdateien.

Frage: Ist es möglich, Code ohne Betriebssystem auszuführen, aber dennoch HDMI- und SD-Karten verwenden zu können?

Bytecode77
quelle
2
Möglicherweise ist es einfacher, Bare-Metal-Projekte auf einem kleineren und weniger leistungsfähigen, aber vollständig dokumentierten ARM-Prozessor durchzuführen. Achten Sie jedoch auf schlecht implementierte, proprietäre Debug-Adapter auf billigen Entwicklungsplatinen - manchmal erhalten diese offene Treiber mit Rückentwicklung, oder Sie können einen echten Jtag kaufen oder einen seriellen Bootloader verwenden. Zumindest mit dem pi sollten Sie eine gute Toolchain-Unterstützung erwarten können.
Chris Stratton

Antworten:

16

Führen Sie Code auf dem RaPi ohne Betriebssystem aus: Kein Problem. David Welch hat die Grunzarbeit erledigt, überprüfen Sie seinen Gitub . Grundsätzlich können Sie die Standardstartdateien verwenden und die Datei kernel.img durch die Datei ersetzen, die Sie ausführen möchten. Um den "SD-Kartentanz" zu vermeiden, können Sie einen Bootloader ausführen, der das auszuführende Image über eine serielle Leitung empfängt. Ich habe einen automatischen Neustart hinzugefügt, damit Sie ein neues Image "hands-off" ausführen können. Wenn Sie diesen Weg gehen möchten, habe ich einige weitere Informationen.

Führen Sie Ihre eigene Bare-Metal-Anwendung aus und verwenden Sie den Bildschirm und die SD-Karte : Das ist ein Problem. Alle Informationen sind tief in den Linux-Quellen verfügbar, und es gibt Personen, die daran arbeiten ( siehe DexOs ?). Ich gehe also davon aus, dass diese Informationen in etwa einem halben Jahr allgemein bekannt sein werden. Aber im Moment würde ich sagen, dass dies wahrscheinlich zu viel Arbeit ist.

Wouter van Ooijen
quelle
Ich frage mich, wie die CPU den Kernel von der SD-Karte ohne die entsprechenden Treiber für die SD-Karte und das Dateisystem laden kann.
Bytecode77
1
Die grundlegenden Dateien, die Sie benötigen (und die allein oder als Teil einer Linux-Distribution von der RaPi-Site heruntergeladen werden können), enthalten eine Startdatei für die GPU. Vermutlich verfügt die GPU über ein integriertes Boot-ROM, mit dem sie die SD lesen, ihren Code laden, die Datei kernel.img laden und die ARM-CPU aktivieren kann.
Wouter van Ooijen
@ DevilsChild - In vielen CPUs sind grundlegende Bootloader integriert. Der TI Davinci-Teil, mit dem ich arbeite, verfügt über einen "ROM-Bootloader", der über serielle oder SD-Karten arbeiten kann. SD-Karten verwenden eine grundlegende SPI-Schnittstelle.
John U
5

Es ist immer möglich, aber Sie müssen Ihre eigenen Treiber für HDMI und die SD-Schnittstelle schreiben und möglicherweise auch ein Dateisystem für letztere.

stevenvh
quelle
1
Eigentlich wäre es extrem kompliziert, da die GPU zuerst startet und dann einige binäre Blobs von Broadcom laden muss, um die CPU zu starten. Wenn ich mich richtig erinnere, sind GPU-Treiber und Firmware ebenfalls Closed Source.
AndrejaKo
Gibt es Treiber, die enthalten sein könnten, damit es funktioniert? Irgendeine Idee?
Bytecode77
@ Devils Child Ich bin mir nicht sicher, wie einfach es wäre oder wie dokumentiert alles ist. Ich denke, dass Sie möglicherweise den vorhandenen Bootloader verwenden können, um Ihr eigenes Betriebssystem-Image zu laden und die CPU zu starten, aber dann zeigt das Problem, das Stevenvh in der Antwort schrieb: Sie müssen Treiber schreiben, und der größte Teil der Dokumentation für sie ist nicht ' t verfügbar.
AndrejaKo
@DevilsChild - Die vorhandenen Treiber werden höchstwahrscheinlich für ein bestimmtes Betriebssystem geschrieben. Wenn Sie sie in Ihre eigene Software integrieren möchten, benötigen Sie einige ihrer Funktionen. Am Ende schreiben Sie eine (eingeschränkte) Kopie des Betriebssystems. Außerdem gibt AndrejaKo an, dass es sehr schwierig sein wird und die Closed-Source-Firmware die Dinge nicht einfacher macht. Warum willst du kein Betriebssystem?
Stevenvh
1
@DevilsChild Der wichtige Unterschied zwischen einem Computer mit einer einzelnen Karte und einer VM besteht darin, dass Sie die Karte an einem anderen Ort als dem physischen Standort des Computers platzieren können, auf dem sich die VM befindet. Außerdem hat es tendenziell bessere E / A in der realen Welt. VMs und speziellere Emulatoren oder Simulatoren spielen jedoch häufig eine wichtige Rolle, z. B. das Softwareteam vor der vorhandenen Hardware arbeiten zu lassen oder zu vermeiden, dass sie sich um das einzige Prototyp-Board streiten, das von Hand überarbeitet wurde, um funktionsfähig zu sein oder ausgeführt zu werden Regressionstests, ohne die Sammlung physischer Geräte zu binden ...
Chris Stratton
3

Was sie alle gesagt haben, aber der EINFACHSTE Weg ist, eine Linux-Distribution auszuführen , die das tut, was Sie wollen und so minimalistisch wie möglich ist, und dann alles zu entfernen , was Sie nicht wollen.

Ziemlich bald wird es aufhören, Linux zu sein und ein Bootloader mit SD- und HDMI-Unterstützung werden. Das ist im Wesentlichen nicht zu unterscheiden von dem, was Sie verlangen, außer
- es wurde aus einer Linux-Distribution extrahiert (ist aber nicht mehr Linux) und
- Sie haben es nicht selbst gemacht.

Wenn es nicht von äußerster Wichtigkeit ist, dies selbst zu tun, scheint dies ein sehr logischer Ansatz zu sein.

Russell McMahon
quelle
0

Wenn Sie "Raspberry Pi as Arduino" programmieren möchten, lesen Sie wiringPi. Lesen Sie meinen Artikel unter http://www.jating.in/efyarticle/EFYArticle.pdf .

1) Ich habe es wie Arduino aussehen und funktionieren lassen, indem ich ein einzelnes Kabel verwendet habe, um eine USB-zu-Seriell-Konvertierung durchzuführen und auch die Platine mit Strom zu versorgen. So ist wie bei Arduino nur ein USB-Kabel ausreichend.

2) Ich habe ein kleines Dienstprogramm erstellt, das beim Ausführen den Pi-Code der Verkabelung über die serielle Leitung (eigentlich jede Textdatei :-)) lädt, kompiliert und ausführt.

Wenn Sie möchten, können Sie es bei jedem Start ausführen, indem Sie die .bashrc-Datei ändern. Bei jedem Start wartet es also auf eine neue Datei. Ich habe keinen Link zum Dienstprogrammcode angegeben, aber Sie finden ihn unter http://www.jating.in/efyarticle/.

Jatin Gandhi
quelle