Livello di hackerabilità di lampone pi


35

Lavoro con sistemi embedded (principalmente micro controller) da circa 3 anni. Voglio sapere quanto di RPi è effettivamente open source ?? So che Arduino ci fornisce dettagli completi su hardware / software ecc. Ma che dire di RPi? Questo è importante dal momento che il mio team e voglio fare quanto segue con il raspberry pi [questo progetto intende utilizzare l'RP esattamente come un arduino => nessun sistema operativo]:

  1. Riscrivi il bootloader primario (ROM) per l'avvio dal flash anziché dalla scheda SD esterna.
  2. Avere un bootloader secondario nel flash di bordo, questo attiva la porta USB del pi e lo ascolta. Deve accettare il codice binario (che otterrà dal mio PC) e salvarlo sul flash. successivamente iniziare a eseguirlo.
  3. Sviluppa i nostri driver di dispositivo per gestire i protocolli di comunicazione.
  4. Sviluppa il nostro ambiente di upload e debug per il PI, insieme alla nostra implementazione personalizzata di C incorporato per ARM (necessario per controllare i GPIO ecc.).
  5. Implementa il nostro sistema operativo per i sistemi embedded, se possibile.

Questo è possibile con il Raspberry Pi? In caso contrario:
-> Quale dei miei cinque obiettivi non è possibile con Raspberry Pi. quali modifiche devo apportare al mio progetto se devo lavorare con il PI?
-> Quali altre schede ci sono sul mercato che mi permetteranno di realizzare esattamente quello che voglio?

Risposte:


76

Qualche sfondo

La cosa più importante che dovresti sapere è che RaspberryPi è una strana bestia in cui la ARM CPUCPU non è principale - è solo un coprocessore per VideoCore GPU. All'avvio di RaspberryPi, un BLOB GPU viene letto dalla scheda SD nella cache L2 ed eseguito. Questo codice visualizza quindi tutte le periferiche importanti (RAM, clock ecc.) E avvia il ARM CPU. Quindi è possibile eseguire il bootloader di 2 ° stadio o un certo sistema operativo stesso ARM CPU.

Il BLOB GPU non è solo un bootloader. In realtà è un sistema operativo (Video Core OS) da solo. Alcuni elementi importanti del sistema non sono direttamente accessibili dalla CPU ARM e devono comunicare GPU(usando il mailboxsistema di messaggistica) per usarli. C'è una documentazione parziale su questo disponibile. Now Video Core OS( VCOS) viene esteso di volta in volta dai dipendenti Broadcom per abilitare le funzionalità necessarie per il Linuxkernel, RISC OSo talvolta anche alcuni sistemi operativi per hobby. Non v'è alcuna documentazione bene su questo però, si dovrà scavare nella RaspberryPi forum,githube possibilmente altri luoghi per trovare informazioni al riguardo. Ma è lì ... da qualche parte. E ci sono alcune persone che scrivono il proprio codice bare metal o addirittura i sistemi operativi su RaspberryPi per aiutarti. E ovviamente molto codice open source, ad esempio il kernel Linux di RasbperryPi.

VideoCore è proprietario, non esiste documentazione ufficiale e strumenti di sviluppo. Quindi, a meno che tu non voglia impegnarti molto, non puoi riscrivere VCOScon il tuo codice. C'è comunque qualche sforzo per decodificare il Video Core, puoi trovare alcune informazioni qui .

Un altro problema è che lo USBstack di Synopsys è proprietario e di nuovo non c'è documentazione per esso e sembra che anche con la documentazione sia difficile implementarlo in modo affidabile. Ma ancora una volta, il codice è disponibile (kernel Linux, u-boot, CSUD ). L'uso delle funzionalità grafiche avanzate di Video Corepotrebbe anche essere difficile: esiste un codice open source per le librerie grafiche, ma è solo per il ARMlato.

Detto questo, è stato possibile rendere la RISC OSporta dalle informazioni disponibili (non mi è del tutto chiaro se stessero usando solo informazioni accessibili al pubblico), alcune persone stanno riscrivendo (indipendentemente da Broadcom) il kernel Linux per mainline, lì è una FreeBSDporta, "U-boot" e altri. Quindi è definitivamente possibile scrivere il proprio sistema operativo. Non è così facile come potrebbe essere.

I tuoi obiettivi

Numero 1

Per quanto ne so, non è possibile che il SoC possa iniziare in un modo diverso da quello descritto. Quindi il bootloader del primo stadio deve essere attivo SD card. E deve essere un GPUbinario, non un ARMbinario, che è un altro problema. E non c'è flash integrato nel RaspberryPi che è anche un problema.

Numero 2

Il problema principale è che non è presente flashsu RaspberryPi. Potresti aggiungerne uno e potrebbe essere attivato nel tuo bootloader (che dovrebbe essere già il bootloader del 2 ° stadio). Scrivere un driver USB potrebbe essere problematico, tuttavia.

Numero 3, 4, 5

Questo non dovrebbe essere un grosso problema. La maggior parte delle periferiche (almeno quelle accessibili a ARM) sono documentate qui . Il bootloader esistente lo rende ancora più semplice poiché il SoC è completamente configurato. Puoi cercare qui e qui un po 'di codice e documentazione.

alternative

Non conosco altre schede valide come RaspberryPi, quindi è difficile consigliare qualcosa, ma potresti dare un'occhiata ad alcuni progetti maturi come Beagleboard / Beaglebone / Pandaboard basati su OMAP oppure puoi seguire lo sviluppo di alcune nuove schede come quelle basate su Allwinner Cubieboard o PCduino . Tutto dipende da cosa esattamente vuoi realizzare.


3
Voglio +100 questa risposta. Molto bene.
orithena,

@maligree lol, non ti preoccupare, è già stato fatto! :)
xxmbabanexx,

