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).

Sites Published:

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

中国 - 嵌入式GNU/Linux内核与设备驱动

香港 - 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