Treinamento de Linux Device Drivers
- por Sergio Prado
O treinamento “Desenvolvendo Linux Device Drivers” da Embedded Labworks esta saindo do forno!
Este treinamento é um pedido recorrente nas turmas que formei até agora em Linux embarcado. Para quem esta envolvido com sistemas embarcados, é mesmo um caminho natural.
Você usa um hardware específico como referência para seu projeto, seja a Raspberry Pi, a Beagleboard, o i.MX53 QSB ou a FriendlyARM mini2440. Você começa a desenvolver o produto, customizar a distribuição Linux e desenvolver sua aplicação. Mas em determinado momento (ou em paralelo) você precisa customizar o hardware. Aumentar ou diminuir a capacidade de memória (RAM, flash, etc). Remover dispositivos não usados. Adicionar um dispositivo no barramento I2C. E por aí vai.
Este trabalho exige conhecimentos do kernel e do desenvolvimento de drivers de dispositivos para o Linux. É aí que entra o treinamento “Desenvolvendo Linux Device Drivers”.
O treinamento esta em fase final de desenvolvimento. Assim que finalizar os slides, eles são publicados aqui, como sempre.
O mais difícil esta sendo condensar todo o conteúdo que quero passar em 3 dias (24 horas). Este é o conteúdo que defini até agora:
- Introdução à arquitetura geral do kernel Linux. Estudo detalhado do código-fonte. Configuração, compilação e testes do kernel no kit de desenvolvimento.
- Desenvolvimento de módulos do kernel. Compilando, instalando, carregando e testando o módulo no kit de desenvolvimento. Integrando o módulo nos fontes do kernel.
- Arquitetura básica de um driver de dispositivo. Como funciona o acesso ao hardware no Linux. Desenvolvendo um driver de dispositivo de caractere.
- Gerenciamento de memória no kernel Linux. Entendendo memória virtual e MMU. As API de alocação de memória do kernel, incluindo page allocator, SLAB allocator, vmalloc e kmalloc.
- Arquitetura de acesso à I/O no Linux. As funções de acesso à memory-mapped I/O e port I/O. Implementando o acesso à uma região de I/O mapeado em memória em um device driver.
- Gerenciamento de processos no kernel Linux. Os estados de um processo. Implementando uma thread do kernel. Usando wait queues para bloquear uma tarefa aguardando por um recurso ou evento.
- Gerenciamento de interrupções. Registrando e implementando uma rotina de tratamento de interrupção em um device driver. Compartilhando interrupções entre drivers. Dividindo o tratamento de uma interrupção em top half e bottom half. Implementando bottom halves através de softirqs, tasklets e work queues.
- Mecanismos de sincronização. Restrições em um ambiente multithread e os problemas de concorrência. Usando as funções de operações atômicas e protegendo o acesso concorrente com semáforos, mutexes, spinlocks e outros mecanismos de sincronização.
- Debugging e tracing. Debugging com mensagens. Usando a API do debugfs e os comandos sysrq. Entendendo kernel oops e as mensagens de erro do kernel. Configurando debugging com kgdb. Instrumentando o kernel com kernel probes, SystemTap, tracepoints e LTTng.
- Framework de drivers do kernel e o modelo de dispositivos (device model). Desenvolvendo um driver de dispositivo compatível com o framework de device model do kernel.
- Estudando e entendendo os drivers de dispositivo para barramentos comuns como USB e I2C.
- Entendendo as camadas TTY, input e vídeo no Linux.
- Entendendo melhor o kernel Linux. O boot do kernel em detalhes. Portando o kernel para uma nova plataforma.
- Dicas e recursos para trabalhar com o kernel. Como reportar problemas e conseguir ajuda. Como enviar patches e contribuir.
A página oficial do treinamento é esta aqui. Abrirei turmas a partir de março/2013. Devo definir o local do treinamento, as datas e o valor do investimento em breve.
Para receber um e-mail assim que abrir as turmas, você pode se cadastrar na newsletter da Labworks clicando aqui.
Se você quiser levar este treinamento para a sua empresa ou instituição de ensino, envie um e-mail com o assunto “Treinamento in-loco”.
Mais novidades em breve!
Um abraço,
Sergio Prado