Yocto Project: gerando distribuições GNU/Linux com o Toaster

- por Sergio Prado

Categorias: Yocto Project Tags: , ,

O Yocto Project surgiu como solução para um problema frequente de quem trabalha nesta área: a falta de padrão para a construção de sistemas com Linux embarcado.

Sua arquitetura baseada em camadas, além de outros fatores como o forte apoio da Linux Foundation, serviram de motivação para os principais fabricantes de hardware utilizarem as ferramentas do Yocto Project para o desenvolvimento de BSPs para as suas plataformas de hardware. E isso acabou motivando também outras empresas, de fabricantes de módulos de hardware à desenvolvedoras de software, transformando o Yocto Project em um padrão para o desenvolvimento de distribuições Linux embarcadas.

Porém, ainda existe um problema. Sua curva de aprendizado é grande, o que acaba assustando um pouco os iniciantes na área.

Para resolver este problema foi criado o Hob, uma aplicação desktop que funciona como uma interface gráfica para o BitBake.

Pessoalmente, nunca gostei do Hob. Além de limitada, sua interface sempre precisou de um certo polimento, além dos frequentes problemas de lentidão e travamento. É aí que entra o Toaster.

O Toaster é uma ferramenta Web, que inicialmente foi criada para exibir estatísticas de compilação do Yocto Project. Porém, desde o ano passado, a equipe do projeto tem trabalhado para incluir nela a possibilidade de geração de imagens. E esta funcionalidade foi liberada na versão 1.8 do Yocto Project.

Para exemplificar o uso da ferramenta, vamos utilizá-la para gerar uma distribuição GNU/Linux para a Raspberry Pi 2.

INSTALANDO E CONFIGURANDO O TOASTER

Todos os procedimentos descritos neste artigo foram realizados em um PC com o Ubuntu 14.04 64 bits, mas devem funcionar nas principais distribuições GNU/Linux.

O primeiro passo é configurar a máquina de desenvolvimento para trabalhar com o Toaster. Para isso, veja o procedimento descrito no manual do Toaster.

Com a máquina configurada, crie um diretório para o Toaster e entre nele:

$ mkdir -p ~/toaster && cd ~/toaster

Clone o repositório do Poky:

$ git clone git://git.yoctoproject.org/poky -b fido

E execute o Toaster:

$ poky/bitbake/bin/toaster

Na primeira execução, o Toaster irá iniciar o processo de configuração do ambiente de compilação.

Ao perguntar sobre a criação de um superusuário para o Django, responda com “no“.

You just installed Django's auth system, which means you don't have any superusers defined. 
Would you like to create one now? (yes/no): no

Pressione ENTER para manter o diretório padrão de log do Toaster:

Toaster needs to know in which directory it can download build log files and other artifacts. 
Toaster suggests "/opt/labs/ex/toaster/toaster_build_artifacts/". 
Press Enter to select "/opt/labs/ex/toaster/toaster_build_artifacts/" or type the full path to a different directory:

Pressione novamente ENTER para manter o diretório padrão de downloads das camadas:

Toaster needs to know in which directory it should check out the layers that will be needed for your builds. 
Toaster suggests "/opt/labs/ex/toaster". If you select this directory, a layer like "meta-intel" will end up in "/opt/labs/ex/toaster/meta-intel". 
Press Enter to select "/opt/labs/ex/toaster" or type the full path to a different directory (must be a parent of current checkout directory):

Digite o diretório de build do Toaster (ex: /home/sprado/toaster/build):

-- Validation: The build directory must be set. 
Toaster needs to know where is your build directory. 
The build directory is where all the artifacts created by your builds will be stored. Type the full path to the directory (for example: " /home/labworks/build") /home/sprado/toaster/build

Por fim, digite “1” para selecionar o arquivo de configuração padrão que deve ser carregado pelo Toaster:

