Grad der Hackbarkeit von Himbeer-Pi

35

Ich arbeite seit ungefähr 3 Jahren mit eingebetteten Systemen (hauptsächlich Mikrocontrollern). Ich möchte wissen, wie viel RPi von Open Source tatsächlich? Ich weiß, dass uns Arduino vollständige Details zu Hardware / Software usw. liefert. Aber was ist mit RPi? Dies ist wichtig, da mein Team und ich Folgendes mit dem Himbeer-Pi tun möchten [dieses Projekt beabsichtigt, das RPi genau wie ein Arduino zu verwenden => kein Betriebssystem]:

  1. Schreiben Sie den primären Bootloader (ROM) neu, um von Flash anstatt von einer externen SD-Karte zu booten.
  2. Haben Sie einen sekundären Bootloader im On-Board-Flash, aktiviert dieser den USB-Port des Pi und lauscht darauf. Es muss Binärcode akzeptieren (den es von meinem PC erhält) und auf dem Flash speichern. Beginnen Sie später mit der Ausführung.
  3. Entwickeln Sie eigene Gerätetreiber für Kommunikationsprotokolle.
  4. Entwickeln Sie eine eigene Uploader- und Debug-Umgebung für den PI sowie eine benutzerdefinierte Implementierung von Embedded C für ARM (zur Steuerung von GPIOs usw. erforderlich).
  5. Implementieren Sie nach Möglichkeit ein eigenes Betriebssystem für eingebettete Systeme.

Ist das mit dem Himbeer-Pi möglich? Wenn nicht:
-> Welche meiner fünf Ziele sind mit Himbeer-Pi nicht möglich. Welche Änderungen muss ich an meinem Projekt vornehmen, wenn ich mit dem PI arbeiten muss?
-> Welche anderen Boards gibt es auf dem Markt, mit denen ich genau das erreichen kann, was ich will?

deepak
quelle

Antworten:

76

Etwas Hintergrund

Das Wichtigste, was Sie wissen sollten, ist, dass das RaspberryPi ein seltsames Biest ist, bei dem ARM CPUes sich nicht um die Haupt-CPU handelt - es ist nur ein Co-Prozessor für das VideoCore GPU. Beim Start von RaspberryPi wird ein GPU-Blob von der SD-Karte in den L2-Cache gelesen und ausgeführt. Dieser Code ruft dann alle wichtigen Peripheriegeräte (RAM, Uhren usw.) auf und startet die ARM CPU. Dann kann der Bootloader der 2. Stufe oder ein Betriebssystem selbst ausgeführt werden ARM CPU.

GPU-Blob ist nicht nur ein Bootloader. Es ist eigentlich ein Betriebssystem (Video Core OS) für sich. Einige wichtige Elemente des Systems sind für die ARM-CPU nicht direkt zugänglich, und sie muss mit GPU(unter Verwendung eines mailboxNachrichtensystems) kommunizieren , um sie zu verwenden. Hierzu ist eine Teildokumentation vorhanden. Now Video Core OS( VCOS) wird von Zeit zu Zeit von Broadcom-Mitarbeitern erweitert, um Funktionen zu aktivieren, die vom LinuxKernel RISC OSoder manchmal sogar von einigen Hobby-Betriebssystemen benötigt werden. Es gibt keine gute Dokumentation zu diesem Thema, aber Sie müssten in den Graben RaspberryPi forum,githubund möglicherweise an anderen Orten, um Informationen darüber zu finden. Aber es ist da ... irgendwo. Und es gibt ein paar Leute, die ihren eigenen Bare-Metal-Code oder sogar Betriebssysteme auf dem RaspberryPi schreiben, um Ihnen zu helfen. Und natürlich viel Open-Source-Code - zum Beispiel RasbperryPis Linux-Kernel.

VideoCore ist proprietär, es gibt keine offiziellen Dokumentations- und Entwicklungswerkzeuge. Wenn Sie sich also nicht viel Mühe geben möchten, können Sie nicht VCOSmit Ihrem eigenen Code schreiben . Es gibt jedoch einige Anstrengungen, den Video Core rückzuentwickeln. Einige Informationen finden Sie hier .

Ein weiteres Problem ist, dass der USBStack von Synopsys proprietär ist und es auch keine Dokumentation dafür gibt. Selbst mit der Dokumentation scheint es schwierig zu sein, ihn zuverlässig zu implementieren. Aber auch hier ist der Code verfügbar (Linux-Kernel, U-Boot, CSUD ). Die Verwendung erweiterter Grafikfunktionen von Video Corekann ebenfalls schwierig sein - es gibt Open Source-Code für die Grafikbibliotheken, aber nur für die ARMSeite.

Abgesehen davon war es möglich, den RISC OSPort anhand der Informationen verfügbar zu machen (es ist mir jedoch nicht ganz klar, ob sie nur öffentlich zugängliche Informationen verwenden). Einige Leute schreiben (unabhängig von Broadcom) den Linux-Kernel für Mainline dort um ist ein FreeBSDHafen, "U-Boot" und andere. Es ist also definitiv möglich, ein eigenes Betriebssystem zu schreiben. Es ist einfach nicht so einfach, wie es sein könnte.

