Programa do Curso

Introdução

  • história rápida do GNU/Linux
  • licenciamento
  • versionamento do kernel
  • ciclo de lançamento
  • árvores do kernel
  • linha principal
  • kernel vs. espaço do utilizador
  • mecanismo vs. política
  • alternativas de drivers do kernel
  • RTOS vs. Linux

Memória Management

  • Memória virtual vs. memória física
  • alocação de memória no kernel
  • páginas
  • zonas
  • API
  • laje

Patch do kernel

  • ciclo de vida
  • git
  • fonte do kernel
  • criar patch
  • verificar patch
  • corrigir patch
  • enviar patch
  • código auditado

Módulos do kernel

  • obter fontes do kernel
  • configurar/compilar/instalar
  • controladores de dispositivos (ligados estaticamente, carregados em tempo de execução)
  • init/exit
  • licenciamento
  • EXPORTAR SÍMBOLO GPL
  • makefile fora da árvore
  • módulo-init-tools
  • módulo na árvore do kernel
  • Kconfig
  • passagem de parâmetros
  • esparso

Drivers Char

  • arquitetura
  • interface utilizador/kernel
  • subsistema de E/S
  • VFS
  • sysfs (dispositivos, barramento, controladores, classes),
  • kobject/ktype/kset
  • modelo de driver do kernel linux
  • ficheiros de dispositivos
  • driver char
    • inicialização
    • registo
    • abrir, libertar
    • cdev, cdev add, cdev del,...
    • números maiores/menores
    • udev, udevmonitor, udevadm

Operações avançadas do controlador de caracteres

  • ioctl
  • ioctl desbloqueado
  • ioctl compat
  • API do espaço do utilizador
  • API do espaço do kernel
  • ciclo de vida do processo
  • dormir/bloquear
  • dormir/acordar
  • fila de espera
  • rebanho trovejante
  • sondagem/seleção

Depuração do Kernel

  • bug
  • depuração
  • depuração do kernel
    • pesquisa binária com git
    • suporte de depuração do kernel
    • printk syslogd, klogd, loglevels, limite de taxa, níveis de depuração, subsistemas selectivos de depuração
    • depuração através da consulta do debugfs
    • depuração de oops, asserção de oops
    • Chave mágica SysRq
    • kgdb/kdb
    • JTAG

Rastreio

  • gcov
  • lcov
  • oprofile
  • ftrace
    • rastreador nop
    • rastreador de funções
    • rastreador de switch sched
    • traçador de gráficos de funções
    • rastreador dinâmico
  • trace-cmd/kernelshark
  • perf
  • LTTng

Interrupções

  • interrupções vs. polling
  • interrupção
  • secções de programa
  • reentrada
  • eventos
  • manipulador de interrupções
  • tratador de interrupções partilhado
  • fluxo de interrupções
  • controlo de interrupções

Adiamento de trabalho

  • metades superior/inferior
  • softirqs
  • tasklets
  • filas de trabalho
  • interrupções encadeadas

Concorrência

  • região/secção crítica
  • atómica
  • condição de corrida
  • sincronização
  • bloqueio
  • soluções de bloqueio
  • impasse
  • contenção
  • o que bloquear?
  • o que pode ser utilizado?
    • operações atómicas
    • bloqueios de rotação
    • bloqueios spin leitor-escritor
    • semáforo
    • semáforo binário
    • mutex
    • semáforo leitor-escritor
    • variáveis de conclusão
    • bloqueios sequenciais
    • desativar a preempção
    • ordenação e barreiras

Tempo

  • HZ
  • Jiffies
  • atrasos grandes/pequenos
  • temporizadores do kernel

E/S de hardware

  • Portas de E/S
  • Memória de E/S
  • Como lidar com efeitos secundários no acesso a registos?

Utilizador-Kernel Communication

  • put(get)_user()
  • copiar para(de)_utilizador()
  • E/S do kernel
  • mapeamento de memória
  • procfs
  • sysfs
  • debugfs
  • relayfs
  • ligação à rede
  • ioctl

Portabilidade

  • tamanho da palavra
  • tipos opacos
  • char assinado/não assinado
  • alinhamento de dados
  • promoção integral
  • reutilização de código
  • endianess
  • tique do sistema
  • tamanho da página
  • ordenação de instruções
  • SMP/preempção/memória alta

Exceto quando indicado em contrário, o conteúdo e este esboço do curso estão licenciados ao abrigo da Atribuição-Não-Comercial-CompartilhaIgual 4.0 Internacional (CC BY-NC-SA 4.0).

Requisitos

  • Familiaridade básica com a utilização de um sistema GNU/Linux como utilizador final
  • Familiaridade básica com um shell de linha de comando
  • Conhecimentos básicos de espaço do utilizador / desenvolvimento de aplicações
  • Conhecimentos intermédios de programação em C
  • Deve ter participado anteriormente no Embedded GNU/Linux Systems Architecture (fortemente recomendado!) e/ou ter uma boa compreensão dos tópicos aí descritos
 35 Horas

Número de participantes


Preço por Participante

Declaração de Clientes (5)

Próximas Formações Provisórias

Categorias Relacionadas