Toaster will list now the configuration files that it found. Select the number to use the desired configuration file. 
[1] - /opt/labs/ex/toaster/poky/meta-yocto/conf/toasterconf.json 
[0] - Exit without importing any file
 
Enter your option: 1

Ao final da configuração, deverá ser aberta automaticamente uma página no seu navegador web padrão. Caso contrário, abra seu navegador web e acesse o Toaster em http://localhost:8000.

toaster1

Clique em “To start building, create your first Toaster project” para criar um novo projeto.

toaster2

Digite o nome do projeto e selecione o último release do Yocto (1.8 no momento em que escrevo este artigo). Depois clique em “Create Project” para que seja aberta a janela inicial de configuração do projeto.

toaster3

No campo de texto com o botão Build, é possível processar qualquer receita.

Abaixo deste campo, temos 3 colunas:

  • À esquerda, podemos selecionar qualquer camada compatível com o Toaster. As camadas selecionadas serão baixadas automaticamente da Internet ao iniciar a compilação.
  • No meio, podemos identificar e selecionar as receitas disponíveis para compilação.
  • À direita, podemos selecionar a MACHINE (plataforma-alvo) e configurar qualquer outra variável do BitBake.

Na configuração das camadas, clique em “View all compatible layers“, procure por raspberry e selecione a camada meta-raspberry.

toaster4

Retorne para a tela principal. À direita, selecione o campo Machine e digite raspberrypi2.

toaster6

Retorne para a tela principal. Se quiser, clique em “Edit configuration variables” para editar qualquer variável antes de iniciar o processamento da receita.

toaster5

Agora é só gerar a imagem. Na parte superior da tela principal, digite core-image-minimal e clique em Build.

Primeiro o Toaster irá baixar todas as camadas selecionadas e depois iniciará a compilação. Durante a compilação, o status do andamento da compilação será exibido na página inicial do projeto. Na minha máquina, a compilação levou 45 minutos.

toaster7

No final, as imagens estarão disponíveis no diretório de compilação do Toaster:

