Course Code: ldd
Duration: 35 hours
Prerequisites:
- Grunnleggende kjennskap til bruk av et Linux-system som sluttbruker
- Grunnleggende kjennskap til et kommandolinjeskall
- Grunnleggende kunnskap om utvikling i brukerspace / applikasjonsutvikling
- Mellomnivå kunnskap om C-programmering
- Bør ha deltatt på Arkitektur for innbygde Linux-systemer før (sterkt anbefalt!) og/eller ha god forståelse for de emnene som behandles der
Overview:
Beskrivelse
I denne femdagers treningsklassen kombineres praktiske øvelser med undervisning for å illustrere konseptene rundt Linux-kjernens indre struktur og utvikling av enhetsdrivere. Kurset er designet for å gi deg rask innsikt. Vi gjennomgår prosesser, konsepter og kommandoer som er nødvendige for å skrive Linux-enhetsdrivere, ved hjelp av en blanding av teori og hands-on trening.
Ikki oppfinne hjulet på nytt, men lær av en erfaringsfylt instruktør og gå hjem med kunnskapen og evnen til å bruke den effektivt i dine egne innbygde utviklingsprosjekter.
For hvem?
Personer med interesse for eller oppgaver knyttet til utvikling eller evaluering av Linux-enhetsdrivere, for eksempel programvareingeniører, feltteknikere, (prosjekt-)ledere og maskinvareingeniører.
Course Outline:
Introduksjon
- Rask historie om Linux
- Lisensiering
- Versjonering av kjernen
- Utgivelsessyklus
- Kjernetrær
- Hovedgren (mainline)
- Kjernemodus kontra brukerspace
- Mekanisme kontra politikk
- Alternativer for kjerekjøreprogrammer
- RTOS vs. Linux
Minnehåndtering
- Virtuell minne kontra fysisk minne
- Minneallokering i kjernen
- Sider (pages)
- Soner (zones)
- API
- Slab-allocator
Kjernelapper (Kernel Patches)
- Livssyklus
- git
- Kjerekildekode
- Lage lapp (patch)
- Sjekk lapp
- Fiks lapp
- Lever lapp
- Kodesjekk og godkjenning
Kjernelmoduler
- Hente kjerekildekode
- Konfigurere / bygge / installere
- Enhetsdrivere (statisk sammenkoblet, lastes ved kjøretid)
- init / exit
- Lisensiering
- EXPORT_SYMBOL GPL
- Makefile for moduler utenfor trestrukturen (out of tree)
- module-init-tools
- Modul i kjernens trestruktur
- Kconfig
- Parameteroverføring
- sparse (statiske analyseverktøy)
Karakterdrivere (Char Drivers)
- Arkitektur
- Bruker/kjerne-grensesnitt
- I/O-underystemet
- VFS (Virtual File System)
- sysfs (enheter, busses, drivere, klasser),
- kobject/ktype/kset
- Linux-kjernens drivermodell
- Enhetsfiler
-
Karakterdriver
- Initialisering
- Registrering
- open, release
- cdev, cdev add, cdev del,…
- Hoved-– og undertall
- udev, udevmonitor, udevadm
Avanserte operasjoner for karakterdrivere
- ioctl
- unlocked ioctl
- compat ioctl
- Brukerspace-API
- Kjernespace-API
- Prosesslivssyklus
- Sperre/blokkere
- Sove/våkne
- Ventekø (wait queue)
- Thundering herd-problemet
- poll/select
Kjernedegging (Kernel Debugging)
- Feilsøking
-
Feilsøke kjernen
- Binærsøking med git
- Feilsøkestøtte fra kjernen
- printk syslogd, klogd, loggnivåer, hastighetsbegrensning, feilsøkningsnivåer, selektiv feilsøking av underystemer
- Feilsøking ved å hente data fra debugfs
- Oops-feilsøking, simulere Oops
- Magic SysRq-tasten
- kgdb/kdb
- JTAG
Sporingsverktøy (Tracing)
- gcov
- lcov
- oprofile
-
ftrace
- nop-tracer
- funksjonstracer
- sched switch-tracer
- function graph-tracer
- dynamisk tracer
- trace-cmd/kernelshark
- perf
- LTTng
Interrupper
- Interrupper kontra polling
- Interruppsprosessen
- Programseksjoner
- Reentrancy
- Hendelser
- Interruppsbehandler
- Delt interruppsbehandler
- Interruppsflyt
- Interruppskontroll
Utsatt arbeid (Deferring Work)
- top/bottom halves
- softirqs
- tasklets
- arbeidskøer (work queues)
- trådede interrupper
Konkurransesituasjoner (Concurrency)
- Kritisk område
- Atomiske operasjoner
- Konkurranseforhold (race condition)
- Synkronisering
- Låsing
- Låseløsninger
- Deadlock
- Contention
- Hva skal låses?
-
Hva kan brukes?
- atomiske operasjoner
- spin locks
- leser-skriver spin locks
- semafork
- binær semafork
- mutex
- leser-skriver semafork
- fullføringsvariabler (completion variables)
- sekvensielle låser
- deaktivere preempting
- rekkefølge og barriärer
Tid
- HZ
- Jiffies
- store/små forsinkelser
- kjernetimere
Maskinvare-I/O
- I/O-poter
- I/O-minne
- Hvordan håndtere bivirkninger ved tilgang til registre?
Kommunikasjon mellom bruker og kjerne
- put(get)_user()
- copy to(from)_user()
- Kjerne-I/O
- minnekartlegging
- procfs
- sysfs
- debugfs
- relayfs
- netlink
- ioctl
Bærekraft (Portability)
- Ordstørrelse (word size)
- Opaque typer
- signerte/usignerte char
- Datajustering (data alignment)
- Integral opprykking (integral promotion)
- Gjenbruk av kode
- Endianess
- Systemticking
- Sidestørrelse
- Instruksjonsrekkefølge
- SMP/preempting/høyt minne
Med mindre annet er oppgitt, er innholdet og dette kursoppsettet lisensiert under Creative Commons Erkjennelse-IkkeKommerSiell-DelPåLignendeVilkår 4.0 internasjonale (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