Qual BIOS o Raspberry Pi usa?

29

Estou querendo aprender sobre o BIOS em uma placa-mãe Raspberry Pi. Como é chamado o BIOS? Ele tem um nome específico ou é apenas chamado de BIOS em um Raspberry Pi?

Devyn Collier Johnson
fonte
2
O BIOS armazena algum software para controlar seu PC antes de inicializar (disco rígido de configuração de exemplo, memória etc). O Pi não usa um "BIOS" como em um PC. Apenas inicializa o chip Broadcom (CPU, Cache, GPU) usando o firmware escrito para esse chip e passa diretamente para o sistema operacional. O sistema operacional detecta o hardware e a memória ram informados pela Broadcom. Isso torna a inicialização muito rápida, mas apenas a Broadcom sabe como depurar ou "definir" propriedades em tempo real.
Piotr Kula

Respostas:

32

O firmware é um código proprietário de código fechado programado no processador SoC (System on a Chip), que não pode ser modificado. Após a inicialização, o firmware iniciará um gerenciador de inicialização no cartão SD. Não acredito que outros serviços sejam fornecidos por meio do firmware SoC; portanto, não é realmente um "BIOS" (Sistema Básico de Entrada / Saída) propriamente dito. Após esse ponto, tudo o mais vem do cartão SD.

De acordo com a seção de software do wiki , a ordem de inicialização é a seguinte:

  1. Carregador de inicialização do primeiro estágio - É usado para montar a partição de inicialização FAT32 no cartão SD, para que o carregador de inicialização do segundo estágio possa ser acessado. Ele é programado no próprio SoC durante a fabricação do RPi e não pode ser reprogramado por um usuário.
  2. Carregador de inicialização do segundo estágio (bootcode.bin) - É usado para recuperar o firmware da GPU do cartão SD, programar o firmware e iniciar a GPU.
  3. Firmware da GPU (start.elf) - Depois de carregado, isso permite que a GPU inicie a CPU. Um arquivo adicional, fixup.dat, é usado para configurar a partição SDRAM entre a GPU e a CPU. Nesse ponto, a CPU é liberada da redefinição e a execução é transferida.
  4. Código do usuário - pode ser um de qualquer número de binários. Por padrão, é o kernel do Linux (geralmente chamado kernel.img), mas também pode ser outro gerenciador de inicialização (por exemplo, U-Boot) ou um aplicativo básico.
Tevo D
fonte
7
Gostaria apenas de acrescentar que o gerenciador de inicialização do 1º estágio é gravado em uma pequena ROM dentro do SoC. Como mencionado, é de inteira responsabilidade carregar o bootcode.bincartão SD. Esta é a razão pela qual é impossível inicializar o RaspberryPi a partir de um meio que não seja o cartão SD.
Krzysztof Adamski
@TevoD, boa resposta! Eu amo os detalhes completos.
Devyn Collier Johnson
16

O @TevoD está quase certo no que ele escreveu em sua resposta - o RaspberryPi está usando o binário de firmware de código fechado como um gerenciador de inicialização. A versão atual pode ser encontrada aqui . Os dois arquivos que compõem o firmware são bootcode.bin(carregador de inicialização do segundo estágio) e start.elf("firmware" da GPU). O que é interessante e único no RaspberryPi é que ele começa a partir de GPU(chip gráfico) e é aqui que o gerenciador de inicialização é executado. GPUentão inicia ARM CPUe executa o kernel do Linux.

Depois que o Linux é iniciado, o código GPUativado não é descarregado, no entanto. Em vez disso, ele executa seu próprio sistema operacional simples, chamado VCOS( Video Core Operating System). O kernel do Linux se comunica com seus serviços mailbox protocolusando interrupções especiais e usando (a GPU pode produzir interrupções no ARM). Você pode ler algumas informações sobre o protocolo de caixa de correio usado framebuffer aqui . A GPU é responsável não apenas pelas coisas gráficas - ela também controla os relógios e produz áudio, por exemplo. Nesse sentido, o firmware da GPU pode ser considerado algo semelhante ao BIOSdos computadores PC normais. Você pode encontrar mais informações sobre esta leitura dos drivers do kernel do RaspberryPi Linux.

Você também pode encontrar mais informações nesta resposta.

Krzysztof Adamski
fonte
Bom ponto. Eu estava considerando que a pergunta do BIOS se referia explicitamente ao firmware interno, não ao cartão SD, e adicionei a ordem de inicialização para obter uma resposta mais completa. O seu certamente assume a partir daí. +1
Tevo D