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.