BeagleBone Black + Yocto

por em sexta-feira, 08 de novembro de 2013.
BeagleBone Black

Muito tem sido comentado sobre plataformas de desenvolvimento suportadas por grandes comunidades, tal como a BeagleBone Black e a Raspberry Pi. Ambas têm atingido um grande público em específico, aquele ávido por conhecimento em Linux embarcado. Muito bem! Aqui começa um tutorial de como criar imagens personalizadas para a placa BeagleBone Black usando o Yocto Project.

 

 

O que é a BeagleBone Black?

 

A BeagleBone Black é o mais novo membro da família BeagleBoard e suas características estão listadas no seu Wiki oficial. Algumas das grandes melhorias dessa placa com relação à sua versão anterior, “white”, são:

  • Processador: Sitara AM3359 de 1GHz;
  • Memória DRAM: DDR3L 400MHz de 512 MB;
  • Memória Flash: eMMC de 2GB e conector para microSD card.

 

E onde podemos gravar o nosso querido Linux na placa? Tanto a memória Flash eMMC quanto um microSD card podem receber todas as imagens necessárias para compor o sistema Linux, as quais, basicamente, são: 

  • Bootloader;
  • Kernel Linux;
  • Sistema de arquivos.

 

Agora que é conhecido o que gravar na placa e os dispositivos de armazenamento oferecidos por ela, como é possível gerar tais imagens? Pode-se utilizar tanto imagens pré-compiladas disponibilizadas no site oficial, ou criar imagens customizadas a partir das técnicas apresentadas no artigo Embedded Linux Build Systems, de Diego Sueiro.

 

Neste artigo será utilizado um microSD card como dispositivo de armazenamento e o Yocto como build system.

 

 

O que é Yocto?

 

O Projeto Yocto é um projeto open-source colaborativo que oferece templates, ferramentas e métodos para auxiliar na criação de sistemas baseados em Linux para sistemas embarcados, independente da arquitetura de hardware utilizada. O Yocto inclui em sua arquitetura o build system Poky, que, por sua vez, é derivado do build system OpenEmbedded.

 

O OpenEmbedded é composto de dois elementos principais, como mostrado abaixo: BitBake e Metadata. BitBake é uma ferramenta de build muito flexível mantida pelos projetos Yocto e OpenEmbedded, comandada pelas instruções presentes no Metadata e com a finalidade de gerar, entre outros, as imagens finais do sistema de arquivos, kernel, bootloader e SDKs.

 

Yocto

 

 

Gerando as imagens

 

Como sistema host foi utilizado um PC com a distribuição Ubuntu 12.10 64-bits instalada. Algumas dependências devem ser resolvidas no sistema antes de prosseguir. Para isso, execute o seguinte comando:

 

 

Para a geração das imagens da placa BeagleBone Black é necessário utilizar seus respectivos metadados, tais como receitas, classes, tarefas e configuração.

 

Precisa-se, agora, realizar o download de todos esses itens. Neste artigo é utilizada a última versão estável do Yocto, na versão 1.5 e nomeada Dora. Para isso, siga os seguintes comandos:

 

 

É criado o diretório bbb, contendo o sub-diretório conf, onde são armazenados os arquivos de configuração do projeto local.conf e bblayers.conf. Os dois arquivos precisam ser alterados.

  

local.conf

 

A linha onde a variável MACHINE é configurada precisa ser comentada e substituída pelo seguinte conteúdo:

 

 

Descomente e altere as variáveis BB_NUMBER_THREADS e PARALLEL_MAKE de acordo com a capacidade de processamento do sistema host. Para uma máquina com CPU de múltiplos núcleos, é interessante configurar ambas as variáveis com o dobro de núcleos existentes. Para uma CPU com 2 núcleos, use a seguinte configuração:

 

  

bblayers.conf

 

As linha que contêm as configurações das variáveis BBLAYERS e BBLAYERS_NON_REMOVABLE devem ser substituídas pelos seguintes valores:

 

 