$ ls ~/toaster/build/tmp/deploy/images/raspberrypi2/
bcm2835-bootfiles                                                                                          Image--3.18.5+gita6cf3c99bc89e2c010c2f78fbf9e3ed478ccfd46-r0-raspberrypi2-20150606172007.bin
core-image-minimal-raspberrypi2-20150606172007.rootfs.ext3                                                 Image--3.18.5+gita6cf3c99bc89e2c010c2f78fbf9e3ed478ccfd46-r0-w1-gpio-overlay-20150606172007.dtb
core-image-minimal-raspberrypi2-20150606172007.rootfs.jffs2                                                Image--3.18.5+gita6cf3c99bc89e2c010c2f78fbf9e3ed478ccfd46-r0-w1-gpio-pullup-overlay-20150606172007.dtb
core-image-minimal-raspberrypi2-20150606172007.rootfs.manifest                                             Image-bcm2708-rpi-b.dtb
core-image-minimal-raspberrypi2-20150606172007.rootfs.tar.bz2                                              Image-bcm2708-rpi-b-plus.dtb
core-image-minimal-raspberrypi2.ext3                                                                       Image-bcm2709-rpi-2-b.dtb
core-image-minimal-raspberrypi2.jffs2                                                                      Image-ds1307-rtc-overlay.dtb
core-image-minimal-raspberrypi2.manifest                                                                   Image-hifiberry-amp-overlay.dtb
core-image-minimal-raspberrypi2.tar.bz2                                                                    Image-hifiberry-dac-overlay.dtb
Image                                                                                                      Image-hifiberry-dacplus-overlay.dtb
Image--3.18.5+gita6cf3c99bc89e2c010c2f78fbf9e3ed478ccfd46-r0-bcm2708-rpi-b-20150606172007.dtb              Image-hifiberry-digi-overlay.dtb
Image--3.18.5+gita6cf3c99bc89e2c010c2f78fbf9e3ed478ccfd46-r0-bcm2708-rpi-b-plus-20150606172007.dtb         Image-iqaudio-dac-overlay.dtb
Image--3.18.5+gita6cf3c99bc89e2c010c2f78fbf9e3ed478ccfd46-r0-bcm2709-rpi-2-b-20150606172007.dtb            Image-iqaudio-dacplus-overlay.dtb
Image--3.18.5+gita6cf3c99bc89e2c010c2f78fbf9e3ed478ccfd46-r0-ds1307-rtc-overlay-20150606172007.dtb         Image-lirc-rpi-overlay.dtb
Image--3.18.5+gita6cf3c99bc89e2c010c2f78fbf9e3ed478ccfd46-r0-hifiberry-amp-overlay-20150606172007.dtb      Image-pcf8523-rtc-overlay.dtb
Image--3.18.5+gita6cf3c99bc89e2c010c2f78fbf9e3ed478ccfd46-r0-hifiberry-dac-overlay-20150606172007.dtb      Image-pps-gpio-overlay.dtb
Image--3.18.5+gita6cf3c99bc89e2c010c2f78fbf9e3ed478ccfd46-r0-hifiberry-dacplus-overlay-20150606172007.dtb  Image-raspberrypi2.bin
Image--3.18.5+gita6cf3c99bc89e2c010c2f78fbf9e3ed478ccfd46-r0-hifiberry-digi-overlay-20150606172007.dtb     Image-w1-gpio-overlay.dtb
Image--3.18.5+gita6cf3c99bc89e2c010c2f78fbf9e3ed478ccfd46-r0-iqaudio-dac-overlay-20150606172007.dtb        Image-w1-gpio-pullup-overlay.dtb
Image--3.18.5+gita6cf3c99bc89e2c010c2f78fbf9e3ed478ccfd46-r0-iqaudio-dacplus-overlay-20150606172007.dtb    modules--3.18.5+gita6cf3c99bc89e2c010c2f78fbf9e3ed478ccfd46-r0-raspberrypi2-20150606172007.tgz
Image--3.18.5+gita6cf3c99bc89e2c010c2f78fbf9e3ed478ccfd46-r0-lirc-rpi-overlay-20150606172007.dtb           modules-raspberrypi2.tgz
Image--3.18.5+gita6cf3c99bc89e2c010c2f78fbf9e3ed478ccfd46-r0-pcf8523-rtc-overlay-20150606172007.dtb        README_-_DO_NOT_DELETE_FILES_IN_THIS_DIRECTORY.txt
Image--3.18.5+gita6cf3c99bc89e2c010c2f78fbf9e3ed478ccfd46-r0-pps-gpio-overlay-20150606172007.dtb

FUTURO

O Toaster está bem amigável e estável. Ainda faltam muitas opções que podem ser incluídas na configuração, como por exemplo a habilitação do build history, a configuração de mirrors de download e a criação de receitas de imagem.

Mas as perspectivas são boas para que esta ferramenta diminua a curva de aprendizado e motive mais desenvolvedores e hobbystas a utilizarem as ferramentas providas pelo Yocto Project para construir distribuições Linux customizadas para sistemas embarcados.

Um abraço,

Sergio Prado

  • cleber

    Tentei gerar uma distribuição para a Raspberry Pi 2 com o Yocto 1.8, mas como o host é uma máquina slackware houve erros por falta de suporte. Já o buildroot funcionou.

  • Renne

    Olá Sergio tudo bem? Eu consigo gerar uma distro para a Mini2440 usando o Yocto? Não Consegui achar o hardware dela nos pacotes.

    • Olá Renne,

      Infelizmente não existe mesmo uma camada do Yocto Project que implemente a machine da mini2440.

      Um abraço!

Navegue
Creative Commons Este trabalho de Sergio Prado é licenciado pelo
Creative Commons BY-NC-SA 3.0.