Un peu de fond
La chose la plus importante à savoir est que le RaspberryPi est une étrange bête dont le ARM CPU
processeur n’est pas le processeur principal - c’est seulement un co-processeur pour le VideoCore GPU
. Lorsque le RaspberryPi démarre, un blob GPU est lu de la carte SD dans le cache L2 et exécuté. Ce code affiche ensuite tous les périphériques importants (RAM, horloges, etc.) et lance le ARM CPU
. Ensuite, le chargeur de démarrage de 2e étape ou un système d'exploitation lui-même peut être exécuté ARM CPU
.
Le blob GPU n'est pas seulement un chargeur de démarrage. Il s’agit en fait d’un système d’exploitation (Video Core OS). Certains éléments importants du système ne sont pas directement accessibles par le processeur ARM et ce dernier doit communiquer avec GPU
(via le mailbox
système de messagerie) pour les utiliser. Il existe une documentation partielle à ce sujet. Now Video Core OS
( VCOS
) est prolongé de temps à autre par les employés de Broadcom pour permettre l’utilisation des fonctionnalités nécessaires au Linux
noyau, RISC OS
voire parfois de certains systèmes d’exploitation passionnés. Il n'y a pas de bonne documentation à ce sujet, cependant, vous devriez creuser dans le RaspberryPi forum
,github
et éventuellement d'autres endroits pour trouver des informations à ce sujet. Mais c'est là… quelque part. Et il y a quelques personnes qui écrivent leur propre code «bare metal» ou même des systèmes d'exploitation sur le RaspberryPi pour vous aider. Et bien sûr, beaucoup de code source ouvert - le noyau Linux de RasbperryPi par exemple.
VideoCore est propriétaire, il n’existe pas de documentation officielle ni d’outil de développement. Donc, à moins que vous ne vouliez faire beaucoup d'efforts, vous ne pouvez pas réécrire VCOS
avec votre propre code. Cependant, des efforts sont déployés pour procéder à l'ingénierie inverse du Video Core. Vous trouverez des informations ici .
Un autre problème est que la USB
pile de Synopsys est propriétaire et qu’il n’existe encore aucune documentation, et il semble que même avec de la documentation, il est difficile de l’implémenter de manière fiable. Mais encore une fois, le code est disponible (noyau Linux, u-boot, CSUD ). Il Video Core
peut également être difficile d’ utiliser des capacités graphiques avancées - il existe du code source ouvert pour les bibliothèques graphiques, mais uniquement pour le ARM
côté.
Cela étant dit, il était possible de rendre le RISC OS
port accessible à partir des informations (il m'est cependant impossible de dire s'ils n'utilisaient que des informations accessibles au public), certaines personnes sont en train de réécrire (indépendamment de Broadcom) le noyau Linux pour Mainline. est un FreeBSD
port, 'U-boot` et d'autres. Il est donc définitivement possible d'écrire votre propre système d'exploitation. Ce n'est tout simplement pas aussi facile que cela pourrait l'être.
Vos objectifs
Numéro 1
Autant que je sache, il est impossible que le SoC puisse démarrer d'une autre manière que celle décrite. Donc, le chargeur de démarrage doit être activé SD card
. Et ce doit être un GPU
binaire, pas un ARM
binaire qui est un autre problème. Et il n'y a pas de flash intégré dans le RaspberryPi, ce qui pose également problème.
Numéro 2
Le principal problème est qu’il n’ya pas de système embarqué flash
sur le RaspberryPi. Vous pourriez en ajouter un et il pourrait être activé dans votre chargeur de démarrage (qui devrait déjà être le chargeur de démarrage de la deuxième étape). Écrire un pilote USB peut toutefois être problématique.
Numéro 3, 4, 5
Cela ne devrait pas poser trop de problème. La plupart des périphériques (au moins ceux accessibles au ARM
) sont documentés ici . Le chargeur de démarrage existant facilite encore plus cette tâche puisque votre SoC est entièrement configuré. Vous pouvez regarder ici et ici pour du code et de la documentation.
Des alternatives
Je ne connais pas d’autre forum aussi performant que RaspberryPi, il est donc difficile de recommander quelque chose mais vous pouvez jeter un coup d’œil à des projets bien développés comme Beagleboard / Beaglebone / Pandaboard, ou vous pouvez suivre le développement de nouveaux conseils comme l’Allwinner. Cubieboard ou PCduino . Tout dépend de ce que vous voulez accomplir exactement.
Pour mettre à jour l'excellente réponse de Krzysztof, Broadcom a finalement publié publiquement du code, sous licence 3-Clause BSD, afin de faciliter la création d'un pilote GPU open source. L'effort de "rpi-open-firmware" pour remplacer le blob de microprogramme Raspberry Pi VPU a commencé en 2016: https://github.com/christinaa/rpi-open-firmware . Plus d’informations sur https://news.ycombinator.com/item?id=11703842
Il existe un certain nombre de conseils alternatifs brièvement décrits et liés à RaspberryPi - Wiki Debian , notamment ODROID-C1, Cubieboard, Banana Pi, OLinuxIno Wifi d’Olimex et OlinuxIno Mini, EOMA68 et Beaglebone black.
la source
Il y a beaucoup de choses que vous pouvez faire avec le chargeur de démarrage U-boot avec Raspberry Pi. En gros, vous laissez le GPU charger votre SoC de coprocesseur ARM avec l’image de démarrage U en tant que "système d’exploitation".
J'ai trouvé cet article utile à titre d'exemple. Je ne l'ai pas encore fait, mais je prévois de le faire. J'ai trouvé votre question alors que je cherchais un moyen de le faire moi-même, puis j'ai trouvé l'article et il a semblé qu'il pourrait être utile à d'autres personnes cherchant des choses similaires.
Un autre article contient des instructions plus détaillées pour la création de l'image U-Boot.
la source