Qemu – Emulando o Raspberry PI

Meu TCC estou trabalhando com Linux Embarcado e em especial utilizando o Raspberry PI B. Porém nem todos os dias eu podia levar o Rb PI para a empresa e no horário do almoço realizar testes, ou para a faculdade com medo de danificar no transporte e sem contar que é chato ligar tudo e blá blá blá. Então pensei, será que não tem como eu virtualizar apenas para testar os recursos que irão rodar no ARM e depois só passo a versão final?

E quem procura acha (Google!), vi alguns sites mostrando como criar maquinas virtuais com Qemu, que já uso bastante por sinal, então para ter o Qemu com suporte a arquitetura ARM podemos fazer de duas maneiras:

Você pode compilar na mão baixando o fonte do site, eu não fiz, mas pelo README que dei uma olhada é só no momento da compilação adicionar a opção –target-list=arm-softmmu mas não fiz este procedimento o acima foi suficiente.
Se você digitar qemu e pressionar duas vezes o tab irá aparecer várias comandos, mas o que interessa para nós é qemu-system-arm e é claro ter suporte ao processador ARM que o Raspberry PI utiliza, para verificar isso:

O SoC que o Raspberry PI utilizado é da Broadcom BCM2835 que já integra CPU, GPU, DSP e SDRAM, porém nosso CPU em questão é ARM1176JZF-S família ARM11 (Armv6), por curiosidade o J é de ARM Jazelle, que é uma característica de processadores ARM que permitem executar aplicações Java é um Java embarcado, mas isso é tema para outro post.
Então sabemos que o processador procurado é o arm1176. Que também seria facil saber verificando dentro do Raspberry PI ligado visualizando o conteudo de /proc/cpuinfo.

Agora vamos baixar a imagem do Linux Debian direto do site do Raspberry e o Kernel para o Qemu.

Agora descompacte a imagem e execute o script para iniciar a VM:

Problemas e soluções:

Tive problema  ao  iniciar a VM e ficar um loop pedindo para digitar raspi-config porém não era possivel até que surgia um SIGNAL e um reboot era feito, ou surgia uma tela com (none) login: e não autenticava o usuario pi e senha raspberry como padrão, para resolver:

Não tive mais problemas, mas em um terceiro Linux que realizei o procedimento não sei se foi de tantos testes com a imagem foi reportado um erro de inconsistência de dados no /dev/sda2 e ele mesmo recomendava o fsck e foi o que resolveu:

Agora mais iniciar com o script abaixo:

Qemu-raspberry-boot1

Qemu-raspberry-boot2

Qemu-raspberry-login

Qemu-raspberry-hw

Qemu-raspberry-login-terminal

Não adianta eu mostrar e não comentar sobre os parâmetros, o mais básico que utilizo é este e as opções significam:

qemu-system-arm: Estou dizendo que é baseado em arm o sistema que irei subir
-kernel: Não preciso nem dizer né, irei fornece o arquivo kernel para o qemu utilizar
-cpu arm1176: Esse é muito importante aqui o modelo do processador ARM
-m 256: Esse é autoexplicativo mas vamos la estou passando a quantidade de memoria RAM a ser utilizada.
-M versatilepb: Placa emulada, baseada em uma placa real que utiliza um processador ARM, e inclui diversos periféricos, servindo como uma ótima opção para desenvolvimento e aprendizado, é uma base para o kernel ter de periféricos.
-no-reboot: Desabilitar o reboot da VM, caso contrario você consegue reiniciar dando um reboot no Linux
-serial stdio: Vai fazer aparecer no stdout tudo o que os programas a executar internamente enviarem para a porta serial; e tudo o que for escrito pelo utilizador no seu stdin, vai aparecer como “entrando” pela porta serial da máquina virtual.
-append “root=/dev/sda2 panic=10”: Linha de comando para o kernel, no caso passamos para o root ser em /dev/sda2 e panic=1 que estamos falando que em caso de crash rebootar em 1s, eu deixo em 10s em desenvolvimento e depois diminuo.
-hda 2013-05-25-wheezy-raspbian.img: Estou passando a minha imagem para ele montar e usar
-redir tcp:2722::22: Direcionar a porta 2722 para a porta 22 da VM no protocolo tcp

Tem uma infinidade de comandos e combinações com o Qemu mas pretendo abordar em um post sobre Qemu em virtualização, bom espero ajudar alguém como isso tem me ajudado.

Até a próxima!

Share Button

CC BY-NC-SA 4.0 Qemu – Emulando o Raspberry PI by Cleiton Bueno is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

  • Show de bola!
    Parabéns pelo artigo.
    Essa é uma ótima maneira de ajudar a estudar a Raspberry Pi.

  • Ao executar o comando “sudo mount 2013-05-25-wheezy-raspbian.img -o offset=62914560 /mnt/rbpi” é retornado um erro: “mount: mount point /mnt/rbpi does not exist”.

    • O que aconteceu foi que o diretório /mnt/rbpi não esta criado, e faltou esse passo no post, irei corrigir.

  • A propósito, meu TCC também é sobre o raspberry. Falta voce passar o comando sudo mkdir pra criar os diretorios.

    • Que legal Rodrigo. Eu queria ter adquirido o BeagleBone Black mas na época não estava enviando para o Brasil tinha poucos distribuidores, mas o Raspberry PI B me atendeu super bem, tanto que comecei com o Raspbian e o boot estava com 40s e para ficar tudo up próximo a 01:15s.
      Depois de ler muito sobre embarcar com Linux meu kernel ficou com 2.8M e meu rootfs próximo a 25M e meu boot completo caiu pra cerca de 12s, mas isso utilizando Busybox e totalmente customizado para a minha aplicação tanto que levei próximo a 6 meses pra deixar como queria.
      Mas acabando o TCC irei explicar como fiz tudo isso, pois não achei blogs brasileiros passando essas informações.
      O seu é sobre o que? Abraço, obrigado pela correção.

  • Leandro

    otimo post!
    So fiquei com duas duvidas, se eu configurar a placa de rede do raspi na mesma faixa de IP que eu utilizo meu Debian, o raspi ira navegar na internet?
    Estou travado na resolucao 640×480… tem como mudar isso?

  • manotroll

    e como altera a resolução (pergunta)
    pois essa fixa e pequena pra um teste que quero fazer.

  • manotroll

    compilei o qemu e mesmo assim não esta instalando
    esta pedindo a dependência libspice-server1
    como faz pra compilar com todas as opções (pergunta)
    to no Linux (koppix) e não esta dando pra configurar o teclado

  • Valeu Cleiton Bueno o qemu aqui no meu Ubuntu seguindo o teu tutorial funcionou certinho, tive que criar os diretório /mnt/rpbi, fsck também pois sem os procedimentos dava problemas no boot. Por fim depois de tudo ajustado até o modo grafico funfou.