Qualche sfondo
La cosa più importante che dovresti sapere è che RaspberryPi è una strana bestia in cui la ARM CPU
CPU 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 mailbox
sistema 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 Linux
kernel, RISC OS
o talvolta anche alcuni sistemi operativi per hobby. Non v'è alcuna documentazione bene su questo però, si dovrà scavare nella RaspberryPi forum
,github
e 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 VCOS
con il tuo codice. C'è comunque qualche sforzo per decodificare il Video Core, puoi trovare alcune informazioni qui .
Un altro problema è che lo USB
stack 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 Core
potrebbe anche essere difficile: esiste un codice open source per le librerie grafiche, ma è solo per il ARM
lato.
Detto questo, è stato possibile rendere la RISC OS
porta 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 FreeBSD
porta, "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 GPU
binario, non un ARM
binario, che è un altro problema. E non c'è flash integrato nel RaspberryPi che è anche un problema.
Numero 2
Il problema principale è che non è presente flash
su 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.