Course Code: ldd
Duration: 35 hours
Prerequisites:

  • Conhecimento básico sobre o uso de um sistema GNU/Linux como usuário final
  • Conhecimento básico de um shell de linha de comando
  • Conhecimento básico de desenvolvimento em espaço de usuário / aplicação
  • Conhecimento intermediário de programação em C
  • Deve ter participado anteriormente de Arquitetura de Sistemas GNU/Linux Embarcados (fortemente recomendado!) e/ou ter um bom entendimento dos tópicos descritos nesse curso.

Overview:

Descrição

Esta aula de treinamento de 5 dias utiliza exercícios práticos combinados com instrução para ilustrar os conceitos de integridade do kernel GNU/Linux e desenvolvimento de drivers de dispositivo. Foi projetada para colocá-lo atualizado rapidamente. Descrevemos processos, conceitos e comandos necessários para escrever drivers de dispositivo GNU/Linux através de uma combinação de teoria e treinamento prático.

Não reinvente a roda, mas aprenda com um instrutor experiente e leve para casa um conhecimento funcional e a capacidade de usá-lo efetivamente em seu próprio projeto de desenvolvimento embarcado.

Quem deve participar?

Indivíduos com interesse ou responsáveis pelo desenvolvimento ou avaliação do desenvolvimento de drivers de dispositivo GNU/Linux, como engenheiros de software, engenheiros de campo, gerentes (de projeto) e engenheiros de hardware.

Course Outline:

Introdução

  • breve história do GNU/Linux
  • licenciamento
  • versionamento do kernel
  • ciclo de lançamento
  • árvores do kernel
  • mainline
  • kernel vs. espaço de usuário
  • mecanismo vs. política
  • alternativas para drivers 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
  • fonte do kernel
  • criar patch
  • verificar patch
  • corrigir patch
  • distribuir patch
  • código auditado

Módulos do Kernel

  • obter fontes do kernel
  • configurar/compilar/instalar
  • drivers de dispositivo (vinculados estaticamente, carregados em tempo de execução)
  • init/exit
  • licenciamento
  • EXPORT SYMBOL GPL
  • makefile fora da árvore do kernel
  • module-init-tools
  • módulo na árvore do kernel
  • Kconfig
  • passagem de parâmetros
  • sparse

Drivers Char

  • arquitetura
  • interface usuário/kernel
  • subsistema I/O
  • VFS
  • sysfs (dispositivos, barramento, drivers, classes),
  • kobject/ktype/kset
  • modelo de driver do kernel Linux
  • arquivos de dispositivo
  • driver char

    • inicialização
    • registro
    • open, release
    • cdev, cdev_add, cdev_del,...
    • números major/minor
    • udev, udevmonitor, udevadm

Operações Avançadas de Driver Char

  • ioctl
  • ioctl unlocked
  • compat ioctl
  • API de espaço de usuário
  • API de espaço de kernel
  • ciclo de vida do processo
  • sleep/bloqueio
  • sleep/wake up
  • wait queue
  • thundering herd
  • poll/select

Depuração de Kernel

  • depuração
  • depurando o kernel

    • busca binária com git
    • suporte de depuração do kernel
    • printk, syslogd, klogd, loglevels, rate limit, debug levels, debug selective subsystems
    • depuração através da consulta ao debugfs
    • depuração de oops, forçando oops
    • Tecla 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. polling
  • interrupção
  • seções de programa
  • reentrancy
  • eventos
  • manipulador de interrupção
  • manipulador de interrupção compartilhada
  • fluxo de interrupção
  • controle de interrupção

Adiar Trabalho

  • top/bottom halves
  • softirqs
  • tasklets
  • work queues
  • interrupts encadeados

Concorrência

  • região/seção crítica
  • atomic
  • condição de corrida
  • sincronização
  • locking
  • soluções de locking
  • deadlock
  • contention
  • 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 completamento
    • sequential locks
    • desativar preempção
    • ordem e barreiras

Tempo

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

I/O de Hardware

  • I/O Ports
  • I/O Memory
  • Como lidar com efeitos colaterais ao acessar registradores?

Comunicação Usuário-Kernel

  • put(get)_user()
  • copy to(from)_user()
  • Kernel I/O
  • mapeamento de memória
  • procfs
  • sysfs
  • debugfs
  • relayfs
  • netlink
  • ioctl

Portabilidade

  • tamanho de palavra
  • tipos opacos
  • char assinado/não assinado
  • alinhamento de dados
  • promoção inteira
  • reutilização de código
  • endianess
  • tick do sistema
  • tamanho de página
  • ordenação de instruções
  • SMP/preempção/high memory

Exceto onde indicado de outra forma, o conteúdo e este esboço de curso estão licenciados sob Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0).

Sites Published:

United Arab Emirates - Embedded GNU/Linux Kernel Internals and Device Drivers

Qatar - Embedded GNU/Linux Kernel Internals and Device Drivers

Egypt - Embedded GNU/Linux Kernel Internals and Device Drivers

Saudi Arabia - Embedded GNU/Linux Kernel Internals and Device Drivers

South Africa - Embedded GNU/Linux Kernel Internals and Device Drivers

Brasil - Integridade do Kernel GNU/Linux Embarcado e Drivers de Dispositivo

Canada - Embedded GNU/Linux Kernel Internals and Device Drivers

