Como o Raspberry Pi inicializa?

57

Eu tenho um mini computador de framboesa e estou me perguntando como essa coisa faz todo o processo de inicialização. Posso compilar meu próprio kernel e iniciar o ramdisk com meus próprios scripts e construir meu próprio sistema linux mínimo no PC, mas para isso preciso usar algum gerenciador de inicialização. O Raspberry parece não suportar os gerenciadores de inicialização.

Parece que, de alguma forma, inicialize usando sua GPU que lê alguma partição no cartão SD (provavelmente aquela com sinalizador inicializável) que precisa ser formatada no FAT32 e, em seguida, lê alguns arquivos a partir daí, que são fornecidos, por exemplo, por raspbian.

Mas como eu inicializava meu próprio kernel, com minhas próprias personalizações que eu mesmo compilei? Onde devo copiar a imagem do kernel / initrd (disco ram) para que o raspberry a encontre e a inicialize? Basicamente, estou procurando por uma documentação técnica muito detalhada que descreva o processo de inicialização no framboesa ou apenas uma explicação sobre isso.

Petr
fonte
11
possível duplicata de O que acontece durante o processo de inicialização?
precisa saber é o seguinte

Respostas:

59

Nesta postagem do fórum do Raspberry Pi [Editado para refletir loader.bincomo um anacronismo] :

  1. Quando o Raspberry Pi é ativado pela primeira vez, o núcleo do ARM está desativado e o núcleo da GPU está ativado. Neste ponto, a SDRAM está desativada.
  2. A GPU começa a executar o carregador de inicialização do primeiro estágio, que é armazenado na ROM no SoC. O carregador de inicialização do primeiro estágio lê o cartão SD, carrega o carregador de inicialização do segundo estágio ( bootcode.bin) no cache L2 e o executa.
  3. bootcode.binativa a SDRAM, lê o carregador de inicialização do terceiro estágio (loader.bin) do cartão SD na RAM e o executa. [Versões mais recentes não usam um gerenciador de inicialização do terceiro estágio. ]
  4. [Se aplicável] loader.binlê o firmware da GPU ( start.elf).
  5. start.elfconfig.txt, cmdline.txtekernel.img

loader.binnão faz muito. Ele pode manipular .elfarquivos e, portanto, é necessário carregar start.elfna parte superior da memória (o ARM usa SDRAM do endereço zero). Existe um plano para adicionar suporte ao carregamento de elfs bootcode.bin, o que tornaria loader.bindesnecessário, mas é de baixa prioridade (acho que pode economizar 100ms na inicialização). [Esta mudança já ocorreu. ]

Aqui estão alguns recursos que podem ser úteis:

syb0rg
fonte
2
Esse conteúdo desses arquivos bin é todo software proprietário?
Petr
3
@ Pet Aqui está o Github para o firmware do Raspberry Pi, vou editá-lo na minha resposta.
Syb0rg 02/11/2013
11
Nas perguntas frequentes do Raspberry Pi , diz "Você precisa inicializar a partir do SD, mas um USB HD pode" assumir o controle "após a inicialização inicial. Você não pode inicializar sem um cartão SD".
#
11
Essa partição, que é lida primeiro, é uma partição com o sinalizador B ou deve ser a primeira partição? E se eu fiz isso muito grande e eu queria criar outro no fim do cartão SD, que seria menor
Petr
11
@ Pet Você deve fazer isso como outra pergunta!
syb0rg