Objetivo
Este treinamento visa capacitar o participante no desenvolvimento de drivers de dispositivo para o kernel Linux.
Conteúdo programático
- Introdução ao kernel Linux: responsabilidades do kernel, arquitetura geral, processo de desenvolvimento e versionamento, visão geral do código-fonte, licença, ferramentas de navegação.
- Configuração e compilação do kernel: configurando o kernel Linux, compilando o kernel, imagens geradas, instalando o kernel, compilando o device tree, passando parâmetros para o kernel.
- Módulos do kernel: kernel monolítico e microkernel, módulos do kernel Linux, vantagens do uso de módulos, compilando e instalando os módulos, ferramentas de gerenciamento de módulos, passando parâmetros para módulos, desenvolvendo um módulo do kernel, integrando o módulo no código-fonte do kernel.
- Dispositivos de hardware: acesso a hardware no Linux, classes de dispositivos, driver de dispositivo de caractere, major/minor number, implementando as operações em arquivo do driver, trocando dados com o espaço de usuário, registrando um driver de dispositivo de caractere, desalocando recursos, tratamento de erros.
- Acessando o hardware: formas de acesso a I/O (bus I/O, port I/O, memory mapped I/O), memory mapped I/O com MMU, requisitando uma região de I/O, mapeando um endereço físico para um endereço virtual, acessando os registradores, APIs de acesso a I/O.
- Frameworks: Linux driver model, frameworks do kernel (tty, alsa, framebuffer, v4l, mtd, input, hwmon, watchdog, rtc, etc), driver de framebuffer, driver de power supply, driver de input, framework de LEDs.
- GPIOLIB: acessando GPIOs no Linux, GPIOLIB, acesso a GPIOs em espaço de usuário (sysfs e chardev), APIs de acesso a GPIO no kernel.
- Infraestrutura de barramento: introdução à infraestrutura de barramento, arquitetura e vantagens, gerenciamento de energia, bus code e bus adapters, análise do barramento I2C, analisando o driver de um dispositivo I2C, registrando um dispositivo no barramento, platform bus, platform drivers e platform devices.
- Device tree: histórico e introdução ao device tree, sintaxe do device tree, propriedades e nós, exemplos de device tree, analisando alguns nós de device tree, alterações no driver para suportar device tree, APIs de device tree, organização do device tree, device tree bindings.
- Gerenciamento de processos: processos e threads no Linux, os estados de uma tarefa, escalonador, tarefas de tempo real, kernel threads, API de threads do kernel, eventos e sincronização, wait queues, completion variable.
- Tratamento de interrupções: eventos de hardware interrupção, tratamento de interrupção no kernel, registrando uma ISR, restrições no tratamento de interrupções, como implementar uma ISR, dividindo o tratamento de uma ISR em duas partes (top half e bottom half), tasklets, work queues, threaded IRQs.
- Gerenciamento de concorrência: multitarefa e concorrência, concorrência no kernel Linux, seções críticas e exclusão mútua, operações atômicas, locking, mutex, spinlocks.
- Considerações finais: Links e recursos adicionais, recomendações de livros, dúvidas e comentários finais, encerramento.
Para mais detalhes sobre o conteúdo, você pode consultar a agenda e os slides do treinamento.
Informações adicionais
Estudantes, engenheiros, desenvolvedores e líderes de equipes de desenvolvimento de software para sistemas embarcados.
Terminal de comandos, linguagem C, arquitetura de sistemas com Linux embarcado.
O material de estudo é composto pelos slides das apresentações, o livro de atividades e exercícios, os guias de referência e documentos de estudo adicionais. Todo o material será fornecido de forma eletrônica no início do treinamento.
Os exercícios do treinamento são realizados no módulo Colibri i.MX6 da Toradex (ARM Cortex-A9), com a placa-base Aster e uma placa de expansão com diversos periféricos, incluindo leds, botões, trimpot, buzzer, UART, sensor de temperatura, expansor de GPIO, display de 7 segmentos e acelerômetro. O kit de desenvolvimento é emprestado aos alunos para a execução das atividades práticas. Se necessário, e conforme a necessidade da empresa contratante, o treinamento pode ser realizado em uma outra plataforma de desenvolvimento.
O treinamento pode ser apresentado nos seguintes idiomas: Português brasileiro e Inglês.
Se você planeja capacitar a sua equipe, considere um treinamento na sua empresa. Nos treinamentos in-company, a empresa contratante é responsável por fornecer os recursos necessários para a realização do treinamento, incluindo sala, projetor e máquinas de desenvolvimento para os alunos. Esse modelo traz grande economia para a empresa, já que o custo do transporte e estadia de vários funcionários é reduzido apenas ao do instrutor. Caso a empresa contratante tenha alguma necessidade específica, podemos estudar a criação de um conteúdo programático especial, como preparar o treinamento para uma plataforma de hardware específica ou desenvolver algum conteúdo adicional. Não hesite em entrar em contato por e-mail ou pela página de contato .
Os treinamentos em turmas abertas são realizados em um ambiente agradável, com um laboratório devidamente equipado e acesso à Internet. As aulas são normalmente ministradas em período integral, com uma parada para o almoço e um coffee-break pela manhã. Caso tenha interesse em participar de um treinamento mas não exista uma turma disponível, envie uma mensagem pela página de contato que avisamos assim que uma nova turma for aberta.
Devido à necessidade do uso de um kit de desenvolvimento para a execução das atividades práticas, no momento este treinamento não pode ser realizado de forma online.
Galeria de fotos
Algumas fotos dos treinamentos já realizados: