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.
Tópicos
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.
1 |
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
1 |
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:
1 2 |
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:
1 |
dd bs=4M if=2017-07-05-raspbian-jessie.img of=/dev/sdX conv=fsync |
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.
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!
Você precisa fazer log in para comentar.