Niveau de piratage de la framboise pi

35

Je travaille avec des systèmes embarqués (principalement des micro-contrôleurs) depuis environ 3 ans. Je veux savoir combien de RPi réellement open source ?? Je sais que Arduino nous donne des détails complets sur le matériel / logiciel, etc. Mais qu'en est-il de RPi? Ceci est important puisque mon équipe et moi voulons faire ce qui suit avec le framboise pi [ce projet a pour objectif d’utiliser le RPi exactement comme un arduino => pas d’OS]:

  1. Réécrivez le chargeur de démarrage principal (ROM) pour démarrer à partir de Flash plutôt que sur une carte SD externe.
  2. Avoir un chargeur de démarrage secondaire dans le flash intégré, cela active le port USB du pi et l’écoute. Il doit accepter le code binaire (qu'il obtiendra de mon PC) et l'enregistrer sur le flash. plus tard commencer à l'exécuter.
  3. Développer nos propres pilotes de périphériques pour gérer les protocoles de communication.
  4. Développez notre propre environnement de téléchargement et de débogage pour PI, ainsi que notre implémentation personnalisée de C intégré pour ARM (nécessaire pour contrôler les GPIO, etc.).
  5. Implémentez notre propre système d'exploitation pour les systèmes intégrés, si possible.

Est-ce possible avec le Raspberry Pi? Sinon:
-> Lequel de mes cinq buts n'est pas possible avec pi framboise. Quels changements dois-je apporter à mon projet si je dois travailler avec l'IP?
-> Quels autres conseils existe-t-il sur le marché qui me permettront de réaliser exactement ce que je veux?

deepak
la source

Réponses:

76

Un peu de fond

La chose la plus importante à savoir est que le RaspberryPi est une étrange bête dont le ARM CPUprocesseur 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 mailboxsystè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 Linuxnoyau, RISC OSvoire 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,githubet é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 VCOSavec 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 USBpile 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 Corepeut é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 ARMcôté.

Cela étant dit, il était possible de rendre le RISC OSport 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 FreeBSDport, '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 GPUbinaire, pas un ARMbinaire 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é flashsur 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.

Krzysztof Adamski
la source
3
Je veux +100 cette réponse. Bien joué.
Orithena
@maligree lol, ne vous inquiétez pas, c'est déjà fait! :)
xxmbabanexx
1
+1 pour Beablebone car il est 100% opensource et vous avez la possibilité de "respin" le matériel et de créer votre propre carte de circuit imprimé
portforwardpodcast
5

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.

nealmcb
la source
Personnellement, je pense que les alternatives ne sont pas aussi géniales, beaucoup de cartes ODROID imposent un contrôle de signature sur le chargeur de démarrage et vous empêchent d'exécuter votre propre code sur celles-ci. La famille TI OMAP3 existe en mode sécurisé avant d'appeler votre code, ce qui limite également ce que vous pouvez en faire. Le VPU sur RPi est en fait plutôt sympa, je pense que c’est ce qui lui donne un avantage sur les autres boards et maintenant que nous avons une belle panoplie d’outils, les choses vont bien.
Kristina Brooks
1

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.

Alan Mimms
la source
1
C’est le genre de réponse qui peut être utile au début, mais après quelques années, les liens cessent de fonctionner et il n’ya pas la moindre indication quant à la nature de leur contenu. Considérez au moins quelle branche U-Boot et quel compilateur vous avez utilisés.
Dmitry Grigoryev
Merci Dmitry. Je reviendrai bientôt sur ce sujet et le réparerai quand j'aurai du temps.
Alan Mimms