Manual
do
Maker
.
com
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.
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).
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:
Obviamente outros dispositivos devem ter compatibilidade também, mas como podem notar, é um número bastante reduzido.
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.
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.
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.
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.
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.
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.
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.