
Um dos nosso produtos funciona sobre Raspberry Pi que é – dito seja de passagem – uma plataforma e tantas, não apenas para investigar, inventar mas também para produzir e ganhar o pão nosso de cada dia.
Todavia, o que mais me causava atrito era ter que toda vez criar uma imagem, gravar ela na SD, espetar isso no Raspberry, esperar ligar, comprovar as mudanças, etc.
Receita de bolo
- Garanta que tenha tudo instalado
$ sudo apt-get install -y qemu-system
- Baixe a imagem do raspberry (ou qualquer outro sistema operacional) do seu interesse: https://www.raspberrypi.org/downloads/. Aos fins do exemplo, digamos que estamos usando raspbian-buster-lite.
- Depois baixe os kernels daqui: https://github.com/dhruvvyas90/qemu-rpi-kernel
$ cd ~/Downloads/
$ mkdir dev
$ git clone https://github.com/dhruvvyas90/qemu-rpi-kernel.git - Crie uma pasta de fácil acesso:
$ mkdir ~/qemu-mv
- Expanda o buster que baixou no ponto 1 para a pasta criada
$ cd ~/qemu-mv
$ unzip ~/Downloads/2019-06-20-raspbian-buster-lite.zip - Agora precisamos pegar as dimensões da imagem para poder modifica-la:
$ fdisk -l ~/qmu-mv/2019-06-20-raspbian-buster-lite.img
- Repare que o tamanho do setor é 512 bytes e que a partição Linux começa no setor 540672. Multiplicando os dois obtemos 276824064. Com essa informação, montamos o disco para mudarmos dois arquivos que estão dentro da imagem:
- Criamos uma pasta e montamos a imagem lá:
$ sudo mkdir /mnt/raspberry
$ sudo mount -v -o offset=276824064 -t ext4 2019-06-20-raspbian-buster-lite.img /mnt/raspbian
- Edite o arquivo ld.so.preload
$ sudo nano /mnt/raspbian/etc/ld.so.preload - Comente todas as linhas colocando um ‘#’ no inicio de cada linha.
- Agora edite o arquivo /etc/fstab
$ sudo nano /etc/fstab
- Substitua as referências para /dev/sda1 (vfat) e /dev/sda2 (ext4)
- Desmonte a unidade
$ sudo umount /mnt/raspbian
- Criamos uma pasta e montamos a imagem lá:
- Copie o kernel para dentro desta pasta
$ cp ~/Downloads/dev/qemu-rpi-kernel/kernel-qemu-4.19.50-buster ~/qemu-mv/
- Agora crie um arquivo com o conteúdo indicado abaixo
$ nano ~/qemu-mv/meu-rb.sh
- E dê direitos de execução ao script
$ sudo chmod +x ~/qemu-mv/meu-rb.sh
Conteúdo do script meu-rb.sh
#!/bin/bash
qemu-system-arm \
-kernel ~/work/qemu_mv/kernel-qemu-4.19.50-buster \
-cpu arm1176 \
-m 256 \
-M versatilepb \
-serial stdio \
-append "root=/dev/sda2 rootfstype=ext4 rw" \
-drive file=~/work/qemu_mv/2019-06-20-raspbian-buster-lite.img,format=raw,index=0,media=disk \
-no-reboot \
-net nic \
-net user,hostfwd=tcp::5022-:22
Com isso feito, é apenas rodar o script que o qemu abrirá uma sessão com o raspberry/arm.
Modificações feitas aqui são salvas de forma permanente (instalação de pacotes, configuração do seu software, volcado de banco de dados, etc) na imagem.
Uma vez que sua máquina esteja rodando como desejado, desligue-a. Reverta o feito nos passos 7.2 e 7.4 e grave a imagem em uma SD
Com certeza seu processo de desenvolvimento e entrega será mais rápido ficando apenas para depurar in situ aquelas coisas que o emulador não consegue entregar como interface com hardware via GPIO por exemplo.
Você precisa fazer login para comentar.