Emulação de ARM com QEMU e Debian

Boot do Debian para ARM
Boot do Debian para ARM

Montar um toolkit para cross-compiling é fundamental para o desenvolvimento de um sistema a ser utilizado em arquiteturas diferentes de x86. Mas às vezes é necessário apenas compilar algum programa para embarcar em um sistema já pronto e nesse caso, pode ser melhor utilizar uma máquina virtual para fazer emulação da arquitetura pretendida.

Nesse post veremos como preparar um ambiente de emulação para essa tarefa de compilação transparente utilizando Debian e o QEMU para execução de um sistema virtual na plataforma ARM.

Instalando o QEMU




Uma das opções é baixar e compilar. Se for sua opção preferida, sinta-se a vontade para baixá-lo do site oficial. Eu estou utilizando Mint no meu notebook, então preferi utilizar o apt-get:

Tendo-o instalado, o próximo passo é baixar o instalador do Debian.


Baixando o sistema ARM
Esse link certamente quebrará muito cedo devido ao dinamismo das atualizações. No momento desse post estavam disponíveis o kernel e o initrd nestas versões abaixo, mas se o link estiver quebrado quando você for baixá-lo, basta seguir a raiz do link em dois pontos:
– até o codinome – por exemplo, poderia ser lenny onde está wheezy.
– até a versão do kernel – esse certamente é mais dinâmico que a versão do SO.

Baixe então o kernel e o initrd:

Criando o arquivo RAW
Crie o arquivo que será o HD dessa instalação com o comando:

Esse é um processo bastante rápido, mas não fique muito animado porque o processo lento ainda está por vir.

Instalando Debian for ARM




Eu criei um diretório chamado “embedded” contendo o kernel, initrd e o arquivo raw. Faça algo parecido e a partir desse diretório execute o seguinte comando:


No comando acima, o parâmetro ‘-m’ reserva 512MB de memória. Creio que 256 seja suficiente já que nesse momento é apenas o recurso reservado para a instalação. Os demais parâmetros são auto-explicativos, sem bem que o parâmetro de memória é ‘auto-dedutível’.

O tempo de instalação aqui está diretamente relacionado à velocidade de sua conexão com a internet.

No particionamento, simplesmente criei a partição raiz. A partição swap não é obrigatória em nenhum sistema e certamente não fará diferença aqui. Quando o particionador perguntar se realmente deseja fazer o particionamento sem swap, confirme e siga adiante.

Ao término da instalação será exibida uma mensagem relacionada ao gerneciador de boot que não foi instalado devido à arquitetura, seguido da recomendação para fazer o boot. Confirme e aguarde o reboot.

No reboot do instalador, siga novamente os passos até o particionamento de disco. Chegando nesse ponto, use Alt+F2 para entrar em uma tty. Nesse ponto será necessário montar o disco e migrar a raiz de forma a poder utilizar o sistema virtual para copiar o kernel e o initrd ao sistema nativo. Segue o exemplo, considerando que tenha escolhido o mesmo sistema de arquivos que eu:

A partir de agora tudo o que está contido em sua instalação da máquina virtual poderá ser utilizado, incluindo o ssh, que utilizaremos para a copia. Na instalação configurei o dominio como intranet.local, para que a resolução de nomes seja feita pelo servidor DNS que instalei em meu note para resolver nomes para a rede local. Se quiser fazê-lo, o procedimento pode ser visto nesse post. Então:

Agora sua máquina virtual está pronta para o boot. Desmonte tudo e feche a janela do instalador.

Boot da imagem ARM com kernel e initrd copiados
Mova o kernel e o initrd para o mesmo diretório que contém a imagem do sistema (Debian.img) e para não se tornar repetitivo, crie um script para iniciar sua máquina virtual (eu renomeei o initrd para initrd.img) contendo a seguinte linha de comando:

O boot deverá exibir algo parecido com a imagem inicial desse post. Depois disso, inicia-se o processo de instalação das ferramentas via apt-get !
O comando apt-get install gcc resultará na instalação de algumas outras dependências gerando um total de 48MB em pacotes. Ao término fiz o teste da imagem abaixo:

ARM compilação
ARM compilação

Como se pode ver, o processo é lento, mas descomplicado.
Estou preparando material para um próximo post com uma i.MX53, onde mostrarei como compor o sistema operacional, mas ainda não é ‘from scratch’. Acompanhe!

Se gostou, não deixe de compartilhar; dê seu like no video e inscreva-se no nosso canal Do bit Ao Byte Brasil no YouTube.

Prefere seguir-nos pelo facebook? Basta curtir aqui.

Prefere twitter? @DobitAoByte.

Próximo post a caminho!

Comments

comments

Djames Suhanko

Djames Suhanko é Perito Forense Digital. Já atuou com deployer em sistemas de missão critica em diversos países pelo mundão. Programador Shell, Python, C, C++ e Qt, tendo contato com embarcados ( ora profissionalmente, ora por lazer ) desde 2009.

Deixe uma resposta