Course Code: ldd
Duration: 35 hours
Prerequisites:
- Basiskennis van het gebruik van een GNU/Linux-systeem als eindgebruiker
- Basiskennis van een opdrachtregelshell
- Basiskennis van user space-/applicatieontwikkeling
- Midlevel C-programmeervaardigheden
- U moet eerder Embedded GNU/Linux-systeemarchitectuur hebben gevolgd (sterk aanbevolen!) en/of een goed begrip hebben van de daar besproken onderwerpen
Overview:
Omschrijving
In deze vijfdaagse training worden praktische oefeningen gecombineerd met instructie om de concepten van de inwendige werking van de GNU/Linux-kernel en de ontwikkeling van apparaatstuurprogramma's te illustreren. De cursus is ontworpen om u snel op de juiste hoogte te brengen. We beschrijven processen, concepten en commando's die nodig zijn om GNU/Linux-apparaatstuurprogramma's te schrijven, aan de hand van een combinatie van theorie en praktijkopleiding.
Hoef het wiel niet opnieuw uit te vinden; leer van een ervaren trainer en neem een werkende kennis en het vermogen om deze effectief in te zetten in uw eigen embedded ontwikkelproject mee naar huis.
Wie zou moeten deelnemen?
Mensen met interesse in of de taak van het ontwikkelen of evalueren van het ontwikkelen van GNU/Linux-apparaatstuurprogramma's, zoals software-ingenieurs, veldtechnici, (project)managers, hardware-ingenieurs.
Course Outline:
Inleiding
- korte geschiedenis van GNU/Linux
- licenties
- kernelversies
- releasecyclus
- kernel-branches
- mainline
- kernel vs. user space
- mechanisme versus beleid
- alternatieven voor kernel-stuurprogramma's
- RTOS vs. Linux
Geheugenbeheer
- virtueel geheugen vs. fysiek geheugen
- geheugentoewijzing in de kernel
- pagina's
- zones
- API
- slab
Kernelpatch
- levenscyclus
- git
- broncode van de kernel
- patch maken
- patch controleren
- patch repareren
- patch distribueren
- gecontroleerde code
Kernelmodules
- kernelbroncode verkrijgen
- configureren/bouwen/installeren
- apparaatstuurprogramma's (statisch gekoppeld, geladen tijdens runtime)
- init/exit
- licenties
- EXPORT_SYMBOL GPL
- makefile buiten de boom
- module-init-tools
- module in de kernelboom
- Kconfig
- parameters doorgeven
- sparse
Char-stuurprogramma's
- architectuur
- user/kernel-interface
- I/O-subssyteem
- VFS
- sysfs (apparaten, bus, stuurprogramma's, klassen),
- kobject/ktype/kset
- linux kernel driver model
- apparaatbestanden
-
char-stuurprogramma
- initialisatie
- registratie
- open, release
- cdev, cdev add, cdev del,...
- major/minor nummers
- udev, udevmonitor, udevadm
Geavanceerde bewerkingen voor Char-stuurprogramma's
- ioctl
- unlocked ioctl
- compat ioctl
- user space API
- kernel space API
- proceslevenscyclus
- slapen/blokken
- slapen/wakker worden
- wachtrij (wait queue)
- 'thundering herd'-probleem
- poll/select
Kernelfoutopsporing
- foutopsporing
-
de kernel foutsuchen
- binaire zoekopdracht met git
- debugondersteuning vanuit de kernel
- printk syslogd, klogd, logniveaus, rate limit, debugniveaus, debug selectieve subsystemen
- foutopsporing door debugfs te bevragen
- oops-foutopsporing, oops afdwingen
- Magic SysRq-sleutel
- kgdb/kdb
- JTAG
Tracen
- gcov
- lcov
- oprofile
-
ftrace
- nop tracer
- function tracer
- sched switch tracer
- function graph tracer
- dynamische tracer
- trace-cmd/kernelshark
- perf
- LTTng
Interrupts
- interrupts versus polling
- interrupt
- programmacode-secties
- herhaalintrijkheid
- gebeurtenissen
- interrupt-handler
- gedeelde interrupt-handler
- interrupt-flow
- interrupt-beheer
Uitgestelde taken
- top/bottom halves
- softirqs
- tasklets
- work queues
- threaded interrupts
Parallelle verwerking (Concurrency)
- kritieke regio/sectie
- atomair
- race condition
- synchronisatie
- locken
- oplossingen voor locken
- deadlock
- contention
- wat te locken?
-
wat kan worden gebruikt?
- atomaire bewerkingen
- spinlocks
- reader-writer spinlocks
- semaphore
- binary semaphore
- mutex
- reader-writer semaphore
- completion variables
- sequential locks
- preemptie uitschakelen
- volgorde en barriers
Tijd
- HZ
- Jiffies
- lange/korte vertragingen
- kerntimers
Hardware I/O
- I/O-poorten
- I/O-geheugen
- Hoe omgaan met neveneffecten bij het toegang tot registers?
User-Kernel communicatie
- put(get)_user()
- copy to(from)_user()
- Kernel I/O
- geheugenmapping
- procfs
- sysfs
- debugfs
- relayfs
- netlink
- ioctl
draagbaarheid
- woordgrootte
- opaque types
- signed/unsigned char
- datauitlijning
- integral promotion
- codehergebruik
- endianess
- systeemtick
- paginagrootte
- instructievolgorde
- SMP/preemptie/high memory
Tenzij anders vermeld zijn de inhoud en deze cursusoutline gelicentieerd onder Naamsvermelding-NietCommercieel-GelijkDelen 4.0 Internationaal (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