中国 - 嵌入式GNU/Linux内核与设备驱动

香港 - Embedded GNU/Linux Kernel Internals and Device Drivers

澳門 - Embedded GNU/Linux Kernel Internals and Device Drivers

台灣 - Embedded GNU/Linux Kernel Internals and Device Drivers

USA - Embedded GNU/Linux Kernel Internals and Device Drivers

Österreich - Interne Struktur des GNU/Linux-Kernels und Gerätetreiber

Schweiz - Interne Struktur des GNU/Linux-Kernels und Gerätetreiber

Deutschland - Interne Struktur des GNU/Linux-Kernels und Gerätetreiber

Czech Republic - Interní struktura jádra GNU/Linuxu a ovladače zařízení

Denmark - Embedded GNU/Linux Kernel Internals and Device Drivers

Estonia - Embedded GNU/Linux Kernel Internals and Device Drivers

Finland - Embedded GNU/Linux Kernel Internals and Device Drivers

Greece - Εσώτερο Λειτουργικό των Πυρήνων GNU/Linux και Οδηγοί Συσκευών

Magyarország - Beágyazott GNU/Linux Kernel Belső Működése és Eszközmeghajtók

Ireland - Embedded GNU/Linux Kernel Internals and Device Drivers

Luxembourg - Embedded GNU/Linux Kernel Internals and Device Drivers

Latvia - Embedded GNU/Linux Kernel Internals and Device Drivers

España - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Italia - Interni del kernel GNU/Linux e driver di dispositivo

Lithuania - Embedded GNU/Linux Kernel Internals and Device Drivers

Nederland - Inwendige werking van de GNU/Linux-kernel en apparaatstuurprogramma's

Norway - Inne i Linux-kjernen for innbygde systemer og enhetsdrivere

Portugal - Integridade do Kernel GNU/Linux Embarcado e Drivers de Dispositivo

România - Internele Nucleului GNU/Linux și Driverele de Dispozitive

Sverige - Inbyggd GNU/Linux-kärninterna funktioner och enhetsdrivrutiner

Türkiye - Gömülü GNU/Linux Çekirdek İç Yapıları ve Cihaz Sürücüleri

Malta - Embedded GNU/Linux Kernel Internals and Device Drivers

Belgique - Internalités du noyau GNU/Linux et pilotes de périphériques intégrés

France - Internalités du noyau GNU/Linux et pilotes de périphériques intégrés

日本 - 埋め込み GNU/Linux カーネルの内部構造とデバイスドライバ

Australia - Embedded GNU/Linux Kernel Internals and Device Drivers

Malaysia - Embedded GNU/Linux Kernel Internals and Device Drivers

New Zealand - Embedded GNU/Linux Kernel Internals and Device Drivers

Philippines - Embedded GNU/Linux Kernel Internals and Device Drivers

Singapore - Embedded GNU/Linux Kernel Internals and Device Drivers

Thailand - Embedded GNU/Linux Kernel Internals and Device Drivers

Vietnam - Kiến trúc Nhân GNU/Linux Nhúng và Trình điều khiển Thiết bị

India - Embedded GNU/Linux Kernel Internals and Device Drivers

Argentina - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Chile - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Costa Rica - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Ecuador - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Guatemala - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Colombia - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

México - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Panama - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Peru - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Uruguay - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Venezuela - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Polska - Wewnętrzne mechanizmy jądra GNU/Linux i sterowniki urządzeń

United Kingdom - Embedded GNU/Linux Kernel Internals and Device Drivers

South Korea - 임베디드 GNU/리눅스 커널 내부 구조 및 장치 드라이버

Pakistan - Embedded GNU/Linux Kernel Internals and Device Drivers

Sri Lanka - Embedded GNU/Linux Kernel Internals and Device Drivers

Bulgaria - Вградени вътрешни принципи на ядрото GNU/Linux и драйвери на устройства

Bolivia - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Indonesia - Embedded GNU/Linux Kernel Internals and Device Drivers

Kazakhstan - Embedded GNU/Linux Kernel Internals and Device Drivers

Moldova - Internele Nucleului GNU/Linux și Driverele de Dispozitive

Morocco - Embedded GNU/Linux Kernel Internals and Device Drivers

Tunisia - Embedded GNU/Linux Kernel Internals and Device Drivers

Kuwait - Embedded GNU/Linux Kernel Internals and Device Drivers

Oman - Embedded GNU/Linux Kernel Internals and Device Drivers

Slovakia - Embedded GNU/Linux Kernel Internals and Device Drivers

Kenya - Embedded GNU/Linux Kernel Internals and Device Drivers

Nigeria - Embedded GNU/Linux Kernel Internals and Device Drivers

Botswana - Embedded GNU/Linux Kernel Internals and Device Drivers

Slovenia - Embedded GNU/Linux Kernel Internals and Device Drivers

Croatia - Embedded GNU/Linux Kernel Internals and Device Drivers

Serbia - Embedded GNU/Linux Kernel Internals and Device Drivers

Bhutan - Embedded GNU/Linux Kernel Internals and Device Drivers

Nepal - Embedded GNU/Linux Kernel Internals and Device Drivers

Uzbekistan - Embedded GNU/Linux Kernel Internals and Device Drivers

US Government - Embedded GNU/Linux Kernel Internals and Device Drivers