Neste ponto é necessário selecionar uma imagem para ser gerada para a BeagleBone Black. É só retornar ao diretório bbb e executar o BitBake com os seguintes comandos:

 

 

Esse comando cria a menor e mais simples imagem do sistema de arquivos. Depois de algum tempo, são geradas as imagens em ~/bbb/yocto/poky/bbb/tmp/deploy/images/beaglebone, as quais devem ser gravadas no microSD card. Tais imagens são: 

  • core-image-minimal-beaglebone.tar.gz (rootfs – sistema de arquivos);
  • MLO (bootloader de primeiro estágio);
  • u-boot.img (bootloader de segundo estágio – U-Boot);
  • zImage (kernel) e;
  • zImage-am335x-boneblack.dtb (Device Tree Binary).

 

 

Gravação das imagens no microSD Card

 

Para a gravação dessas imagens no microSD card, o mesmo deve ser particionado e formatado de acordo o padrão aceito pelo placa. Para isso foi criado um script, que pode ser obtido com os seguintes comandos:

 

 

Insira um microSD card no computador PC ou notebook (sistema host) e descubra qual o device node criado pelo sistema operacional. Tente um dos seguintes comandos:

 

 

Caso, por exemplo, o device node criado seja /dev/sdb, use o seguinte comando:

 

 

Assim que o processo de particionamento e formatação terminar, duas partições no microSD card são criadas:

  • boot (FAT32);
  • rootfs (ext4).

 

Execute a “montagem” dessas duas partições no sistema de arquivos do sistema host. Caso esse faça uso da distribuição Ubuntu, basta remover e inserir novamente o dispositivo no seu conector. Dado que, por exemplo, os pontos de montagem criados sejam /media/boot e /media/rootfs, as imagens geradas anteriormente são copiadas da seguinte forma:

 

 

É necessário, também, criar o arquivo de parametrização do bootlader U-Boot, uEnv.txt, na partição boot do microSD card. Foi disponibilizada uma versão desse arquivo no repositório de scripts mencionado anteriormente.

 

 

Pronto! Agora é conectar o microSD card na Beaglebone Black e curtir! A porta serial de debug da placa é usada para o console do sistema operacional  e o conteúdo de sua saída é mostrado abaixo. Pode ser montado um cabo serial como mostrado no tutorial BeagleBone Black Serial.

 

 

Nos próximos artigos serão adicionados aplicativos e bibliotecas, tal como Qt, ao sistema de arquivos, de forma a customizar a imagem mínima criada. Eu tenho utilizado com muito mais frequência o Buildroot como build system e no momento estou avaliando o Yocto. E você? Usa o Yocto em seus projetos?

 

 

Bibliografia 


Henrique Persico Rossi

Engenheiro Eletrônico (2005) e pós-graduado em Engenharia de Software (2012). Possuo mais de 8 anos de experiência em desenvolvimento de firmware (linguagens C, C++ e Assembly) para sistemas embarcados. Atualmente atuo como consultor/desenvolvedor na área de sistemas embarcados.

Posts Similares
T20-Kit-Box

Promoção: Concorra a uma Single Board Computer com NVIDIA Tegra 2 da Toradex

Para participar do sorteiro você deve responder a todas as perguntas e obter 100% de acerto   Será sorteado uma Single Board Computer com o Módulo Colibri T20 e…
veja+

bbb-yocto-qt

Beaglebone Black + Qt Embedded + Yocto – parte 2

Na primeira parte da série vimos como configurar o ambiente e gerar uma distribuição Linux Embarcado com Qt Embedded para Beaglebone Black com o Yocto Project….
veja+

ID-100153000

Desenvolvendo um Kiosk Interativo para a Beaglebone Black com Yocto – parte 3

Vimos na primeira e segunda partes da série como gerar, gravar e testar as imagens do web-kiosk e kiosk-manager na Beaglebone Black. Essas imagens servem como ponto…
veja+

Comentários