Deine Tore

Nummer 1

Soweit ich weiß, gibt es keine Möglichkeit, dass der SoC auf eine andere als die beschriebene Weise gestartet wird. Der Bootloader der ersten Stufe muss also eingeschaltet sein SD card. Und es muss eine GPUBinärdatei sein, keine ARMBinärdatei, was ein weiteres Problem darstellt. Und im RaspberryPi ist kein Flash integriert, was ebenfalls ein Problem darstellt.

Nummer 2

Das Hauptproblem ist, dass flashRaspberryPi nicht an Bord ist . Sie können eine hinzufügen und diese in Ihrem Bootloader aktivieren (dies muss bereits der Bootloader der 2. Stufe sein). Das Schreiben eines USB-Treibers kann jedoch problematisch sein.

Nummer 3, 4, 5

Dies sollte kein großes Problem sein. Die meisten Peripheriegeräte (zumindest die für die ARM) sind hier dokumentiert . Ein vorhandener Bootloader macht dies noch einfacher, da Sie Ihren SoC vollständig konfiguriert haben. Sie können hier und hier nach Code und Dokumentation suchen .

Alternativen

Ich kenne kein anderes Board so gut wie RaspberryPi, daher ist es schwierig, etwas zu empfehlen, aber Sie können sich einige ausgereifte Projekte wie OMAP-basiertes Beagleboard / Beaglebone / Pandaboard ansehen oder die Entwicklung einiger neuer Boards wie das Allwinner-basierte verfolgen Cubieboard oder PCduino . Alles hängt davon ab, was genau Sie erreichen möchten.

Krzysztof Adamski
quelle
3
Ich möchte diese Antwort auf +100 setzen. Gut gemacht.
Orithena
@maligree lol, mach dir keine Sorgen - es ist bereits fertig! :)
xxmbabanexx
1
+1 für Beablebone, weil es zu 100% Open Source ist und Sie die Möglichkeit haben, die Hardware zu "respinnen" und Ihre eigene Leiterplatte zu
erstellen
5

Um Krzysztofs großartige Antwort zu aktualisieren, hat Broadcom endlich einen Code veröffentlicht, der als 3-Klausel-BSD lizenziert ist, um die Erstellung eines Open-Source-GPU-Treibers zu unterstützen. Die "rpi-open-firmware" -Anstrengung zum Ersetzen des Raspberry Pi VPU-Firmware-Blobs begann 2016: https://github.com/christinaa/rpi-open-firmware . Weitere Informationen finden Sie unter https://news.ycombinator.com/item?id=11703842

Es gibt eine Reihe von alternativen Boards, die im RaspberryPi - Debian-Wiki kurz beschrieben und verlinkt sind , darunter ODROID-C1, Cubieboard, Banana Pi, Olimexs OLinuxIno Wifi und OlinuxIno Mini, EOMA68 und Beaglebone black.

Nealmcb
quelle
Persönlich finde ich die Alternativen nicht so großartig, viele ODROID-Boards erzwingen die Signaturprüfung auf dem Bootloader und hindern Sie daran, Ihren eigenen Code auf ihnen auszuführen. Die TI OMAP3-Familie verfügt über einen sicheren Modus, bevor Sie Ihren Code aufrufen. Die VPU auf RPi ist eigentlich ziemlich gut, ich denke, es gibt ihr den Vorteil gegenüber anderen Boards, und jetzt, da wir eine schöne Toolchain dafür haben, sehen die Dinge gut aus.
Kristina Brooks
1

Mit dem U-Boot-Bootloader von Raspberry Pi kann man eigentlich eine Menge anfangen. Sie lassen die GPU einfach Ihren ARM-Coprozessor-SoC mit dem U-Boot-Image als "Betriebssystem" laden.

Ich fand diesen Artikel als Beispiel hilfreich. Ich habe es (noch) nicht getan, aber ich plane es. Ich habe Ihre Frage zufällig gefunden, als ich nach einer Möglichkeit gesucht habe, dies selbst zu tun, und dann habe ich den Artikel gefunden, und es sah so aus, als ob er für andere, die ähnliche suchen, nützlich sein könnte.

Es gibt einen weiteren Artikel , der ausführlichere Anweisungen zum Erstellen des U-Boot-Images enthält.

Alan Mimms
quelle
1
Dies ist die Art von Antwort, die am Anfang nützlich sein kann, aber nach ein paar Jahren funktionieren Links nicht mehr und es gibt keinen einzigen Hinweis darauf, was ihr Inhalt war. Überlegen Sie sich zumindest, welchen U-Boot-Zweig und welchen Compiler Sie verwendet haben.
Dmitry Grigoryev
Vielen Dank, Dmitry. Ich werde bald darauf zurückkommen und es reparieren, wenn ich etwas Zeit habe.
Alan Mimms