1
+1 per Beablebone perché è open source al 100% e hai la possibilità di "rispedire" l'hardware e creare il tuo circuito stampato
portforwardpodcast

5

Per aggiornare la grande risposta di Krzysztof, Broadcom ha finalmente rilasciato pubblicamente del codice, concesso in licenza come BSD a 3 clausole, per facilitare la realizzazione di un driver GPU open source. Lo sforzo "rpi-open-firmware" per sostituire il BLOB firmware Raspberry Pi VPU è iniziato nel 2016: https://github.com/christinaa/rpi-open-firmware . Scopri di più su https://news.ycombinator.com/item?id=11703842

Esistono diverse schede alternative brevemente descritte e collegate da RaspberryPi - Debian Wiki , tra cui ODROID-C1, Cubieboard, Banana Pi, OLimeIno Wifi di Olimex e OlinuxIno Mini, EOMA68 e Beaglebone nero.


Personalmente, penso che le alternative non siano altrettanto eccezionali, molte schede ODROID impongono il controllo della firma sul bootloader e ti impediscono di eseguire il tuo codice su di esse. La famiglia OMAP3 di TI esiste in modalità protetta prima di chiamare il codice, limitando anche ciò che è possibile fare con esso. Il VPU su RPi è in realtà piuttosto carino, penso che sia ciò che dà il vantaggio rispetto ad altre schede e ora che abbiamo una bella toolchain, le cose stanno andando bene.
Kristina Brooks,

1

In realtà c'è molto che puoi fare con il bootloader U-boot con Raspberry Pi. Fondamentalmente lasci semplicemente che la GPU carichi il tuo SoC coprocessore ARM con l'immagine U-boot come "OS".

Ho trovato questo articolo utile come esempio. Non l'ho ancora fatto (ancora), ma ho intenzione di farlo. Mi è capitato di trovare la tua domanda mentre cercavo un modo per farlo da solo, quindi ho trovato l'articolo e sembrava che potesse essere utile ad altri che cercavano simili.

C'è un altro articolo che contiene istruzioni più ampie per la creazione dell'immagine di U-boot.


1
Questo è il tipo di risposta che può essere utile all'inizio, ma dopo un paio d'anni i link smettono di funzionare e non c'è un solo indizio su quale fosse il loro contenuto. Considera almeno di dire quale ramo U-boot e quale compilatore hai usato.
Dmitry Grigoryev,

Grazie Dmitry. Tornerò presto su questo e lo aggiusterò quando avrò del tempo.
Alan Mimms,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.