Executando o uClinux em uma Máquina Virtual

On 17 de março de 2014 by Vicente Amorim

Introdução

logo

 

uClinux é um sistema operacional aplicável a microcontroladores sem MMUs (Memory Management Unit). O sistema inclui suporte ao kernel Linux versões 2.0, 2.4 e 2.6 além de um conjunto de aplicativos em nível de usuário, bibliotecas e toolchains. A versão original foi inicialmente derivada do kernel Linux 2.0.

Algumas vantagens do uClinux:

  • Código-fonte disponível gratuitamente;
  • Robustez e confiabilidade;
  • Sistema modular, configurável e escalável;
  • Suporte dispositivos de rede e internet;
  • etc…

Para testes e determinados tipos de comparações, nem sempre possuímos o hardware final em mãos. Dessa forma, nas próximas seções apresentamos uma maneira de se executar e testar a viabilidade deste sistema operacional através do uso de uma máquina virtual.

1) Instalação da máquina virtual

Para executar o uClinux faremos uso da máquina virtual conhecida como skyeyeskyeye é um emulador que em nosso caso provê suporte virtual à placa AT91 ARM7TDMI. Sua engine é derivada do debugger GDB (GNU Debugger) – anteriormente era conhecida como GDB/ARMulator.

Ainda, consideramos aqui que o sistema host faz uso do sistema operacional Ubuntu.

Para instalar a máquina virtual skyeye, execute o seguinte comando no shell do Ubuntu:

[sourcecode language=”bash”]
$ apt-get install skyeye
[/sourcecode]

2) Instalação do toolchain uClinux

Em nosso caso, como estamos compilando software para uma plataforma diferente daquela host será necessário fazermos uso de um compilador cruzado – toolchain. Aqui iremos utilizar uma versão de 2007 do uClinux. Assim sendo, a versão do toolchain deve ser também compatível com o mesmo. A instalação do toolchain suportado pelo uClinux pode ser feita à partir dos seguintes passos:

– Download do arquivo arm-linux-tools-20070808 aqui.

Algumas considerações:

  • O arquivo é razoavelmente grande (aprox. 270MB);
  • Dependendo da largura de banda de sua internet, o download pode demorar um pouco.

Uma vez baixado e com permissões de root, faça:

  • Extraia o arquivo baixado para o diretório raiz “/”;
  • Verifique que o toolchain foi corretamente instalado na pasta /usr/local.
  • Obs.: Se não quiser instalar diretamente no diretório raiz, opcionalmente você poderá extrair o arquivo baixado para uma pasta local. Após isso, altere o conteúdo da variável de sistema PATH para o caminho onde foram instalados os executáveis.

3) Instalação da distribuição uClinux

Após baixar e instalar o toolchain relacionado, é necessário baixar os arquivos da distribuição uClinux que utilizaremos. Para tanto, esta versão da distribuição deve estar em conformância com o toolchain  que foi instalado. Execute os seguintes passos:

  • Baixe a distro – arquivo uClinux-dist-20080808.tar.bz2 –  através do endereço: http://www.uclinux.org/pub/uClinux/dist/;
  • Extraia o arquivo baixado dentro de sua pasta home;
  • Instale o genromfs – Utilitário responsável por auxiliar na geração do sistema de arquivos de nossa distro. Para tanto, execute o seguinte comando no console:

[sourcecode language=”bash”]
$ apt-get install genromfs
[/sourcecode]

4) Configuração da distribuição uClinux
Uma vez baixada e extraída, precisaremos agora configurar nossa distribuição uClinux de forma que ela contemple o hardware e software desejados. Para isso, entre no diretório “uClinux-dist” que você extraiu no passo anterior (dentro de sua pasta home) e execute as seguintes ações:

[sourcecode language=”bash”]
$ cd uClinux-dist
$ make menuconfig
[/sourcecode]

Após os comandos acima, uma janela irá se abrir como na Figura abaixo.

Configurando uClinux-dist

Configurando uClinux-dist

  • Selecione a opção “Vendor/Product Selection”;
  • Marque GDB para o campo “Vendor” e “Skyeye” em “GDB Products” (como mostrado na Figura abaixo).
Configurando uClinux-dist

Configurando uClinux-dist

  • Para voltar no nível anterior do menu, pressione seguidamente 2x a tecla ESC.
  • Agora, procure pela opção “Kernel/Library/Defaults Section” e pressione a tecla ENTER;
  • Marque a opção “Customize Kernel Settings” (Figura abaixo);
Configurando uClinux-dist

Configurando uClinux-dist

  • Marque também a opção “Customize Application/Library Settings”;
  • Pressione ESC seguidamente 2x, saia e salve as configurações.

Ao sair, o menu de configuração do kernel que estamos utilizando será automaticamente carregado. Será necessário fazermos as seguintes alterações:

  • No menu “Boot Options” -> “Default kernel command string”, entre com a seguinte string: “init=/bin/sh”.

Salve novamente e saia. Logo após, o menu para configuração de bibliotecas e aplicações aparecerá. Se achar prudente, adicione ou remova bibliotecas/aplicativos conforme sua necessidade.

5) Criando o sistema de arquivos principal (root filesystem)

Até agora configuramos todo o nosso ambiente e as variáveis que nosso sistema embarcado terá. Fizemos isso através da customização da distribuição Linux e seu kernel relacionado. Agora veremos como criar o sistema de arquivos principal que será o pacote principal da nossa distribuição uClinux. Para tanto, execute as seguintes instruções abaixo:

  • Dentro do diretório uClinux, o seguinte comando:

[sourcecode language=”bash”]
$ make
[/sourcecode]

Tal comando fará com que todos os arquivos da distribuição sejam compilados. O processo total de compilação pode variar entre 5 e 15 minutos – dependendo do hardware que você possui. Ao final, verifique a existência dos seguintes arquivos no diretório “images/” que fica dentro da sua pasta uClinux-dist:

  • romfs-inst.log
  • linux
  • boot.rom

6) Criação do arquivo de boot

Para que o sistema possa iniciar é necessário que exista um arquivo descrevendo as configurações do sistema alvo. Nessa passo iremos criar esse arquivo com o conteúdo apropriado para o nosso sistema. Dentro do diretório “images/“, crie um arquivo chamado skyeye.conf e insira o seguinte conteúdo no mesmo:

[sourcecode language=”bash”]
#skyeye config file sample
cpu: arm7tdmi
mach: at91
mem_bank: map=M, type=RW, addr=0x00000000, size=0x00004000
mem_bank: map=M, type=RW, addr=0x01000000, size=0x00400000
mem_bank: map=M, type=R, addr=0x01400000, size=0x00400000, file=./boot.rom
mem_bank: map=M, type=RW, addr=0x02000000, size=0x00400000
mem_bank: map=M, type=RW, addr=0x02400000, size=0x00008000
mem_bank: map=M, type=RW, addr=0x04000000, size=0x00400000
mem_bank: map=I, type=RW, addr=0xf0000000, size=0x10000000
[/sourcecode]

7) Inicialização da máquina virtual

Após ter sido configurada, a máquina virtual com o sistema necessita ser inicializada. Para tanto, execute os seguintes comando à partir da pasta “images/” dentro do diretório uClinux-dist:

[sourcecode language=”bash”]
$ skyeye -e linux
[/sourcecode]

Pronto, à partir deste comando a máquina virtual será carregada e você já entrará com acesso ao terminal da mesma. Dessa forma conseguimos emular uma distribuição uClinux em uma arquitetura x86.

Deixe um comentário

O seu endereço de e-mail não será publicado.