IMAGEM DESTAQUE
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.
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
Conhecendo o Yocto Project
O que é?
Yocto Project é um projeto colaborativo
open-source que fornece ferramentas para
desenvolvedores construírem sistemas e
distribuições Linux
● 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….
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
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
Empresas que usam Yocto
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
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
Principais conceitos Técnicos
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
Distribuições prontas
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
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
Sistema de Build
● Buildroot - https://buildroot.org/
● OpenWrt - https://openwrt.org/
● Yocto Project - https://www.yoctoproject.org/
Arquitetura
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)
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
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)
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
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)
https://github.com/schnitzeltony/meta-retro/blob/master/recipes-games/doomretro/doomretro.bb
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
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
ttps://layers.openembedded.org/layerindex/br
anch/master/layer/openembedded-core/
Exemplo de build Yocto
https://asciinema.org/a/556161
Dicas para uso no dia a dia e para a
automatização de processos no
desenvolvimento
Arquitetura
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
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
SDK / Devtool
● devtool add : https://asciinema.org/a/556172
● devtool deploy-target : https://youtu.be/F7_YznfnFjg
QEMU
https://asciinema.org/a/556160
Automação e CI/CD
Trigger
timer
Git review
manual
Build Staging / Deploy
Jenkins
Master
Jenkins
build node
Job
imagens logs
Automação e CI/CD
https://autobuilder.yoctoproject.org/typhoon
Automação e CI/CD
CONTATO
Quaisquer dúvidas, só entrar em contato conosco:
● E-mail Bruna: bruna.jacomelli@emc-logic.com
● E-mail Fernando: fernando.cola@emc-logic.com
● Site: https://www.emc-logic.com/
● Linkedin: https://www.linkedin.com/company/emc-logic/
● WhatsApp: (16) 93618-1941
www.embarcados.com.br
linkedin.com/embarcados
@portalembarcados
youtube/Embarcados TV
OBRIGADO!

Webinar: Utilizando o Yocto Project para automatizar o desenvolvimento em Linux Embarcado

  • 1.
  • 3.
    Um pouco sobrenó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 oYocto Project ● Principais conceitos técnicos ● Utilizando o Yocto no seu projeto de Linux Embarcado ● Dicas para a automatização do processo de desenvolvimento
  • 5.
  • 6.
    O que é? YoctoProject é 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 sobresua 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 objetivosdo 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
  • 10.
  • 11.
    Um exemplo dehardware ● 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 deproduto ● 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
  • 13.
  • 14.
    3 maneiras principais paradesenvolver 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
  • 15.
  • 16.
    Distribuições prontas Cons ● Poucaflexibilidade 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/
  • 19.
  • 20.
    Metadados ● Os metadadosconté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 comextensã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ésda 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)
  • 25.
  • 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 decamadas ● 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
  • 28.
  • 29.
    Exemplo de buildYocto https://asciinema.org/a/556161
  • 30.
    Dicas para usono dia a dia e para a automatização de processos no desenvolvimento
  • 31.
  • 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 devtooladd 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
  • 34.
    SDK / Devtool ●devtool add : https://asciinema.org/a/556172 ● devtool deploy-target : https://youtu.be/F7_YznfnFjg
  • 35.
  • 36.
    Automação e CI/CD Trigger timer Gitreview manual Build Staging / Deploy Jenkins Master Jenkins build node Job imagens logs
  • 37.
  • 38.
  • 41.
    CONTATO Quaisquer dúvidas, sóentrar em contato conosco: ● E-mail Bruna: bruna.jacomelli@emc-logic.com ● E-mail Fernando: fernando.cola@emc-logic.com ● Site: https://www.emc-logic.com/ ● Linkedin: https://www.linkedin.com/company/emc-logic/ ● WhatsApp: (16) 93618-1941
  • 42.