Course Code: ldd
Duration: 35 hours
Prerequisites:
- Grundläggande bekantskap med att använda ett GNU/Linux-system som slutanvändare
- Grundläggande bekantskap med ett kommandotolk-gränssnitt
- Grundläggande kunskap om användarutrymme / applikationsutveckling
- Mellanliggande C-programmeringskunskap
- Bör ha deltagit i Inbyggd GNU/Linux-systemarkitektur tidigare (starkt rekommenderat!) och/eller ha god förståelse för de ämnen som presenteras där
Overview:
Beskrivning
Denna femdagars utbildningskurs använder praktiska övningar kombinerat med undervisning för att illustrera koncepten kring GNU/Linux-kärnans interna funktioner och utveckling av enhetsdrivrutiner. Kursen är designad för att snabbt sätta dig upptill speed. Vi beskriver processer, begrepp och kommandon som är nödvändiga för att skriva GNU/Linux-enhetsdrivrutiner genom en kombination av teori och praktikbaserad utbildning.
Behöver inte återuppfinna hjulet, men lära sig av en erfaren lärare och ta hem en fungerande kunskap och förmåga att använda det effektivt i eget inbyggd utvecklingsprojekt.
Vem ska delta?
Personer med intresse eller uppgift att utveckla eller evaluera utvecklingen av GNU/Linux-enhetsdrivrutiner som mjukvaruingenjörer, fälttekniker, (projekt)chefer, hårdvaruingenjörer.
Course Outline:
Introduktion
- snabb historia om GNU/Linux
- licensiering
- kärnversionshantering
- utgivningscykel
- kärnträd
- mainline
- kärna mot användarutrymme
- mekanism kontra policy
- alternativ för kärndrivrutin
- RTOS mot Linux
Minneshantering
- virtuellt minne mot fysiskt minne
- minnesallokering i kärna
- sidor
- zoner
- API
- slab
Kärnpatch
- livscykel
- git
- kärnarkiv
- skapa patch
- kontrollera patch
- korrigera patch
- leverera patch
- granskad kod
Kärnmoduler
- hämta kärnarkiv
- konfigurera/bygg/installera
- enhetsdrivrutiner (statiskt länkade, laddade vid körning)
- init/exit
- licensiering
- EXPORT SYMBOL GPL
- out-of-tree makefil
- module-init-tools
- modul i kärnträd
- Kconfig
- parameteröverföring
- sparse
Char-drivrutiner
- arkitektur
- användar/kärnagränssnitt
- I/O-subsystem
- VFS
- sysfs (enheter, bussar, drivrutiner, klasser),
- kobject/ktype/kset
- linux-kärnans drivrutinsmodell
- enhetsfiler
-
char-drivrutin
- initiering
- registrering
- öppna, stäng
- cdev, cdev add, cdev del,...
- huvud/under-nummer
- udev, udevmonitor, udevadm
Avancerade char-drivrutinsoperationer
- ioctl
- unlocked ioctl
- compat ioctl
- användarutrymmes-API
- kärnutrymmes-API
- processlivscykel
- sova/blockera
- sova/vakna
- väntekö
- thundering herd
- poll/select
Kärnfelsökning
- felsökning
-
felsöka kärnan
- binär sökning med git
- felsökningsstöd från kärna
- printk syslogd, klogd, loggningsnivåer, hastighetsbegränsning, felsökningsnivåer, valfri felsökning av delsystem
- felsökning genom att fråga debugfs
- oops-felsökning, påstå oops
- Magic SysRq-nyckel
- kgdb/kdb
- JTAG
Spårning
- gcov
- lcov
- oprofile
-
ftrace
- nop-spårare
- funktionsspårare
- schemalägningsväxlingsspårare
- funktionsgraf-spårare
- dynamisk spårare
- trace-cmd/kernelshark
- perf
- LTTng
Avbrott
- avbrott kontra polling
- avbrott
- programsektioner
- reentrancy
- händelser
- avbrottsbehandlare
- delad avbrottsbehandlare
- avbrottsflöde
- avbrottskontroll
Uppsättning av arbete
- top/bottom-halvor
- softirqs
- tasklets
- arbetsköer
- trådad avbrott
Samtidig exekvering
- kritiskt område/sektion
- atomärt
- racetillstånd
- synkronisering
- låsning
- låsningslösningar
- dödslås
- konkurrens
- vad ska låsas?
-
vad kan användas?
- atomära operationer
- spin-lås
- läsare-skrivare spin-lås
- semafor
- binär semafor
- mutex
- läsare-skrivare semafor
- fullföljandevärdet
- sekventiella lås
- inaktivera preemption
- ordning och barriärer
Tid
- HZ
- Jiffies
- stora/små förseningar
- kärntimrar
Hårdvara I/O
- I/O-portar
- I/O-minne
- Hur hantera sidoeffekter vid åtkomst till register?
Användar-Kärn-kommunikation
- put(get)_user()
- kopiera till(från)_user()
- Kärn-I/O
- minnesspanning
- procfs
- sysfs
- debugfs
- relayfs
- netlink
- ioctl
Portabilitet
- ordstorlek
- opak typer
- signerade/osignerade char
- datajustering
- integralpromotion
- kodåteranvändning
- endianess
- systemtick
- sidstorlek
- instruktionordning
- SMP/preemption/högt minne
Med undantag för vad som annars anges är innehållet och denna kursplan licensierade under Namngivning-IckeKommersiell-DelaLika 4.0 Internationell (CC BY-NC-SA 4.0).
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