Course Code: ldd
Duration: 35 hours
Prerequisites:

  • Základní zkušenost s používáním systému GNU/Linux jako koncový uživatel
  • Základní povědomí o příkazovém řádku
  • Základní znalost vývoje v uživatelském prostoru / aplikacích
  • Středně pokročilé znalosti programování v C
  • Měl by jste dříve absolvoval kurzu Architektura systémů Embedded GNU/Linux (důrazně doporučeno) a/nebo mít dobré porozumění tématům uvedeným v tomto kurzu

Overview:

Popis

Tento pětidenní školicí kurz kombinuje praktická cvičení s výukou, aby ilustroval koncepty interní struktury jádra GNU/Linuxu a vývoje ovladačů zařízení. Je navržen tak, aby vás rychle seznámil s danou problematikou. Popisujeme procesy, koncepty a příkazy nezbytné pro psaní ovladačů zařízení GNU/Linux prostřednictvím kombinace teorie a praktického školení.

Nevynalézejte kolo znovu, ale učte se od zkušeného trenéra a odneste si funkční znalosti a schopnost je efektivně použít ve vašem vlastním projektu zabudovaného vývoje.

Kdo by měl navštívit?

Lidé s zájmem o vývoj nebo hodnocení vývoje ovladačů zařízení GNU/Linux, kteří jsou za to zodpovědní, jako softwaroví inženýři, fieldoví inženýři, manažeři (projektů), hardware inženýři.

Course Outline:

Úvod

  • rychlá historie GNU/Linux
  • licence
  • verzování jádra
  • cyklus vydávání
  • stromy jádra
  • hlavní větve (mainline)
  • jádro vs. uživatelský prostor
  • mechanismus vs. politika
  • alternativy ovladačů jádra
  • RTOS vs. Linux

Správa paměti

  • virtuální paměť vs. fyzická paměť
  • alokace paměti v jádře
  • stránky
  • zóny
  • API
  • slab allocator

Záplaty jádra

  • životní cyklus
  • git
  • zdrojový kód jádra
  • vytvoření záplaty
  • kontrola záplaty
  • oprava záplaty
  • doručení záplaty
  • auditovaný kód

Moduly jádra

  • stažení zdrojového kódu jádra
  • konfigurace/sestavení/instalace
  • ovladače zařízení (staticky linkované, načítány za běhu)
  • inicializace/odchod
  • licence
  • EXPORT SYMBOL GPL
  • Makefile mimo strom jádra
  • module-init-tools
  • modul v stromu jádra
  • Kconfig
  • předávání parametrů
  • sparse

Ovladače znakových zařízení (Char Drivers)

  • architektura
  • rozhraní uživatel/jádro
  • podsystem I/O
  • VFS (Virtual File System)
  • sysfs (zařízení, sběrnice, ovladače, třídy),
  • kobject/ktype/kset
  • model ovladače linuxového jádra
  • soubory zařízení
  • ovladač znakových zařízení

    • inicializace
    • registrace
    • otevření, uzavření
    • cdev, cdev add, cdev del,...
    • hlavní/mínor čísla
    • udev, udevmonitor, udevadm

Pokročilé operace ovladačů znakových zařízení

  • ioctl
  • unlocked ioctl
  • compat ioctl
  • API uživatelského prostoru
  • API jádra
  • životní cyklus procesu
  • spánek/blokování
  • probuzení z režimu spánku
  • fronta čekání
  • efekt hordy
  • poll/select

Ladění jádra

  • ladění
  • ladění jádra

    • binární vyhledávání pomocí git
    • podpora ladění z jádra
    • printk syslogd, klogd, úrovně logování, omezení rychlosti, ladící úrovně, výběr laděných subsystémů
    • ladění dotováním se na debugfs
    • ladění oops, vyvolání oops
    • kouzelný klíč SysRq
    • kgdb/kdb
    • JTAG

Sledování (Tracing)

  • gcov
  • lcov
  • oprofile
  • ftrace

    • nop tracer
    • function tracer
    • sched switch tracer
    • function graph tracer
    • dynamický tracer
  • trace-cmd/kernelshark
  • perf
  • LTTng

Přerušení

  • přerušení vs. polling
  • přerušení
  • programové sekce
  • reenterance
  • události
  • obslužná rutina přerušení
  • sdílená obslužná rutina přerušení
  • tok přerušení
  • řízení přerušení

Odložení práce

  • horní/dolní polovina
  • softirqs
  • tasklets
  • pracovní fronty
  • vláknová přerušení

Souběžnost (Concurrency)

  • kritická oblast/sekce
  • atomické operace
  • stav závodní podmínky (race condition)
  • synchronizace
  • zamykání
  • řešení zamykání
  • deadlock
  • contendování
  • co zamknout?
  • co lze použít?

    • atomické operace
    • spin locks
    • čtenář-písař spin locks
    • semafor
    • binární semafor
    • mutex
    • čtenář-písař semafor
    • proměnné dokončení
    • sekvenční zámky
    • zakázání přerušení přednostní (preemption)
    • pořadí a bariéry

Čas

  • HZ
  • Jiffies
  • velké/malé zpoždění
  • časovače jádra

Hardware I/O

  • I/O porty
  • Paměť I/O
  • Jak se vypořádat se vedlejšími účinky přístupu k registrům?

Komunikace Uživatelské prostoru - Jádro

  • put(get)_user()
  • copy to(from)_user()
  • Jádrový I/O
  • mapování paměti
  • procfs
  • sysfs
  • debugfs
  • relayfs
  • netlink
  • ioctl

Přenositelnost

  • velikost slova
  • neprůhledné typy
  • signed/unsigned char
  • zarovnání dat
  • integral promotion
  • opětovné použití kódu
  • endianita
  • systémový tik
  • velikost stránky
  • pořadí instrukcí
  • SMP/preemption/high memory

Kromě tam, kde je uvedeno jinak, jsou obsah a tento osnovy kurzu licencovány pod Atribusi-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