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čů

Privátní školení a termíny na míru

Toto téma je možné zrealizovat pouze jako privátní, a to nejen formou uzavřeného firemního kurzu, ale také jako individuální konzultaci pro jednotlivce.

V případě kurzu na míru je níže uvedená osnova pouze inspirací. Finální obsah vzdělávání, jeho délka i termíny budou přizpůsobeny konkrétním vstupním znalostem, potřebám a cílům účastníků.

Cenovou nabídku vám rádi připravíme na základě vstupů zaslaných e-mailem nebo zadaných prostřednictvím poptávkového formuláře. Cena privátního školení vychází z náročnosti požadované obsahové náplně školení, časového rozsahu a celkového počtu přihlášených osob.

KDE A KDY KURZ PROBÍHÁ?

Kontaktujte nás

S námi máte na výběr: Přijďte na kurz osobně do naší učebny, nebo se ke kurzu připojte online. Pokud preferujete online formu, uveďte prosím do poznámky v objednávce "Připojím se virtuálně".
Více informací k hybridní formě školení naleznete zde.

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%."