O uso do Linux como sistema operacional presente em equipamentos eletrônicos vem crescendo de maneira mais acentuada nos últimos anos. Além do fato de possuir licença open source, a evolução constante do sistema vem acompanhada com a evolução da tecnologia em si.
O Yocto Project é um sistema de build composto por diversas ferramentas para criação de distribuições Linux embarcado customizadas e tem suporte dos principais fabricantes de semicondutores.
O que é um Sistema Linux Embarcado?
Um sistema Linux Embarcado não se difere conceitualmente de um sistema Linux usado em computadores desktop. A principal diferença está na customização e adaptações necessárias para que o Linux seja “acoplado” ao hardware específico e satisfaça, principalmente, os requisitos de desempenho, armazenamento e consumo de energia.
Podemos ilustrar um sistema Linux Embarcado como apresentado na figura 1.
Basicamente, para um sistema Linux Embarcado desempenhar suas funções temos que agregar seus diversos artefatos de software – Bootloader, Linux Kernel, Bibliotecas, Serviços e Aplicações – para serem executados no Hardware alvo. Ao conjunto desses artefatos de software chamamos de Distribuição.
Temos um artigo específico tratando sobre a Anatomia de um Sistema Linux Embarcado.
Opções para uso de Linux em produtos
Quando desenvolvemos produtos temos basicamente duas opções: utilizar uma Distribuição Linux Pronta ou Customizada. Veremos abaixo quais os Prós e Contras de cada solução:
Distribuição Pronta: Prós
- Maioria dos problemas de compatibilidade resolvidos em plataformas de referência (Rpi, BBB, Udoo etc);
- Suporte da comunidade;
- Diversas opções dependendo do hardware (Ubuntu, Debian, Arch etc), inclusive com suporte comercial;
- Amplo Repositório de pacotes “prontos” à disposição;
- Ótima opção para um “Proof of Concept”.
Distribuição Pronta: Contras
- Pacotes desnecessários aumentando tempo de boot, uso de memória, processamento e consumo de energia;
- Difícil customização quando se precisa “enxugar” e baixa flexibilidade;
- Dificuldade no controle de mudanças e updates;
- Problemas com licenças.
Distribuição Customizada: Prós
- Total controle do que existe “debaixo do capô” e das licenças;
- Alta Flexibilidade;
- Fácil Escalabilidade;
- Facilidade no controle de mudanças e updates;
- Otimizado de acordo com os requisitos de projeto e hardware;
- Ótimo para etapas de Bring-up, Testes e Validação.
Distribuição Customizada: Contras
- Ramp up pode ser demorado;
- Nem todos os pacotes necessários podem estar disponíveis para cross compilação;
- Suporte e mão de obra especializada;
- Necessidade de infra-estrutura para geração das imagens.
Ferramentas de Desenvolvimento
Para gerarmos os artefatos de software necessários devemos ter à disposição um conjunto de ferramentas de desenvolvimento que são ilustradas na figura 2.
Das quais podemos definir brevemente:
- IDE: Integrated Development Environment é utilizado para edição de códigos fonte e debug (ex.: Eclipse);
- Sistema de Build: Responsável por gerar e agregar os artefatos de software (ex.: Yocto e Buildroot);
- SDK: Software Development Kit é um conjunto de ferramentas, bibliotecas e códigos fonte para desenvolvimento de software;
- JTAG: equipamento com in-circuit emulator para debug de código on-chip;
- Toolchain: conjunto de ferramentas para construção de artefatos binários (compilador, assembler e linker);
- GDB: GNU Debugger é uma ferramenta de auxílio no debug de software;
- Conexões Físicas: Serial, Paralela, Ethernet, USB etc.
- Target: placa eletrônica composta com ao menos processador, memórias e interfaces de comunicação.
O que se espera de um Sistema de Build?
Devido à complexidade inerente de um Sistema Linux Embarcado, espera-se que um Sistema de Build:
- Forneça Toolchain para cross-compiling e debug;
- Construção dos artefatos de software;
- Gerenciar cadeias de dependências entre os pacotes;
- Construção da imagem (bootloader + kernel + rootfs);
- Geração de SDK (+);
- Integração com IDEs (+);
- Gerenciador de Pacotes a ser utilizado no target (+);
- Automação de Testes (+);
- Emulador do HW (+).
Atualmente temos disponíveis os seguintes Sistemas de Build:
Yocto Project – Overview
O Yocto Project, além de ser um Sistema de Build, ele endereça questões críticas no desenvolvimento de produtos como: redução do time-to-market, redução de custos de desenvolvimento e manutenção.
O que é o Yocto Project?
- Sistema de Build mais completo disponível atualmente;
- Liderado pela The Linux Foundation: yoctoproject.org;
- Comunidade ativa e bem receptiva;
- Suporte dos principais fabricantes de semicondutores.
O que NÃO é o Yocto Project?
It’s not an embedded Linux distribution
– it creates a custom one for you
Características
- Coleção de ferramentas e métodos que possibilitam rápida validação e desenvolvimento: git.yoctoproject.org;
- Suporta arquiteturas x86, ARM, MIPS e PowerPC;
- Baseado no Openembedded: openembedded.org;
- Estruturado em camadas que facilita o reuso e extensão;
- Releases a cada 6 meses;
- SDK com integração com Eclipse e Qt Creator;
- Histórico de Build registrado em repositório git;
- Filtro de licenças;
- Suporte às últimas versões estáveis de software;
- Suporta os mais populares formatos de pacotes: rpm, deb e ipk;
- Total isolamento do Host e ambiente de Build;
- Interface gráfica via web para controle de Build (Toaster);
- Extensa documentação: yoctoproject.org/documentation.
Versões:
|
Nome |
Revisão |
Poky |
Data |
|
Bernard |
1.0 |
5.0 |
Abril de 2011 |
|
Edison |
1.1 |
6.0 |
Outubro de 2011 |
|
Denzil |
1.2 |
7.0 |
Abril de 2012 |
|
Danny |
1.3 |
8.0 |
Outubro de 2012 |
|
Dylan |
1.4 |
9.0 |
Abril de 2013 |
|
Dora |
1.5 |
10.0 |
Outubro de 2013 |
|
Daisy |
1.6 |
11.0 |
Abril de 2014 |
|
Dizzy |
1.7 |
12.0 |
Outubro de 2014 |
|
Fido |
1.8 |
13.0 |
Abril de 2015 |
|
Jethro |
2.0 |
14.0 |
Outubro de 2015 |
|
Krogoth |
2.1 | 15.0 |
Abril de 2016 |
Openembedded – Estrutura Simplificada
O Yocto Project é baseado no Openembedded, que se caracteriza como sendo um conjunto de metadados para execução de build e suas dependências através do Bitbake, e pode ser representado simplificadamente de acordo com a figura 3.
Onde:
-
Bitbake: Ferramenta para execução de tarefas e gerenciamento de metadados escrita em python;
-
Metadados: Coleção estruturada de “receitas” e arquivos que “dizem” ao Bitbake o que e como construir os artefatos de software.
Poky
O Poky é uma Distribuição e um Sistema de Build de Referência do Yocto Project. É considerado como sendo o seu alicerce com os seguintes componentes principais:
- Coleção de Receitas de Pacotes Base (oe-core);
- Bitbake;
- Scripts de Build;
- BSPs de referência;
- Distribuição de Referência;
- Documentação do Yocto.
Toolchains e Cross Compilers
C Libraries
Diversidade de Pacotes
Apenas no core estão disponíveis mais de 900 receitas de pacotes. Podemos destacar alguns:
- U-boot, Redboot, GRUB, Syslinux
- SysVinit, Systemd, Upstart
- Busybox, util-linux
- Java (oracle e openjdk)
- Python, Perl, Ruby, Lua, Node.js
- Pulseaudio
- Chromium
- Apache, Nginx
- OpenGL, DirectFB, X11, Wayland
- Qt4 e Qt5
- EFL, GTK+, FLTK, wxWidgets, Mono
- MariaDB, PostgreSQL, MongoDB, SQLite
Documentação e Grupos de discussão
No site do projeto é disponibilizado um set completo de documentação do Yocto e também separado por categorias de conteúdo. Além disso, existem diversos grupos de e-mail de discussão para envio de patches, resolução de problemas, novas implementações etc.
Conclusão
O Yocto Project é a solução atual mais completa eficiente para desenvolvimento de produtos eletrônicos baseados em Linux. Com a liderança da Linux Foundation e o suporte de grandes empresas do setor tem se tornado um padrão na indústria.
No próximo post da série vamos apresentar a arquitetura detalhada bem como os conceitos e definições.










Diego, uma pergunta tola, mas que não achei resposta até agora: você sabe de onde vêm os nomes dos releases do Yocto, o que eles significam?
Sabe que eu também não sei.
Sempre me perguntei isso mas nunca fui atrás.