Manual

do

Maker

.

com

Como fazer boot do Raspberry Pi pela USB

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 é procurar esse 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 toda a 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 podem 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 paliativa" 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 pôr 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.

sudo apt-get update && sudo apt-get upgrade

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

echo program_usb_boot_mode=1 | sudo tee -a /boot/config.txt

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:

vcgencmd otp_dump | grep 17:
17:3020000a

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:

dd bs=4M if=2017-07-05-raspbian-jessie.img of=/dev/sdX conv=fsync

Apenas aponte  o dispositivo correto, substituindo sdXpela 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.

  Inscreva-se no nosso canal Manual do Maker no YouTube.

Também estamos no Instagram.

Nome do Autor

Djames Suhanko

Autor do blog "Do bit Ao Byte / Manual do Maker".

Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.