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
Declaração de Clientes (5)
O Edward é um facilitador espetacular
Zibusiso Ncube - Agricatural Research Council
Curso - Ionic 4 and Angular for Developers
Máquina Traduzida
Talvez mais exercícios pudessem ser melhores para aprender, mas o tempo foi demasiado curto
Gianpiero Arico' - Urmet Spa
Curso - Embedded Linux Systems Architecture
Máquina Traduzida
Miguel's knowledge of the subject was extensive. He made the training easy to understand and the flow was balanced; adding on to each section with new features as needed. He covered everything that was asked and answered each and every question thoroughly. It was a very pleasant experience.
Paul Coaton - SEMPCheck Services
Curso - Flutter Development Bootcamp with Dart
That the trainer adapts to our needs
Eduardo Fontecha - ORMAZABAL PROTECTION & AUTOMATION S.L.U.
Curso - The Yocto Project - An Overview - hands-on
The trainer was enthusiastic, kind, and loved the topic