Etwas Hintergrund
Das Wichtigste, was Sie wissen sollten, ist, dass das RaspberryPi ein seltsames Biest ist, bei dem ARM CPU
es 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 mailbox
Nachrichtensystems) 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 Linux
Kernel RISC OS
oder 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
,github
und 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 VCOS
mit 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 USB
Stack 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 Core
kann ebenfalls schwierig sein - es gibt Open Source-Code für die Grafikbibliotheken, aber nur für die ARM
Seite.
Abgesehen davon war es möglich, den RISC OS
Port 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 FreeBSD
Hafen, "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 GPU
Binärdatei sein, keine ARM
Binärdatei, was ein weiteres Problem darstellt. Und im RaspberryPi ist kein Flash integriert, was ebenfalls ein Problem darstellt.
Nummer 2
Das Hauptproblem ist, dass flash
RaspberryPi 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.
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.
quelle
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.
quelle