Course Code: ldd
Duration: 35 hours
Prerequisites:
- Alapvető ismeretek a GNU/Linux rendszer használatáról végfelhasználóként
- Alapvető ismeretek a parancssori felület használatáról
- Alapvető ismeretek a felhasználói tér / alkalmazásfejlesztés területén
- Középfokú C programozási ismeretek
- Ajánlott, hogy részt vettél a Beágyazott GNU/Linux Rendszerarchitektúra képzésen (erősen ajánlott!) és/vagy jól ismered az ott vázolt témaköröket
Overview:
Leírás
Ez az 5 napos képzés gyakorlati gyakorlatok és előadások kombinációján keresztül mutatja be a GNU/Linux kernel belső működését és az eszközmeghajtók fejlesztését. Célja, hogy gyorsan felzárkóztasson. A képzés során a GNU/Linux eszközmeghajtók írásához szükséges folyamatokat, fogalmakat és parancsokat mutatjuk be, elméleti ismeretek és gyakorlati munka kombinációjával.
Ne találd fel újra a spanyolviaszt, hanem tanulj egy tapasztalt oktatótól, és szerezz működő tudást, amelyet hatékonyan alkalmazhatsz saját beágyazott fejlesztési projektjeidben.
Kiknek ajánljuk?
Azoknak, akiket érdekel vagy akiknek feladata a GNU/Linux eszközmeghajtók fejlesztése vagy értékelése, például szoftvermérnökök, terepmérnökök, (projekt)menedzserek, hardvermérnökök.
Course Outline:
Bevezetés
- A GNU/Linux rövid története
- Licencelés
- Kernel verziószámozás
- Kiadási ciklus
- Kernel fák
- Főág
- Kernel vs. felhasználói tér
- Mechanizmus vs. politika
- Kernel meghajtó alternatívák
- RTOS vs. Linux
Memóriakezelés
- Virtuális memória vs. fizikai memória
- Memóriafoglalás a kernelben
- Lapok
- Zónák
- API
- Slab
Kernel Patch
- Életciklus
- Git
- Kernel forrás
- Patch készítése
- Patch ellenőrzése
- Patch javítása
- Patch elküldése
- Ellenőrzött kód
Kernel Modulok
- Kernel források beszerzése
- Konfigurálás/építés/telepítés
- Eszközmeghajtók (statikusan linkelt, futásidőben betöltött)
- Init/exit
- Licencelés
- EXPORT SYMBOL GPL
- Out of tree makefile
- module-init-tools
- Modul a kernel fában
- Kconfig
- Paraméterátadás
- Sparse
Karakteres Meghajtók
- Architektúra
- Felhasználói/kernel interfész
- I/O alrendszer
- VFS
- Sysfs (eszközök, busz, meghajtók, osztályok),
- kobject/ktype/kset
- Linux kernel meghajtó modell
- Eszközfájlok
-
Karakteres meghajtó
- Inicializálás
- Regisztráció
- Open, release
- cdev, cdev add, cdev del,...
- Major/minor számok
- udev, udevmonitor, udevadm
Speciális Karakteres Meghajtó Műveletek
- ioctl
- Unlocked ioctl
- Compat ioctl
- Felhasználói tér API
- Kernel tér API
- Folyamat életciklus
- Alvás/blokkolás
- Alvás/felébredés
- Várakozási sor
- Thundering herd
- Poll/select
Kernel Hibakeresés
- Hibakeresés
-
Kernel hibakeresése
- Bináris keresés git-tel
- Hibakeresési támogatás a kernelből
- printk syslogd, klogd, naplószintek, sebességkorlát, hibakeresési szintek, kiválasztott alrendszerek hibakeresése
- Hibakeresés debugfs lekérdezéssel
- Oops hibakeresés, oops kiváltása
- Magic SysRq Key
- kgdb/kdb
- JTAG
Nyomkövetés
- gcov
- lcov
- oprofile
-
ftrace
- Nop nyomkövető
- Funkció nyomkövető
- Sched switch nyomkövető
- Funkciógráf nyomkövető
- Dinamikus nyomkövető
- trace-cmd/kernelshark
- perf
- LTTng
Megszakítások
- Megszakítások vs. lekérdezés
- Megszakítás
- Programrészek
- Újrafelhasználhatóság
- Események
- Megszakítási kezelő
- Megosztott megszakítási kezelő
- Megszakítási folyam
- Megszakítási vezérlés
Munka Elhalasztása
- Felső/alsó felek
- Softirqs
- Tasklets
- Munka sorok
- Szálas megszakítások
Párhuzamosság
- Kritikus régió/szakasz
- Atomikus
- Versenyhelyzet
- Szinkronizáció
- Zárolás
- Zárolási megoldások
- Holtpont
- Versengés
- Mit kell zárolni?
-
Mit lehet használni?
- Atomikus műveletek
- Spin lockok
- Olvasó-író spin lockok
- Szemafor
- Bináris szemafor
- Mutex
- Olvasó-író szemafor
- Befejezési változók
- Szekvenciális lockok
- Preemptáció letiltása
- Sorrend és korlátok
Idő
- HZ
- Jiffies
- Nagy/kis késések
- Kernel időzítők
Hardver I/O
- I/O Portok
- I/O Memória
- Hogyan kezeljük a regiszterek elérésének mellékhatásait?
Felhasználói-Kernel Kommunikáció
- put(get)_user()
- copy to(from)_user()
- Kernel I/O
- Memórialeképezés
- Procfs
- Sysfs
- Debugfs
- Relayfs
- Netlink
- ioctl
Hordozhatóság
- Szó méret
- Átlátszatlan típusok
- Előjeles/előjel nélküli char
- Adatigazítás
- Egész számok promóciója
- Kód újrafelhasználás
- Bájtsorrend
- Rendszer ketyegés
- Lapméret
- Utasítások sorrendje
- SMP/preemptáció/magas memória
Ahol másként nincs jelezve, a tartalom és a tanfolyami vázlat a Creative Commons Nevezd meg! - Ne add el! - Így add tovább! 4.0 Nemzetközi (CC BY-NC-SA 4.0) licenc alatt áll.
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
香港 - 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