Alguma experiência
A coisa mais importante que você deve saber é que o RaspberryPi é um animal estranho, onde ARM CPU
nã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 mailbox
o 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 Linux
kernel RISC OS
ou , às vezes, até alguns SOs de hobby. No entanto, não há uma boa documentação sobre isso, você teria que pesquisar RaspberryPi forum
,github
e 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 VCOS
com 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 USB
pilha 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 Core
também pode ser difícil - há algum código-fonte aberto para as bibliotecas de gráficos, mas é apenas para o ARM
lado.
Dito isso, foi possível disponibilizar a RISC OS
porta 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 FreeBSD
porta, '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 GPU
binário, não um ARM
biná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 flash
no 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.
Para atualizar a excelente resposta de Krzysztof, a Broadcom finalmente lançou publicamente algum código, licenciado como 3-Clause BSD, para ajudar na criação de um driver de GPU de código aberto. O esforço "rpi-open-firmware" para substituir o blob de firmware do Raspberry Pi VPU começou em 2016: https://github.com/christinaa/rpi-open-firmware . Veja mais em https://news.ycombinator.com/item?id=11703842
Existem várias placas alternativas brevemente descritas e vinculadas a partir do RaspberryPi - Debian Wiki , incluindo ODROID-C1, Cubieboard, Banana Pi, OLinuxIno Wifi da Olimex e OlinuxIno Wifi e OlinuxIno Mini, EOMA68 e Beaglebone black.
fonte
Na verdade, você pode fazer muito com o gerenciador de inicialização U-boot com Raspberry Pi. Você basicamente deixa a GPU carregar seu SoC do coprocessador ARM com a imagem de inicialização U como o "SO".
Eu achei este artigo útil como exemplo. Ainda não o fiz, mas pretendo fazê-lo. Por acaso, encontrei sua pergunta enquanto procurava uma maneira de fazer isso sozinho. Depois encontrei o artigo e parecia que poderia ser útil para outras pessoas que procuravam algo semelhante.
Há outro artigo que contém instruções mais abrangentes para criar a imagem de inicialização U.
fonte