Software Embarcado - Yocto construir Raspberry Pi 4 uma captura de tela de um computador

Yocto para Raspberry Pi 4

em ambiente Docker

Guia do projeto Yocto de código aberto

dicas de configuração Linux personalizado no Raspberry Pi com Docker

Guia do Yocto Project de código aberto para Linux personalizado no Raspberry Pi com dicas de configuração do Docker

Mergulhe no Yocto Project para sistemas Linux personalizados em qualquer hardware. Perfeito para desenvolvedores e entusiastas de sistemas embarcados . Comece a construir agora!

Explore o Yocto Project, uma iniciativa de código aberto para criar sistemas Linux personalizados para qualquer arquitetura de hardware. Aprenda a usar o CROPS para desenvolvimento multiplataforma, configurar contêineres do Docker e criar imagens personalizadas do Linux para dispositivos incorporados e IoT. Nosso guia aborda a configuração no macOS, a configuração de ambientes de compilação e a otimização para o Raspberry Pi. Seja você um iniciante ou um especialista, encontre as melhores práticas, ferramentas e suporte da comunidade para as necessidades do seu projeto Linux.

Yocto executado em container do Docker

Nos documentos do Yocto existe um capítulo (2.2.2) para configuração de CROss PlatformS (CROPS) como alternativa à configuração de um Linux PC nativo.Esta alternativa usa containers do Docker para construir uma imagem de sistema personalizada, por exemplo, para o Raspberry Pi.

Infelizmente, a documentação apresenta alguns erros na configuração destes ambientes para MAC OS X (Monterey).### Configuração de container do Docker para Mac OS X

Para usar o docker CROPS no Linux, Windows e Mac OS X, existem algumas configurações especiais necessárias. Antes de configurar o container para o Yocto, você deve criar um volume do docker para armazenar os resultados. Um container samba docker também é usado para fornecer os arquivos no Mac OS X.

Criação de volume do docker

Em uma janela de terminal digite os seguintes comandos:

docker volume create --name raspberry
docker run -it --rm -v raspberry:/workdir busybox chown -R 1000:1000 /workdir

Criação e execução de container samba

O OSX não permitirá que você se conecte a um compartilhamento de samba executado localmente. Portanto, primeiro você precisa criar um alias para 127.0.0.1 de 127.0.0.2.

sudo ifconfig lo0 127.0.0.2 alias up

Em seguida, crie o container do samba, que permite que você veja os arquivos no volume do docker:

docker create -t --expose 445 -p 127.0.0.2:445:445 --name samba -v raspberry:/workdir crops/samba

Como você sempre precisará ter o alias para se conectar ao container do samba, você pode combinar o início do samba e o alias assim:

docker start samba && sudo ifconfig lo0 127.0.0.2 alias up

Agora você pode abrir o workdir no navegador de arquivos. No localizador pressione "Command-K" e na caixa de endereço do servidor digite "smb://127.0.0.2/workdir" e clique em "Connect". Agora você deve ver o conteúdo do volume do docker no localizador.

Criação e execução do container Yocto

Para criar e/ou executar o container Yocto digite em uma janela de terminal:

docker run --rm -it --name=crops-poky -v raspberry:/workdir crops/poky:ubuntu-20.04 --workdir=/workdir

Configuração do ambiente de desenvolvimento no container

Quando o container do docker é iniciado, você tem um prompt de terminal parecido com este: "pokyuser@d4ddfe042587:/workdir".

Agora você pode configurar o ambiente de desenvolvimento.

Clone da versão Poky

No meu caso eu uso o Yocto versão 3.4 com o nome "Honister", porque as camadas de meta-raspberry não estão disponíveis para versões mais recentes do Poky no momento. Na primeira vez você tem que clonar o repositório poky:

git clone -b honister git://git.yoctoproject.org/poky poky-honister

Se você quiser atualizar o Poky para a versão mais recente:

cd poky-honister
git pull --all --prune

Meta-camadas dicionais para Raspberry Pi

Mude para "poky-honister" e clone os seguintes repositórios: meta-raspberry, meta-openembedded e, se necessário, meta-qt5

cd poky-honister
git clone -b honister git://git.yoctoproject.org/meta-raspberrypi
git clone -b honister git://git.openembedded.org/meta-openembedded
git clone -b honister https://github.com/meta-qt5/meta-qt5.git

Configurações

Saia do diretório poky-honister e vá para o /workdir. Agora execute o script oe-init-build-env no ambiente de desenvolvimento.

cd ..
source poky-honister/oe-init-build-env rpi-build

Um novo diretório "rpi-build" - você pode nomeá-lo como quiser - e um diretório conf com os arquivos bblayers.conf, local.conf e templateconf.cfg serão criados.

