Linux – vývoj embedded ovladačů a jádra (LNXKRN1)

Unixové systémy, Linux - programování

Základní ovladače pro některá zařízení můžete provozovat ve formě programu v uživatelském prostoru. Přesto může nastat chvíle, kdy potřebujete spouštět svůj kód v jádře nebo upravovat existující kód podle potřeb svého projektu. K tomu je potřeba připravit si virtuální stroj nebo cílový hardware a můžeme začít experimentovat.

Linux je tu s námi od roku 1991 a jednotlivé části od té doby prošly mnoha změnami. Nabízí objektově orientovaný subsystém pro ovladače, který umožňuje relativně snadno pracovat se zařízeními ovládanými přes řadiče paměti a I/O, stejně jako dedikované sběrnice jako I2C, SPI, USB nebo PCI Express.

Tento kurz lze objednat v původní variantě s jazykem C. Na požádání lze připravit variantu pro Rust, a pokud nemáte pud sebezáchovy, tak i pro C++. Obvykle pracujeme na architekturách X86-64 nebo ARM64.

TOTO ŠKOLENÍ VÁM POMŮŽE:

  • Seznámit se s fungováním kódu uvnitř jádra operačního systému a subsystémem ovladačů
  • Naučit se vytvářet ovladače a pracovat se sběrnicemi a zařízeními v Linuxu
  • Osvojit si synchronizaci kódu napříč jádry CPU a kódu asynchronních přerušení

KDO BY SE MĚL KURZU ZÚČASTNIT?

  • Vývojáři, kteří vytvářejí embedded produkty založené na linuxových platformách
  • Tvůrci ovladačů zařízení pro hardware vytvářený na míru konkrétnímu projektu
  • Týmy, které se zabývají portováním embedded projektů na linuxové platformy
  • Zájemci o fungování linuxového jádra a ovladačů na všech platformách včetně běžných počítačů

KDE A KDY KURZ PROBÍHÁ?



Tento kurz není vypisován v otevřených termínech pro veřejnost.
Realizujeme jej výhradně jako školení na klíč, pro které může být zde uvedená osnova inspirací. Finální obsah, časový rozsah, termíny i forma realizace jsou vždy přizpůsobeny konkrétním požadavkům zadavatele. Školit můžeme také v angličtině.

Poptat kurz na míru

Náplň kurzu:

Skrýt detaily
  • Inicializace jádra Linuxu
    1. Bootovací obraz jádra a device tree
    2. Kořenový souborový systém a proces init
    3. Zaváděcí moduly a initramfs
  • Zřízení laboratorního prostředí
    1. Prostředí virtuálního stroje
    2. Buildovací prostředí a nástroje
    3. Spuštění prvního kódu v jádře
  • Omezení a specifika kódu v jádře
    1. Neexistence stabilního API pro ovladače
    2. Údržba kódu jádra v čase
    3. Specifika návrhu kódu jádra
  • Alternativy v uživatelském prostoru
    1. Ovladače zařízení v uživatelském prostoru
    2. Stabilní API směrem k uživatelskému prostoru
    3. Volnější volba programovacího jazyka
  • Sestavování modulů jádra
    1. Inicializace a finalizace
    2. Získání a uvolnění prostředků
    3. Registrace struktur operací
  • Vytváření rozhraní pro uživatelský prostor
    1. Virtuální souborový systém
    2. Operace čtení, zápisu a ioctl
    3. Úloha procfs, sysfs a debugfs
  • Zpřístupnění znakových zařízení
    1. Globální číselník znakových zařízení
    2. Dynamická alokace miscdev
    3. Publikování zařízení v devtmpfs
  • Mechanika hardwarových ovladačů
    1. Model ovladačů zařízení v Linuxu
    2. Inicializace a finalizace
    3. Získání a uvolnění prostředků
  • Reprezentace hardwarových sběrnic
    1. Zařízení dostupná CPU instrukcím
    2. Sběrnice bez výčtu zařízení (I2C, SPI, …)
    3. Chytré sběrnice s výčtem a identifikací (USB, PCI, …)
  • Propojení uživatelského prostoru s hardwarem
    1. Hardwarové zařízení prezentované aplikacím
    2. Znaková zařízení a bloková vrstva
    3. Napojení na specializované subsystémy
  • Návrhové vzory modulů jádra
    1. Rollback neúspěšné inicializace
    2. Zpětná volání s container_of
    3. Předalokované buffery a FIFO
  • Infrastruktura dynamického načítání modulů
    1. Postup načítání a uvolňování
    2. Závislosti symbolů mezi moduly
    3. Správa prostředků a blokované odstranění
  • Mechanismy zamykání a čekání
    1. Mutexy a práce s kernelovými vlákny
    2. Spinlocky, přerušení a synchronizace
    3. Časovače a fronty s čekáním
  • Podpora desek ARM
    1. Device & board files
    2. Binární device tree
    3. Pinctrl, GPIO a přerušení
  • Diskuse o vývoji jádra
    1. Rozdíly oproti bare-metal programování
    2. Reálný čas a výkonnostní aspekty
    3. Právní, komunitní a PR otázky
Předpokládané znalosti:
Dobrá znalost programování v jazyce C.
Časový rozvrh:
5 dní (9:00hod. - 17:00hod.)

Vybrané zákaznické reference

Thermo Fisher Scientific Brno s.r.o., Petr K.
Linux – vývoj embedded ovladačů a jádra ( LNXKRN1)
"Dobry den, nas skolitel byl velice dobre pripraven a zodpovedel vsechny dotazy."
RETIA, a.s., Michal D.
Linux – vývoj embedded ovladačů a jádra ( LNXKRN1)
"Dobrá diskuse, se školením jsem spokojen."
ŠKODA DIGITAL s.r.o., Petr H.
Linux – vývoj embedded ovladačů a jádra ( LNXKRN1)
"Školení bylo směrované přesně na míru tomu, co jsem si od školení sliboval, že se dozvím, takže za mě 100%."