quinta-feira, 28 de julho de 2016

Boot direto via USB finalmente disponível para Raspberry Pi 3 (pendrive, HD, etc.)

Raspberry Pi 3 e boot via usb

No lançamento do Raspberry Pi 3 Modelo B foi informado o suporte a boot (na ROM do SoC) via USB mass storage e rede (PXE). Embora ainda sem um firmware adequado para utilização.

Finalmente o firmware e informações de como utilizar foram liberadas. Ainda se trata de modos experimentais e que exigem o upgrade para um firmware ainda em teste. Lembrando que esse tipo de boot via somente USB mass storage só funciona no Raspberry Pi 3 Modelo B, ele é dependente de uma programação interna no SoC de fábrica que não está presente nos outros modelos.

Nesse post irei apresentar somente o boot via USB que é o mais desejado. Descreverei de forma mais simples que o guia no github da fundação. Embora algumas partes sejam baseadas nele.

O único problema é que inicialmente você precisará de um MicroSD para configurar esse modo.

Atualização: Só para constar, a alteração do bit via OTP (One-time-programmable) é irreversível entretanto não me causou qualquer tipo de problema até o momento.


Como realizar boot direto via USB no Raspberry Pi 3


Com o sistema em seu MicroSD, realize o boot no Raspberry Pi 3. Abra um terminal,  instale a ferramenta rpi-update e atualize o firmware para a próxima versão:

$ sudo apt-get update
$ sudo apt-get install rpi-update
$ sudo BRANCH=next rpi-update


O próximo passo é o que se faz realmente necessário ter um MicroSD. Você precisará adicionar um parâmetro ao arquivo /boot/config.txt que pode ser feito de forma fácil com o comando:

$ sudo echo -e "\nprogram_usb_boot_mode=1" >> /boot/config.txt 

Esse parâmetro irá alterar um bit na OTP do SoC do Raspberry Pi 3. Para ler o valor padrão você pode utilizar o comando:

$ sudo vcgencmd otp_dump|grep 17: 
17:1020000a

O resultado padrão sairá como acima. Reinicie o sistema:

$ sudo reboot

Ao executar novamente o comando vcgencmd acima o resultado deverá ser esse:

$ sudo vcgencmd otp_dump|grep 17: 
17:3020000a 

Agora realizaremos a cópia do sistema no MicroSD para o dispositivo USB (pendrive por exemplo). Na interface gráfica do Raspberry Pi há uma ferramenta de backup que foi introduzida algumas versões atrás no Raspbian, chamada SD Card Copier. Abra a ferramenta, veja se seu dispositivo USB aparece na lista em Copy To Device.

Raspberry Pi 3 e boot via usb

Nesse passo você já descobrirá o caminho do seu dispositivo, que caso não tenha outro semelhante nas USBs, será /dev/sda .

Raspberry Pi 3 e boot via usb

Raspberry Pi 3 e boot via usb

Raspberry Pi 3 e boot via usb

Após a cópia, vá para o terminal novamente onde iremos criar alguns diretórios para montar as duas partições do dispositivo USB.

$ sudo mkdir /mnt/target
$ sudo mount /dev/sda2 /mnt/target/
$ sudo mkdir /mnt/target/boot
$ sudo mount /dev/sda1 /mnt/target/boot/


Será necessário alteração de dois arquivos que estão dentro do dispositivo USB. O cmdline.txt em sua partição de boot e o fstab em seu sistema de arquivos principal. Ambas alterações serão feitas para alterar o dispositivo utilizado, algo que pode ser feito manualmente abrindo o arquivo ou via sed como no tutorial original:

$ sudo sed -i "s,root=/dev/mmcblk0p2,root=/dev/sda2," /mnt/target/boot/cmdline.txt
$ sudo sed -i "s,/dev/mmcblk0p,/dev/sda," /mnt/target/etc/fstab


Caso seu dispositivo for diferente de sda basta alterar somente o sda para o seu nas duas linhas.

Desmonte as partições e desligue o sistema: 

$ sudo umount /mnt/target/boot
$ sudo umount /mnt/target/

$ sudo shutdown -h now

Desligue o cabo de energia, remova o MicroSD e mantenha o dispositivo USB com o sistema. Religue o cabo de energia.

Se tudo estiver certo seu sistema já realizará o boot diretamente via Mass Storage no dispositivo USB.

Atualização: Algo que esqueci de mencionar é que ao desligar o sistema com o firmware experimental o consumo é maior do que no outro além do led ACT permanecer aceso.

Referência: https://github.com/raspberrypi/documentation/blob/master/hardware/raspberrypi/bootmodes/msd.md

14 comentários:

  1. Show de bola.
    Valeu pela dica.

    ResponderExcluir
  2. Sabe dizer se este novo firmware esta estável ?

    ResponderExcluir
    Respostas
    1. Ah algo que esqueci de citar no artigo, então, aparentemente ainda não, eu não testei muito mas algo que percebi é que ao dar shutdown ele consome bem mais energia que o outro e o led ACT permanece aceso. Vou atualizar o artigo.

      Excluir
    2. Você realmente leu a dica? Acho que não, pois informa claramente ser algo experimental, isso já não basta?

      Excluir
  3. disqus no sistema de comentarios pless

    ResponderExcluir
  4. Com esse sistema não precisarei mais usar o cartão micro Sd,pois o sistema vai iniciar direto pelo USB.

    ResponderExcluir
  5. Se eu gravar um bit para forçar leitura do USB, poderei desfazer tal alteração? Obrigado.

    ResponderExcluir
    Respostas
    1. Não, é irreversível. Mas até então mesmo eu não utilizando o boot USB no dia dia com o bit ativo não tive problemas aqui.

      Excluir
    2. Depois da modificação entao funcionou tanto pelo MicroSD ou USB?

      Excluir
    3. Sim funciona das duas formas, entretanto a imagem ter que estar configurada para o modo, como a parte do cmdline.txt indicando o caminho root.

      Excluir
  6. No meu deu o seguinte erro:

    root@overmod:~# BRANCH=next rpi-update
    *** Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS and Dom
    *** Performing self-update
    !!! Failed to download update for rpi-update!
    !!! Make sure you have ca-certificates installed and that the time is set correctly


    conhece algum jeito de solucionar?

    ResponderExcluir
    Respostas
    1. Olá, pelo que andei lendo por aí, essa atualização já está nas novas imagens do raspbian, não precisando realizar esse passo, veja se funciona sem ele.

      Excluir
  7. Ele vai dar boot tanto o usb quando no cartão de memoria? se remover o dispositivo usb e reinserir o cartão de memoria ele vai dar boot normalmente?

    ResponderExcluir
    Respostas
    1. Se você não alterou nenhum caminho no cartão original, sim.

      Excluir