Como fazer boot do Raspberry Pi pela USB

Se você deseja efetuar um boot do Raspberry Pi pela USB, esse tutorial pode ser o que você procura. Mas não é ainda a solução definitiva, pois não é possível efetuar um boot de todos os dispositivos de armazenamento.

De fato, quando saiu o Raspberry Pi 3 foi anunciado novos modos de boot, porém ainda está em estágio experimental e provavelmente a melhor opção é aguardar até que saia uma solução definitiva.

Como o  boot é feito





Dentro do dispositivo  há uma área de boot na ROM com um bit relacionado ao boot. Esse bit é como um ponteiro para o destino de boot. Não exatamente como uma MBR, mas muito mais minimalístico. A partir desse ponto é definido o modo de boot, que pode ser pelo SD ou pela USB.

O Raspberry Pi em seu modo tradicional faz a busca do arquivo bootcode.bin ao ser energizado ou reiniciado. Isto é, todo o processo de boot é feito fora do hardware, por isso que com um cartão que contenha um sistema mal instalado ou vazio, o Raspberry não dá nenhum sinal visível de tentativa de boot – coisa que assusta muitos usuários novatos.

O único processo  da placa é procuraresse arquivo de boot,então  o programa é carregado para a memória e iniciado. A partir desse ponto, acabou a tarefa da board.

O arquivo bootcode.bin contém todaa instrução necessária para fazer o carregamento do sistema operacional que, a partir desse ponto, funciona de forma semelhante a um sistema Linux para x86; o kernel é carregado com o conjunto de drivers do dispositivo (chamado de firmware aqui, mas semelhante a um initrd).

Nem todos os dispositivos funcionarão como boot device

Alguns dispositivos são inicializados de forma muito lenta e acabam não efetuando o boot por timeout. Mesmo sendo possível estender esse tempo, alguns dispositivos falharão em responder. Além disso, alguns dispositivos possuem protocolos muito específicos e que não são possíveis de manipular (pelo menos até agora). Esses bugs existem no Raspberry devido ao método utilizado para desenvolver o código de boot, de modo que ele seja comportado dentro de 32kB. Mas alguns dispositivos já são homologados. Até então:

  • Sandisk Cruzer Fit 16GB
  • Sandisk Cruzer Blade 16Gb
  • Samsung 32GB USB 3.0 drive
  • MeCo 16GB USB 3.0

Obviamente outros dispositivos devem ter compatibilidade também, mas como pode notar, é um número bastante reduzido.

Serve para qualquer Raspberry?

Não. Só será possível fazê-lo a partir do BCM2837, ou seja, apenas Raspberry Pi 3 até agora. Para os demais, existe uma condição que não sei se pode ser chamada de “solução paleativa” ou “gambiarra”, que é um bootcode.bin com as instruções iniciais com boot normal no SD e depois o processo é continuado na USB a partir de instruções contidas nesse bootcode.bin.

Programar o modo de boot pela USB

Bem, agora vamos por a mão na massa, afinal, já temos os conceitos necessários. Porém antes de fazer um boot por USB, precisaremos fazer um boot tradicional pelo SD com uma configuração especifica para ativar o modo de boot por USB. Essa configuração modificará aquele bit citado mais lá em cima. Uma vez que esse bit esteja configurado, não será mais necessário utilizar o cartão SD. Só tenha em mente que uma vez modificada a OTP, a modificação não poderá mais ser desfeita. Eu utilizo Raspbian, então o tutorial segue baseando-me nesse sistema.

Atualize o sistema

O primeiro passo é manter o sistema devidamente atualizado.

Versões de sistema a partir de 2017-04-10 dispensam esse passo, mas não custa nada manter tudo em ordem.

Habilitar o modo de boot por USB

Não tem nem muito o que falar, todos os detalhes foram devidamente explicados mais acima. Apenas execute esse comando também. Feito isso, reinicie o sistema e verifique se o OTP foi programado:

A saída deverá obrigatoriamente ser 3020000a, de outro modo, a programação não foi executada. Após esse passo, não é mais necessário manter a linha program_usb_boot_mode, por isso remova-a do arquivo /boot/config.txt se desejar.

Preparando o dispositivo de  boot

Agora é hora de preparar o sistema de origem do boot. O processo de instalação no pendrive deve ser o mesmo que para um cartão SD, faça a transferência do sistema com o comando dd . Algo como:

Apenas aponte  o dispositivo correto, substituindo sdX pela letra correta.

Iniciando o sistema

Após o processo anterior, remova o dispositivo do seu computador e coloque-o no Raspberry já sem o cartão SD e energize-o. Pode demorar algo em torno de 10 segundos pra começar o processo, então voi-lá! Seu sistema estará iniciado, desde que o dispositivo selecionado seja suportado.

1 Star2 Stars3 Stars4 Stars5 Stars (112 votes, average: 4,10 out of 5)
Loading...

 

Inscreva-se no nosso newsletter, alí em cima à direita e receba novos posts por email.

Siga-nos no Do bit Ao Byte no Facebook.

Prefere twitter? @DobitAoByte.

Inscreva-se no nosso canal Do bit Ao Byte Brasil no YouTube.

Nossos grupos:

Arduino BR – https://www.facebook.com/groups/microcontroladorarduinobr/
Raspberry Pi BR – https://www.facebook.com/groups/raspberrybr/
Orange Pi BR – https://www.facebook.com/groups/OrangePiBR/
Odroid BR – https://www.facebook.com/groups/odroidBR/
Sistemas Embarcados BR – https://www.facebook.com/groups/SistemasEmbarcadosBR/
MIPS BR – https://www.facebook.com/groups/MIPSBR/
Do Bit ao Byte – https://www.facebook.com/groups/dobitaobyte/

Próximo post a caminho!

Djames Suhanko

Djames Suhanko é Perito Forense Digital. Já atuou com deployer em sistemas de missão critica em diversos países pelo mundão. Programador Shell, Python, C, C++ e Qt, tendo contato com embarcados ( ora profissionalmente, ora por lazer ) desde 2009.