Programa do Curso
Introdução
- breve história do GNU/Linux
- licenciamento
- versionamento do kernel
- ciclo de lançamento
- árvores de kernel
- mainline
- kernel vs. espaço do usuário
- mecanismo vs. política
- alternativas de driver de kernel
- RTOS vs. Linux
Gerenciamento de Memória
- memória virtual vs. memória física
- alocação de memória no kernel
- páginas
- zonas
- API
- slab
Patch do Kernel
- ciclo de vida
- git
- código-fonte do kernel
- criar patch
- verificar patch
- corrigir patch
- enviar patch
- código auditado
Módulos de Kernel
- obter fontes do kernel
- configurar/compilar/instalar
- drivers de dispositivos (linkados estaticamente, carregados em tempo de execução)
- init/exit
- licenciamento
- EXPORT SYMBOL GPL
- Makefile fora da árvore
- module-init-tools
- módulo na árvore do kernel
- Kconfig
- passagem de parâmetros
- sparse
Drivers de Caracteres
- arquitetura
- interface usuário/kernel
- subsistema de E/S
- VFS
- sysfs (dispositivos, barramento, drivers, classes),
- kobject/ktype/kset
- modelo de driver do kernel Linux
- arquivos de dispositivo
-
driver de caracteres
- inicialização
- registro
- open, release
- cdev, cdev add, cdev del,...
- números major/minor
- udev, udevmonitor, udevadm
Operações Avançadas de Drivers de Caracteres
- ioctl
- unlocked ioctl
- compat ioctl
- API do espaço do usuário
- API do espaço do kernel
- ciclo de vida do processo
- dormindo/bloqueado
- dormindo/acordando
- fila de espera
- thundering herd
- poll/select
Depuração do Kernel
- depuração
-
depurando o kernel
- pesquisa binária com git
- suporte de depuração do kernel
- printk syslogd, klogd, níveis de log, limitação de taxa, níveis de debug, subsistemas de debug seletivos
- depuração por consulta ao debugfs
- depuração de oops, asserção de oops
- Chave Mágica SysRq
- kgdb/kdb
- JTAG
Rastreamento
- gcov
- lcov
- oprofile
-
ftrace
- nop tracer
- function tracer
- sched switch tracer
- function graph tracer
- dynamic tracer
- trace-cmd/kernelshark
- perf
- LTTng
Interrupções
- interrupções vs. sondagem
- interrupção
- seções de programa
- reentrância
- eventos
- handler de interrupção
- handler de interrupção compartilhado
- fluxo de interrupção
- controle de interrupção
Deferimento de Trabalho
- partes superior/inferior
- softirqs
- tasklets
- filas de trabalho
- interrupções threadadas
Concorrência
- região/seção crítica
- operações atômicas
- condição de corrida
- sincronização
- bloqueio
- soluções de bloqueio
- deadlock
- contentção
- o que bloquear?
-
o que pode ser usado?
- operações atômicas
- spin locks
- reader-writer spin locks
- semáforo
- semáforo binário
- mutex
- reader-writer semaphore
- variáveis de conclusão
- locks sequenciais
- desabilitar a preempção
- ordenação e barreiras
Tempo
- HZ
- Jiffies
- grandes/pequenos atrasos
- timers do kernel
Hardware I/O
- Portas de E/O
- Memória de E/O
- Como lidar com efeitos colaterais ao acessar registros?
Comunicação Usuário-Kernel
- put(get)_user()
- copy to(from)_user()
- I/O do Kernel
- mapeamento de memória
- procfs
- sysfs
- debugfs
- relayfs
- netlink
- ioctl
Portabilidade
- tamanho da palavra
- tipos opacos
- char assinado/não assinado
- alinhamento de dados
- promoção integral
- reutilização de código
- endianness
- tick do sistema
- tamanho da página
- ordem de instrução
- SMP/preempção/memória alta
Exceto quando indicado de outra forma, o conteúdo e este esboço do curso são licenciados sob Atribuição-NãoComercial-CompartilhaIgual 4.0 Internacional (CC BY-NC-SA 4.0).
Requisitos
- Conhecimento básico de uso de um sistema GNU/Linux como usuário final
- Conhecimento básico de uma linha de comando shell
- Conhecimento básico de desenvolvimento no espaço do usuário / aplicação
- Conhecimento intermediário de programação em C
- Deve ter participado de Arquitetura de Sistemas GNU/Linux Embarcados (altamente recomendado!) e/ou ter um bom entendimento dos tópicos abordados lá
Declaração de Clientes (5)
Informações adicionais muito úteis
Grzegorz - Comp S.A.
Curso - BLoC Pattern
Máquina Traduzida
Edward é um excelente facilitador
Zibusiso Ncube - Agricatural Research Council
Curso - Ionic 4 and Angular for Developers
Máquina Traduzida
O conhecimento de Miguel sobre o assunto era extenso. Ele tornou o treinamento fácil de entender e o fluxo estava equilibrado, adicionando novos recursos a cada seção conforme necessário. Ele cobriu tudo que foi solicitado e respondeu a todas as perguntas de forma minuciosa. Foi uma experiência muito agradável.
Paul Coaton - SEMPCheck Services
Curso - Flutter Development Bootcamp with Dart
Máquina Traduzida
Que o instrutor se adapte às nossas necessidades
Eduardo Fontecha - ORMAZABAL PROTECTION & AUTOMATION S.L.U.
Curso - The Yocto Project - An Overview - hands-on
Máquina Traduzida
O instrutor era entusiasta, gentil e amava o tema
Isaac Murphy - Royal New Zealand Airforce
Curso - Build Native iOS and Android Apps with Flutter
Máquina Traduzida