Nesse webinar conheceremos o Yocto Project, um conjunto de ferramentas open-source que possuem o objetivo de facilitar o desenvolvimento de distribuições e sistemas Linux. Também vamos entender como utilizar a ferramenta pode auxiliar na automatização do desenvolvimento de sistemas Linux Embarcado.
https://embarcados.com.br/webinar-utilizando-o-yocto-project-para-automatizar-o-desenvolvimento-em-linux-embarcado/
3. Um pouco sobre nós
● Fundada em 2017, a Emc Logic presta serviços de consultoria, treinamento e
desenvolvimento de software para Sistemas Embarcados microcontrolados e
microprocessados.
● Atuamos com projetos de diversas áreas, de equipamentos médicos até
tecnologias agrícolas, buscando encontrar encontrem soluções rápidas,
otimizadas, seguras e com um bom custo benefício.
4. Agenda
● Conhecendo o Yocto Project
● Principais conceitos técnicos
● Utilizando o Yocto no seu projeto de Linux Embarcado
● Dicas para a automatização do processo de desenvolvimento
6. O que é?
Yocto Project é um projeto colaborativo
open-source que fornece ferramentas para
desenvolvedores construírem sistemas e
distribuições Linux
7. ● O Projeto, em si, não é um sistema de build: é um termo guarda-chuva para os
projetos que ele hospeda.
● São utilizados o OpenEmbedded-Core e o Bitbake como seus sistemas de build
● Não é uma distribuição Linux, mas ele serve para criar uma distribuição para seu
projeto
● Há um conjunto de projetos/softwares que fazem parte do ecossistema do Yocto,
tais como: OpenEmbedded-Core, BitBake, Poky, Matchbox, DevTool, Toaster,
entre outros….
8. Um pouco sobre sua origem…
● Lançado em 2011 pela Linux Foundation
● Grupo de colaboradores de peso para direcionar o projeto: representantes da Dell, Intel, Open
Embedded, Texas instruments, entre outras.
● Criado com o objetivo de ajudar empresas a desenvolver tecnologias open-source e de alta
qualidade, independentemente da estrutura de Hardware, utilizando Sistemas Linux
customizados para Embarcados.
● Sobre o projeto, a Linux Foundation disse em seu lançamento: "O projeto colaborativo junta
os elementos necessários para tornar o processo de desenvolvimento de Linux Embarcado
(normalmente complexo) muito mais fácil."
● Notícia do lançamento do Yocto em 2011:
https://www.linuxfoundation.org/press/press-release/the-linux-foundation-announces-yocto-project-s
teering-group-and-release-1-0
9. Delineamento e objetivos do projeto
● Criar local de colaboração para projetos open source de maneira que o
desenvolvimento de plataformas e sistemas embarcados baseados em Linux seja
estimulado
● Estimular a padronização e a reutilização de componentes já existentes em
plataformas de desenvolvimento
● Documentar os métodos e ferramentas disponíveis para que qualquer usuário
possa utilizar
● Garantir que o desenvolvimento seja independente em sua arquitetura de
hardware
11. Um exemplo de hardware
● Placa SoM da Microchip:
SAM9X60D1G-SOM
● Tem como uma de suas bases o Yocto, ou
seja, possui uma camada onde foi
construído o BSP (Board Support
Package) para essa placa
● Link GitHub com a BSP da placa:
https://github.com/linux4sam/meta-atmel/blo
b/master/conf/machine/sam9x60ek.conf
12. Um exemplo de produto
● O Sistema Operacional utilizado
para o Hardware de alguns
televisores da LG se chama webOS
● O webOS utiliza o Yocto como a
base de seu sistema de build
14. 3 maneiras principais
para desenvolver sistemas Linux
Podemos abordar o desenvolvimento de um sistema Linux Embarcado por
três abordagens principais:
1. Distribuição pronta de terceiros
2. Compilar um sistema Linux/distribuição manualmente
3. Compilação de um sistema Linux/distribuição auxiliada por um
sistema de build
16. Distribuições prontas
Cons
● Pouca flexibilidade para
componentes (inicialização de
scripts, daemon e etc.
● Pacotes pré-compilados e
providos externamente -
possível impacto na segurança
● Distribuição é genérica e
geralmente não otimizada
Prós
● Simplicidade de uso
● Facilidade em estender
funcionalidades – pacotes
pronto pré-compilados via .deb,
.rpm e etc
● Ambiente de desenvolvimento
prontos
17. Sistema de Build
● Um sistema de build permite gerar um sistema Linux completo para um
hardware específico
● Possuí um conjunto de ferramentas para automatizar a geração de
componentes do sistema (bootloader, kernel, rootfs e toolchain)
● Possuí um conjunto de pacotes pré-configurados com fácil habilitação pelo
usuário
● Oferece total customização e controle do sistema Linux
● Auxilia no processo de gerenciamento de licenças
● As builds são controladas e reproduzíveis
18. Sistema de Build
● Buildroot - https://buildroot.org/
● OpenWrt - https://openwrt.org/
● Yocto Project - https://www.yoctoproject.org/
20. Metadados
● Os metadados contém as informações do que deve ser feito durante a geração de
uma distribuição Linux
● Todo trabalho e codificação no yocto é feita através da manipulação de
metadados
● São Exemplos de metadados:
○ Receitas (.bb e .bbappend)
○ Classes (.bbclass)
○ Configuracoes (.conf)
21. Distro | Machine | Image
➔ Distro: como eu quero montar meu
sistema
➔ Machine: qual placa/hardware eu
irei utilizar
➔ Image: quais pacotes/softwares eu
quero utilizar
IMAGE
MACHINE
DISTRO
22. Poky
● Poky é a distribuição base oficial utilizada no Yocto Project:
https://git.yoctoproject.org/poky
● Contém a base do sistema de build (BitBake e OpenEmbedded-Core) e um
conjunto de metadados para gerar distribuições Linux.
● Pode ser facilmente estendido por meio do conceito de camadas
● Seus componentes principais são:
1. BitBake: processador/executor de tarefas
2. Metadados: definição das tarefas e parâmetros para execução (o que fazer
e como fazer)
23. Receitas
● Arquivo com extensão .bb ou .bbappend
● A receita (.bb) constitui um a definição de um determinas tarefas enquanto
(.bbappend) é um anexo e/ou extensão de uma determinada receita
● Uma receita é responsável por descrever e processar um determinado
componente de software
● Uma lista das principais variáveis para descrever uma receita pode ser
encontrada em: https://docs.yoctoproject.org/ref-manual/varlocality.html#recipes
24. Tarefa Descrição
do_fetch Através da URL pelo SRC_URI, faz o download do código-fonte
do_unpack Após do download, descompactar o conteúdo no WORKDIR da receita.
do_patch Caso necessário, aplica um patch especificado via SRC_URI
do_configure Realiza a configuração antes de compilar o código, se necessário
do_compile Compila o código-fonte utilizando GNU autotools, CMake e etc
do_install Copia o resultado da compilação de B (diretório de build) para D (diretório de destino)
do_package Cria o pacote com resultado da compilação no formatos especificados (DEB, RPM ou OPKG)
26. Camadas
● Os metadado (receitas, classes e arquivo de configuração) são organizados em
camadas (layers) no sistema de build
● As camadas facilitam a manutenção e incentivam o reuso de metadados
● No Yocto Project, um sistema Linux é gerado através de combinação de
camadas
27. Três tipos de camadas
● BSP: refere ao MACHINE e é onde se define pacotes e configurações para uma
placa específica
○ conf/machine/[MACHINE].conf
● Distribution: define um DISTRO
○ conf/distro/[DISTRO].conf
● Software: O restante
○ Bibliotecas, ex: Qt5
○ Linguagens de programação, ex: Java
○ Ferramentas, ex: virtualização e selinux
32. Software Development Kit (SDK)
Além das imagens finais que serão utilizadas no dispositivos embarcados, o Yocto pode gerar de forma
automática o SDK para desenvolvimento. Possuímos dois tipos:
● SDK Standard
○ Utilizado pelos desenvolvedores de aplicação (onde é necessário conhecer o Yocto em si)
○ É possível utilizar o toolchain e o cross-compilador para desenvolvimento ex: qt5
○ Esse toolchain fornece todos os conjuntos de bibliotecas que são necessárias para compilar
um aplicativo para "target" em questão
● SDK Extensible
○ Possui todas as features do SDK Standard
○ Pode ser utilizado por outros desenvolvedores Yocto para desenvolvimento de receitas
○ Também é possível compilar novas imagens e emular elas via QEMU
○ Podemos criar uma receita e fazer o deploy direto em uma sistema emulado para testes
33. Devtool
Fase de desenvolvimento
devtool add
devtool build
devtool deploy-target
workspace
binario
Recipe
Source code
Teste do binario
Fase de
teste Coleta de erros
Target ou emulador
HOST
devtool edit-recipe
devtool modify