Padtec - Pólis de Tecnologiapolisdetecnologia.com.br/wp-content/uploads/2014/05/yocto_polis.pdf ·...
Transcript of Padtec - Pólis de Tecnologiapolisdetecnologia.com.br/wp-content/uploads/2014/05/yocto_polis.pdf ·...
Padtec S/A © 2014 Todos os Direitos Reservados 4
Linux Embarcado
• Fim específico• Conjunto reduzido• Autonomia
Hardware
Linux Kernel
Biblioteca C
Biblioteca Biblioteca Biblioteca
Aplicação Aplicação
Toolchain
Padtec S/A © 2014 Todos os Direitos Reservados 5
Imagem do Sistema
• Tamanho reduzido• Particionamento
Bootloader
Linux Kernel
rootfs1
rootfs2
data
Padtec S/A © 2014 Todos os Direitos Reservados 6
Sistema com Linux Embarcado
Opções para construção:
• Distribuição pronta• Gerar uma distribuição manualmente• Usar um sistema de build
Padtec S/A © 2014 Todos os Direitos Reservados
Sistema com Linux Embarcado
● Usar uma distribuição pronta
– Red Hat
– Ubuntu
– Suse
– Archlinux
– Slackware
– Debian
– Android, Emdebian, Tizen
Padtec S/A © 2014 Todos os Direitos Reservados
Sistema com Linux Embarcado
● Gerar uma distribuição manualmente
– Controle Total
– Flexibilidade
– Trabalhoso
– Reprodutibilidade
● Linux From Scratch: vale a experiência!
– http://www.linuxfromscratch.org/
Padtec S/A © 2014 Todos os Direitos Reservados
Sistema com Linux Embarcado
● Ferramenta de Build
– Automatização do processo de geração
– Conjunto de pacotes validados
– Frameworks para extensão e desenvolvimento
● Buildroot, PTXdist, LTIB, BaseRock, OpenEmbedded, Poky
Padtec S/A © 2014 Todos os Direitos Reservados
Yocto Project
Unidade SI de medição, igual a 10^24
http://www.yoctoproject.org
Padtec S/A © 2014 Todos os Direitos Reservados
O que é?
● Projeto Open Source
● Build System para Linux OS
● Coleção de projetos, métodos e ferramentas
– Fácil customização
– Um lugar para a Indústria publicar BSPs
● Fundado em 2010
● Gerenciado por membros da Linux Foundation
● Cadência de releases: 6 meses
Padtec S/A © 2014 Todos os Direitos Reservados
O que é?
● “The Yocto Project is not an Embedded Linux Distribution – It creates a custom one for You!”
● “The Yocto Project is not Single Open Source Project – It is an Ecosystem”
● “The Yocto Project combines the convenience of a ready-to-run Linux Distribuition with the flexibility of a custom Linux operation system stack”
● “... to bring some order to the chaos of embedded Linux development”
Padtec S/A © 2014 Todos os Direitos Reservados
Quem faz?
● Comunidade de usuários
● Organizações
– Desenvolvedores individuais
– Embeded Hardware
– Semicondutores
– OS Vendors
● Linux Foundation
Padtec S/A © 2014 Todos os Direitos Reservados
Quem faz?
● Adivisory Board
– LSI, Freescale, Wind River, OpenEmbedded
– TI, Intel, LTSI, Juniper Networks, AMD
– Mentor Graphics, LG, Dell, Broadcom,
– Renesas, OS Systems, MontaVista, Huawei,
– Enea
Padtec S/A © 2014 Todos os Direitos Reservados
Quem usa?
● Distros Comerciais
– Wind River Linux Carrier Grade Profile 5
– Wind River Linux 6
– Enea Linux 4.0
– MontaVista Linux Carrier Grade Edition 7
– Mentor Embedded Linux
● Distros
– Angstron (http://www.angstrom-distribution.org)
– Shr (http://shr-project.org)
Padtec S/A © 2014 Todos os Direitos Reservados
Quem usa?
● BSP (Board Support Package)
– Intel
– Freescale
– Texas Instruments
– Renesas
– AMD
Padtec S/A © 2014 Todos os Direitos Reservados
O que eu preciso para usar?
● PC padrão
● 50Gb de disco
● Um distro recente (debian, ubuntu, fedora, opensuse, centos)
● Pacotes de desenvolvimento (gcc,make,git)
● Uma release do Yocto Project
● http://www.yoctoproject.org/docs/1.7/yocto-project-qs/yocto-project-qs.html
Para começar...
Padtec S/A © 2014 Todos os Direitos Reservados
O que eu preciso para usar?
● Se quiser brincar profissionalmente:
– Processador Xeon, 16Gb RAM, 1Tb Disco, controlador RAID com cache alto
● Em casa: i5 terceira geração com 16Gb RAM e 1Tb HD 7200 SATA
● Um bom processador e disco com controladora rápida vai fazer a diferença.
Padtec S/A © 2014 Todos os Direitos Reservados
Como funciona?
● Build System:
– Poky reference system
● Bitbake: build engine● OpenEmbedded Core: receitas e classes bases
– http://www.openembedded.org● Core BSPs e layers
Padtec S/A © 2014 Todos os Direitos Reservados
Como funciona?
● Ferramentas de desenvolvimento
– Application Development Toolkit
– Hob
– Toaster
● Eclise IDE Plugin: integração entre ADT e Eclipse
● AutoBuilder: build tests e QA
● cross-prelink, pseudo, swabber
Padtec S/A © 2014 Todos os Direitos Reservados
Como funciona?
● Tarefa (task): etapas executadas pelo build engine
● Receita (recipe): conjunto de tarefas necessárias para compilar determinado software (.bb, .bbappend)
● Classes (classes): herança e encapsulamento da lógica para a execução de tarefas comuns (.bbclass)
Padtec S/A © 2014 Todos os Direitos Reservados
Como funciona?
● Configuração (conf): arquivos com definições globais (.conf)
● Pacote (package): resultado do processamento da receita de um componente de software
● Camada (layer): conjunto de receitas, classes, arquivos de configuração que podem ser agregados ao sistema de build para estendê-lo ou modificar comportamentos
Padtec S/A © 2014 Todos os Direitos Reservados
Como funciona?
● Layer é o modo de extender o build system
– Adicionar, remover, modificar
● Classes, receitas, configurações
– São adicionadas no sistema
Padtec S/A © 2014 Todos os Direitos Reservados
Como funciona?
● Agrupe as layers por funcionalidade, exemplo:
– Toolchains
– BSP/Machine
– Áreas funcionais (database, networking, languages)
– Especificidades do projeto
● Pilhas de software de terceiros● Componente usados em outros projetos● Configurações
Padtec S/A © 2014 Todos os Direitos Reservados
Como funciona?
● Máquina (machine): plataforma de hardware alvo da distribuição. Implementado através de uma layer BSP
● Imagem (image): imagem final do rootfs do sistema gerado
● Distribuição (distro): regras e políticas de geração da imagem do sistema
Padtec S/A © 2014 Todos os Direitos Reservados
Tem interface gráfica?
● Bitbake: linha de comando
$ bitbake <receita>
$ bitbake <receita> -c <task>
$ bitbake <receita> -k
$ bitbake -s
Padtec S/A © 2014 Todos os Direitos Reservados
Distro YP X Distro customizada por mim?
● Distribuição Pronta, vantagens
Simplicidade de uso
Facilidade na instalação(pacotes)
Framework de desenvolvimentoPronto e funcional
Base de usuários
Suporte comercial
Padtec S/A © 2014 Todos os Direitos Reservados
Distro YP X Distro customizada por mim?
● Distribuição Pronta, desvantagens
Falta de flexibilidade
Pode não estar otimizada
Tempo de boot pode ser alto
Requisitos de licença
ExperiênciaPara adaptação e
customização
Requer tempo
Padtec S/A © 2014 Todos os Direitos Reservados
O que o Yocto Project permite configurar numa distribuição?
● Versão dos componentes de sw
● Subsistemas
– Systemv, systemd
● Features adicionais: alsa, wayland, x11, usb, pci
● Toolchain
– Interna ou externa
● Versão de Linux Kernel
Padtec S/A © 2014 Todos os Direitos Reservados
Há alguma restrição de licença nas distribuições geradas?
● Não há restrição de licenças
● Há preocupação do YP em gerar distros legais
– Opções para não permitir determinada licença
– Manifesto de licenças
– Exportação de código fonte, scripts, patches
● https://www.yoctoproject.org/blogs/davest/2012/binaries-considered-dangerous
Padtec S/A © 2014 Todos os Direitos Reservados
Caso: 1 distro 4 plataforma
● Plataformas:
– 2 EVKs (ppc e x86-64)
– plataforma alvo do produto
– máquina virtual para integração
● Solução YP:
– Distro e Linux Kernel comum
– A mesma SDK
– MACHINE=<plataforma alvo>
Padtec S/A © 2014 Todos os Direitos Reservados
Caso: Fabricante sumiu, cadê o BSP?
● BSP antigo (2002)
– Fabricante não oferecia suporte ($$$)
● Necessidade de evolução kernel e userland
● Plataforma não otimizada
● Solução YP:
– Redução do footprint
– Toolchain otimizado
– Bugfixes gerais e críticos solucionados
– Controle de todos os componentes do produto
Padtec S/A © 2014 Todos os Direitos Reservados
Caso: Toolchains
● Geração de SDKs
– Podem ser instaladas em qualquer workstation linux
● Mesma versão de GCC
● Target para diferentes plataformas
Padtec S/A © 2014 Todos os Direitos Reservados
Qual o resultado da construção?
● Imagem: ext2, ext3, cpio, directdisk, jffs2, ubi, cramfw, brtfs, live
● Linux kernel image (bz2, uImage)
● Pacotes (rpm, ipk, deb, tar)
● Manifesto das licenças de softwares usadas
● Histórico de build (buildhistory)
● Código fonte de todos os softwares usados
● Scripts de build e patches aplicados
Padtec S/A © 2014 Todos os Direitos Reservados
Quais plataformas são suportadas?
● Arquiteturas: ARM, PPC, MIPS, x86 e x86-64
● Machines: qemuarm, qemumips64, qemumips, qemuppc, qemux86, qemux86-64
● Vendor BSPs:
– TI, FSF, Intel, AMD, LSI
http://git.yoctoproject.org/
Padtec S/A © 2014 Todos os Direitos Reservados
Quais softwares podem rodar nestas distribuições? Servidores web? Banco de dados? Controladores de hardware?
● Qualquer sw pode ser buildado e adicionado na imagem final
● Alguns sw são mais complicados de empacotar
– Requerem buildtools exóticos ou scripts que não seguem padrões
● Como regra geral: qualquer artefato que o bitbake consiga empacotar, pode ser usado
● Qualquer Linux Kernel pode ser usado
http://layers.openembedded.org/layerindex/branch/master/layers/
Padtec S/A © 2014 Todos os Direitos Reservados
Como desenvolver para plataformas que receberão distribuições do Yocto Project?
● Defina uma imagem base para a distro
● Use a SDK gerada pelo YP
– Máquinas de desenvolvimento
– Servidores de build
● Mesmo não tendo definido a arquitetura alvo escolha uma MACHINE virtual mais próxima do seu alvo
– Assim você já pode iniciar as primeiras validações antes do hw final chegar
Padtec S/A © 2014 Todos os Direitos Reservados
Posso ver uma distribuição do Yocto Project funcionando aqui ao vivo?
$ git git://git.yoctoproject.org/poky -b dizzy
$ source oe-init-build-env
$ bitbake core-image-minimal
$ runqemu qemux86
Não
Padtec S/A © 2014 Todos os Direitos Reservados
O que eu preciso fazer para produzir uma nova distribuição?
● Requisitos muito bem definidos
– Aderência a padrões: LSB, CGL
– Footprint
● sdcard, HD, flash, netboot, nfs
– Qual versão de Linux Kernel atende ?
● LTSI, mainline, old kernel, vendor kernel
– Vendor de hw possui BSP ?
Padtec S/A © 2014 Todos os Direitos Reservados
O que eu preciso fazer para produzir uma nova distribuição?
● Comece gerando imagens usando as distros de referência:
– poky, poky-lsb, poky-tiny
● Depois defina uma imagem base
– core-image-minimal
● Crie uma ou várias layer(s) para as suas modificações
– sempre modifique a layer
Padtec S/A © 2014 Todos os Direitos Reservados
O que eu preciso fazer para produzir uma nova distribuição?
● Analise os resultados
– buildhistory
– bitbake -g -u depexp
● Adicione aos poucos novos pacotes e layers
Padtec S/A © 2014 Todos os Direitos Reservados
Posso gerar atualizações para uma distribuição já construída e instalada?
● As atualizações podem ser feitas usando
– Gerenciador de pacotes
– Imagem
● YP não oferece uma solução para atualização da distro. Ele suporta os mecanismos para que isso seja implementado
Padtec S/A © 2014 Todos os Direitos Reservados
Posso inserir meu software na distribuição gerada pelo Yocto Project? Empacotado?
● A intenção é que todos os softwares sejam construídos e empacotados pelo YP
● Cada aplicação ou o conjunto de aplicações precisam ter uma receita
– Descrição de onde baixar
– Compilar
– Instalar
● Cada receita ganha uma versão: my-app_0.1.2.bb
Padtec S/A © 2014 Todos os Direitos Reservados
Posso inserir meu software na distribuição gerada pelo Yocto Project? Empacotado?
SUMMARY = „Test app“
SECTION = „tests“
LICENSE = „CLOSED“
LIC_FILES_CHKSUM = „“
SRC_URI = „git.my.com“
S = „${WORKDIR}“
do_compile() {
${CC} test.c o test
}
do_install() {
install -d ${D}${bindir}
install -m 0755 test ${D}/${bindir}
}
● A receita precisa ficar dentro de uma layer
● Uma layer pode alterar uma receita de outra layer: bitbake-layers
Padtec S/A © 2014 Todos os Direitos Reservados
Como gerenciar o desenvolvimento da distribuição? Controle de versões? Patches?
● Defina uma versão estável do YP para usar
● Sincronize o upstream com um repositório interno
● Monitore atualizações na branch estável
● Crie repositórios internos para as várias layers que serão criadas
– Escolha uma política de versionamento
– Faça builds contínuas para garantir a integridade durante o desenvolvimento
Padtec S/A © 2014 Todos os Direitos Reservados
Como gerenciar o desenvolvimento da distribuição? Controle de versões? Patches?
● Patches de componentes
– Podem ser mantidos, num diretório, junto com os meta-dados
Padtec S/A © 2014 Todos os Direitos Reservados
O que faço se sair uma nova versão?
● Versões do YP são feitas a cada 6 meses
– As últimas duas releases são mantidas
● Cada versão deve ser encarada como uma linha de desenvolvimento diferente
● Se sair uma nova versão de um branch estável, então atualize
– Correções de segurança e bug críticos
● São feitos backports das correções● Se for uma nova release do YP e o seu produto ainda não saiu para
campo, então migre de versão
– Supondo que todo o seu trabalho esteja nas layers a migração não terá dores de cabeça
Padtec S/A © 2014 Todos os Direitos Reservados
Posso atualizar sem quebrar minha distribuição já feita?
● Se houver quebras, os motivos são
– YP ficou mais criterioso, não tolerando erros triviais nas receitas
– Pacotes que não existem mais no OE-Core
● .bbappends feitos usando a versão da receita● Receitas removidas
● Tenha builds contínuas no master branch
– Assim você pode consertar o seu projeto ao longo do ciclo de desenvolvimento
Padtec S/A © 2014 Todos os Direitos Reservados
O que ganho se atualizar?
● Você ganha:
– Melhorias no desempenho da build
– Atualizações da base de pacotes e toolchain
– Novas features
– Melhorias e correções feitos ao longo de 6 meses
● Pense um pouco:
– O seu produto suporta atualização em campo?
– Como você cuida da atualização de software?
– Quais são os seus componentes críticos?
Padtec S/A © 2014 Todos os Direitos Reservados
Posso manter a versão de alguns componentes para manter compatibilidade com meu software?
● Tenha em mente que cada release do YP é testada e validada com um conjunto de versões
● Você pode manter a versão de alguns componentes enquanto atualiza a base do sistema.
● Vai depender da sua análise entre os componentes
● Exemplo prático:
– Yocto 1.7 com gcc 4.8 e libc 2.20
Padtec S/A © 2014 Todos os Direitos Reservados
Mais informações?
● Projeto Open Source com excelente documentação:
– Bitbake User Manual
– Application Development Guide
– Board Support Package Development Guide
– Development Manual
– Linux Kernel Development Manual
– Profilling and Tracing Manual
– Quick Start
– Reference Manual
Padtec S/A © 2014 Todos os Direitos Reservados
Mais informações?
● Lista de discussão
– https://www.yoctoproject.org/tools-resources/community/mailing-lists
● IRC #yocto #poky
– https://www.yoctoproject.org/tools-resources/community/irc
● Apresentações
– https://www.yoctoproject.org/tools-resources/presentations
● Vídeos
– https://www.yoctoproject.org/tools-resources/videos
Padtec S/A © 2014 Todos os Direitos Reservados
Mais informações?
● Leia a documentação
● Pergunte na Lista de discussão
● Entre no IRC
● Leia o código fonte
● Leia os commits (git log)
Padtec S/A © 2014 Todos os Direitos Reservados
Quem pode dar treinamento?
● Não existe um treinamento oficial
● Linux Foundation
– LF405 Building Embedded Linux with the Yocto Project
– LF404 Building Embedded Linux with the Yocto Project: Crash Course
● Free Electrons
– Yocto Project and OpenEmbedded development training
● Embedded Labworks
– Yocto Project
Padtec S/A © 2014 Todos os Direitos Reservados
Não quero treinamento, existe livros?
● Embedded Linux Development with Yocto Project, by Otavio Salvador e Daiane Angolini
– Escrito por Brasileiros.
● The Architecture Of Open Source Applications, Volume II
– Capítulo 22: Yocto, by Elizabeth Flanagan
● Open Software Stack for the Intel® AtomTM Processor, by Sean D. Liming e John R. Malin