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á
 35 Horas

Número de participantes


Preço por Participante

Declaração de Clientes (5)

Próximas Formações Provisórias

Categorias Relacionadas