Guia do projeto Yocto de código aberto
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.