Tópicos principais | Introdução e arquitetura geral de sistemas com Linux embarcado, estudo do hardware e seu processo de boot, estudo e geração de um toolchain para compilação cruzada, estudo e compilação do bootloader (U-Boot), configuração e compilação do kernel Linux, device tree e módulos do kernel, desenvolvimento de um rootfs do zero com o Busybox, desenvolvimento de um servidor web embarcado, acesso a dispositivos de hardware no Linux (led, botão, GPIO, PWM, I2C, acelerômetro, display, etc), tipos de sistemas de arquivo para Linux, uso de um sistema de build (Buildroot e Yocto Project/OpenEmbedded) para gerar distribuições Linux customizadas, desenvolvimento de aplicações, make e autotools, depuração em Linux embarcado (GDB, Valgrind, strace, etc), desenvolvimento de aplicações gráficas com o Qt, configuração e utilização do Eclipse em Linux embarcado |
Duração | 3 dias - 24 horas - 50% de teoria e 50% de prática |
Instrutor | Sergio Prado |
Público-alvo | Estudantes, engenheiros, desenvolvedores e líderes de equipes de desenvolvimento de software para sistemas embarcados |
Pré-requisitos | Conhecimentos básicos de distribuições Linux, terminal de comandos e linguagem C |
Material de estudo | O material de estudo é composto pelos slides, o livro de atividades e exercícios, os guias de referência e documentos de estudo adicional. Todo o material é fornecido de forma eletrônica no início do treinamento |
Kit de desenvolvimento | Os kits de desenvolvimento são emprestados aos alunos durante o treinamento para a execução das atividades práticas. É utilizado por padrão o módulo Colibri i.MX6 (ARM Cortex-A9) da Toradex. Se necessário, e conforme a necessidade da empresa contratante, o treinamento pode ser realizado em uma outra plataforma de hardware |
Apresentação: Introdução - Histórico do software livre e do sistema operacional GNU/Linux, principais características do Linux, mitos e verdades sobre o uso de produtos com Linux embarcado, componentes de um sistema com Linux embarcado, hardware para Linux embarcado, características de um toolchain, responsabilidades e características do bootloader, introdução ao kernel Linux, rootfs e sistemas de arquivo, sistemas de build.
Laboratório: Conectando e testando o target - Nesta atividade iremos conectar o host ao target pela porta serial e configurar uma aplicação de comunicação serial para acessar a console do target.
Apresentação: Toolchain - Definição e características, tipos de toolchain, componentes básicos de um toolchain baseado no GNU (gcc, binutils, etc), instalando e utilizando um toolchain pronto, compilando seu próprio toolchain com o crosstool-ng.
Laboratório: Utilizando e gerando toolchains - Nesta atividade aprenderemos a utilizar um toolchain pronto e gerar nosso próprio toolchain para compilar aplicações de forma cruzada.
Apresentação: Bootloader - Características e responsabilidades de um bootloader, processo de boot em x86, processo de boot em ARM, bootloaders populares em Linux embarcado, introdução ao U-Boot, compilando e configurando o U-Boot.
Laboratório: Compilando e testando o U-Boot - Nesta atividade estudaremos o processo de compilação, gravação e configuração do U-Boot no target.
Apresentação: Kernel Linux - Visão geral do kernel, componentes e arquitetura básica, gerenciamento de processos e escalonamento, gerenciamento de memória e MMU, interface com o hardware e gerenciamento de I/O, código-fonte do kernel, processo de desenvolvimento, configurando e compilando o kernel, device tree, linha de comandos do kernel.
Laboratório: Compilando e testando o kernel Linux - Nesta atividade iremos estudar como configurar, compilar e fazer o boot do kernel Linux no target.
Apresentação: Rootfs - Introdução a sistemas de arquivo, pontos de montagem, o sistema de arquivo root e mecanismos de montagem do rootfs, organização do rootfs e principais diretórios de um sistema Linux, arquivos de dispositivo, sistemas de arquivo virtual proc e sysfs, processo de boot e scripts de inicialização, configurando e compilando o BusyBox.
Laboratório: Criando um rootfs para o target - Nesta atividade iremos criar um rootfs simples e funcional para o target. O rootfs utilizará as ferramentas providas pelo BusyBox e será montado pela rede via NFS. Veremos como o uso do NFS facilita bastante o processo de desenvolvimento em Linux embarcado.
Apresentação: Módulos do kernel - Kernel monolítico e microkernel, características e vantagens de módulos do kernel, compilando e instalando módulos, dependências de módulos, carregando e descarregando módulos.
Laboratório: Trabalhando com módulos do kernel - Nesta atividade aprenderemos a compilar, instalar e carregar módulos do kernel.
Apresentação: Sistemas de arquivo - Tipos de dispositivos de armazenamento, sistemas de arquivo para dispositivos de bloco, journaling, sistemas de arquivo para memórias flash, cuidados com memórias flash, sistemas de arquivo somente-leitura, sistemas de arquivo voláteis.
Laboratório: Montando o rootfs do cartão SD - Neste exercício iremos a configurar o sistema para fazer o boot do rootfs diretamente do cartão SD.
Apresentação: Sistemas de build - Usando distribuições prontas, construindo distribuições customizadas, sistemas de build (buildsystem), Yocto Project e Buildroot, configurando e compilando o Buildroot.
Laboratório: Gerando um sistema Linux com o Buildroot - Nesta atividade iremos utilizar o Buildroot para gerar um sistema Linux do zero para o target.
Apresentação: Desenvolvimento de aplicações - Escolhendo componentes de software, licenças de software, mecanismos de compilação de software, compilação cruzada com as ferramentas make e Autotools.
Laboratório: Compilando com Makefile e Autotools - Nesta atividade iremos estudar como compilar aplicações de forma cruzada com Makefile e Autotools.
Apresentação: Desenvolvimento de aplicações gráficas - A camada gráfica do Linux, subsistemas DRM e framebuffer, conceito de servidor gráfico, X11 e Wayland, conceitos de toolkits gráficos, SDL, GTK, Flutter, Qt, aplicações Web.
Laboratório: Desenvolvimento de aplicações em Qt - Nesta atividade aprenderemos a utilizar o Qt como framework de desenvolvimento de aplicações em Linux embarcado.
Apresentação: Depuração de aplicações - Debugging em Linux embarcado, depuração remota com o GDB, análise de core dump, análise do uso de memória com o Valgrind, rastreando aplicações com o strace e o ltrace.
Laboratório: Depurando aplicações com o GDB - Nesta atividade aprenderemos a depurar aplicações em Linux embarcado com o GDB.
Apresentação: Ferramentas de desenvolvimento de aplicações - Linguagens de programação, ferramentas de controle de versão, ambientes de desenvolvimento integrado (IDE).
Laboratório: Desenvolvendo e depurando com o Eclipse - Nesta atividade aprenderemos a configurar e utilizar o Eclipse como ambiente de desenvolvimento integrado em Linux embarcado.
Apresentação: Considerações finais - Links e recursos adicionais, recomendações de livros, dúvidas e comentários finais, encerramento.