Como não há um editor de texto instalado no container, você precisará editar os arquivos de configuração no volume samba montado no Mac OS X ou instalar um editor de texto no container. Para fazer isso, você deve abrir uma segunda janela de terminal - enquanto o container Yocto estiver em execução - e iniciar um shell bash no container com privilégios de root:

docker exec -it --user=root crops-poky bash
apt-get install nano
exit

Então você pode editar os arquivos de configuração no container do Yocto como pokyuser.

Obs.:

O editor não será instalado permanentemente. Depois que você sair do container e entrar novamente, deverá instalá-lo novamente

Primeiro adicione o meta-raspberry no arquivo bblayers.conf

nano conf/bblayers.conf

Adicione "/workdir/poky-honister/meta-raspberrypi" para que se pareça

BBLAYERS ?= " \
  /workdir/poky-honister/meta \
  /workdir/poky-honister/meta-poky \
  /workdir/poky-honister/meta-yocto-bsp \
  /workdir/poky-honister/meta-raspberrypi \
  "

e salve.

Edição do local.conf

Edite o arquivo local.conf:

nano conf/local.conf

Altere as seguintes linhas:

  • MACHINE ??= "qemux86-64" -> MACHINE ??= "raspberrypi4-64"

Dependendo de qual Raspberry você deseja usar (raspberrypi0, raspberrypi0w, raspberrypi3, raspberrypi3-64, raspberrypi4, raspberrypi4-64, etc)

Descomente as seguintes linhas:

  • DL_DIR ?= "${TOPDIR}/downloads"
  • SSTATE_DIR ?= "${TOPDIR}/sstate-cache"
  • TMPDIR = "${TOPDIR}/tmp"

Adicione as seguintes linhas no final, para obter um sdimg e salvar em um cartão SD:

  • IMAGE_FSTYPES = "ext4.xz rpi-sdimg"
  • SDIMG_ROOTFS_TYPE = "ext4.xz"

Salve o arquivo local.conf.

Bitbake a primeira imagem

Agora você tem as configurações mínimas para criar a primeira imagem:

bitbake -k core-image-minimal

Na documentação do Yocto você encontra uma breve descrição das imagens disponíveis.Por exemplo:

  • core-image-minimal: uma pequena imagem capaz apenas de permitir que um dispositivo inicialize.
  • core-image-base: uma imagem somente para console que suporta totalmente o dispositivo de destino.
  • core-image-full-cmdline: uma imagem somente para console com funcionalidade Linux avançada instalada.

Depois de algum tempo - que pode ser algumas horas na primeira vez - o bitbake finaliza e você encontra o arquivo sdimg no seguinte diretório:

/workdir/rpi-build/tmp/deploy/images/raspberrypi4-64

Configurações extras

Configurações extras de hardware Raspberry

Para definir configurações específicas de hardware, você pode dar uma olhada em extra-apps.md e extra-build-config.md.Você encontra esses arquivos também no diretório meta-raspberrypi/docs.

A meta-camada também fornece uma configuração de imagem "rpi-test-image" para usar com o bitbake. A imagem é baseada em "core-image-base", que inclui a maioria dos pacotes em meta-raspberrypi e algumas amostras de mídia.

bitbake -k rpi-test-image

Configurações de software extras

Dependendo da imagem de configuração que você está usando, talvez seja necessário instalar pacotes de software adicionais.

Você pode fazer isso adicionando algumas configurações ao arquivo local.conf.

Por exemplo, adicione as seguintes linhas para definir ssh-server, pi-user e systemd:

## packages
IMAGE_INSTALL:append = " openssh-sftp-server sudo python3 python3-pip rpi-gpio raspi-gpio"
IMAGE_FEATURES:append = " ssh-server-openssh"

## systemd settings
DISTRO_FEATURES:append = " systemd"
VIRTUAL-RUNTIME:init_manager = "systemd"
VIRTUAL-RUNTIME:initscripts = ""
IMX_DEFAULT_DISTRO_FEATURES:append = " systemd"

Ou adicione python:

IMAGE_INSTALL:append = " python3 python3-pip rpi-gpio raspi-gpio"

Obs.:

O espaço inicial em " python3 python3-pip rpi-gpio raspi-gpio" é importante, porque o texto é anexado à configuração existente e precisa ser separado com este espaço.

Licença de direitos autorais

Copyright © 2022 Interelectronix e.K.
Este código-fonte do Projeto está licenciado sob a licença * * GPL-3.0 * *.

Agradecimentos

Fontes usadas para criar estas instruções:

Obrigado a todos.