Alguma experiência
A coisa mais importante que você deve saber é que o RaspberryPi é um animal estranho, onde ARM CPUnão é a CPU principal - é apenas um co-processador para o VideoCore GPU. Quando o RaspberryPi é iniciado, um blob de GPU é lido do cartão SD para o cache L2 e executado. Este código traz todos os periféricos importantes (RAM, relógios, etc) e inicia o ARM CPU. Em seguida, o gerenciador de inicialização do segundo estágio ou algum sistema operacional pode ser executado ARM CPU.
O blob da GPU não é apenas um gerenciador de inicialização. Na verdade, é um sistema operacional (Video Core OS) por si só. Alguns elementos importantes do sistema não são acessíveis diretamente pela CPU do ARM e eles precisam se comunicar GPU(usando mailboxo sistema de mensagens) para usá-los. Existe documentação parcial sobre isso disponível. O Now Video Core OS( VCOS) é estendido de tempos em tempos pelos funcionários da Broadcom para habilitar os recursos necessários ao Linuxkernel RISC OSou , às vezes, até alguns SOs de hobby. No entanto, não há uma boa documentação sobre isso, você teria que pesquisar RaspberryPi forum,githube possivelmente outros lugares para encontrar informações sobre isso. Mas está lá ... em algum lugar. E há algumas pessoas que escrevem seu próprio código bare metal ou até mesmo sistemas operacionais no RaspberryPi para ajudá-lo. E, claro, muito código-fonte aberto - o kernel Linux do RasbperryPi, por exemplo.
O VideoCore é proprietário, não há documentação oficial e ferramentas de desenvolvimento. Portanto, a menos que você queira fazer muito esforço, não poderá reescrever VCOScom seu próprio código. Há, no entanto, algum esforço para fazer a engenharia reversa do Video Core, você pode encontrar algumas informações aqui .
Outro problema é que a USBpilha da Synopsys é proprietária e, novamente, não há documentação para ela e parece que mesmo com a documentação é difícil implementá-la com segurança. Mas, novamente, o código está disponível (kernel do Linux, u-boot, CSUD ). O uso de recursos avançados de gráficos Video Coretambém pode ser difícil - há algum código-fonte aberto para as bibliotecas de gráficos, mas é apenas para o ARMlado.
Dito isso, foi possível disponibilizar a RISC OSporta a partir das informações (não está totalmente claro para mim se eles estavam usando apenas informações acessíveis ao público), algumas pessoas estão reescrevendo (independentemente da Broadcom) o kernel do Linux para a linha principal. é uma FreeBSDporta, 'U-boot` e outras. Portanto, é definitivamente possível escrever seu próprio sistema operacional. Não é tão fácil quanto poderia ser.
Seus objetivos
Número 1
Até onde eu sei, não há como o SoC começar de outra maneira que a descrita. Portanto, o carregador de inicialização do primeiro estágio deve estar ativado SD card. E tem que ser um GPUbinário, não um ARMbinário, que é outro problema. E não há flash integrado no RaspberryPi, o que também é um problema.
Número 2
O principal problema é que não há placa flashno RaspberryPi. Você pode adicionar um e ele pode ser ativado no seu carregador de inicialização (que já teria que ser o carregador de inicialização do segundo estágio). Escrever um driver USB pode ser problemático, no entanto.
Número 3, 4, 5
Isso não deve ser um grande problema. A maioria dos periféricos (pelo menos aqueles acessíveis ao ARM) está documentada aqui . O gerenciador de inicialização existente torna isso ainda mais fácil, pois você configura seu SoC completamente. Você pode procurar aqui e aqui algum código e documentação.
Alternativas
Eu não conheço nenhum outro conselho tão bom quanto o RaspberryPi, por isso é difícil recomendar algo, mas você pode dar uma olhada em alguns projetos maduros, como o Beagleboard / Beaglebone / Pandaboard, baseado em OMAP, ou acompanhar o desenvolvimento de alguns novos, como o Allwinner. Cubieboard ou PCduino . Tudo depende do que exatamente você deseja realizar.