Einführung in Embedded GNU/Linux Gerätetreiber und Betriebssystemkern (EMBED2)

 

Kursüberblick

Dieses fünftägige Training kombiniert Hands-on Übungen mit Theorie, um grundlegende Konzepte von Gerätetreibern und Kernel-Interna zu illustrieren. Die Hands-on Sessions werden mit freier Software wie dem Yocto Projekt auf einer Zielhardware (z.B. Beagle Bone Black Rev. C http://beagleboard.org/BLACK) durchgeführt. Dies ermöglicht es Ihnen das Kursmaterial mit nach Hause zu nehmen und damit zu arbeiten. Die Konzepte und Befehle, welche notwendig sind um GNU/Linux Gerätetreiber effektiv zu schreiben und einzusetzen werden durch eine Kombination von Theorie und On the job Training beschrieben. Vom Zeitaufwand her ist es sicherlich sinnvoll nicht zu versuchen alles selbst herauszufinden, sondern von einem erfahrenen Trainer zu lernen. Nehmen Sie dazu noch die Fähigkeit Ihre eigenen Embeddded GNU/Linux Gerätetreiber bei Ihren Embedded-Entwicklungsprojekten einzusetzen mit nach Hause.

Zielgruppe

Manager, Projektleiter, Software-, Hardware-, Entwicklungs- und System-Ingenieure, Techniker und Interessierte an der Technologie, die so schnell wie möglich verstehen wollen wie GNU/Linux Gerätetreiber funktionieren.

Voraussetzungen

  • Grundkenntnisse wie man ein GNU/Linux System (z.B. Ubuntu) im User Space verwendet
  • Grundkenntnisse mit dem Umgang der Command Line Shell
  • Grundkenntnisse von User Space/Anwendungsentwicklungen unter GNU/Linux
  • Mittelmäßige C-Programmierkenntnisse
  • Sie sollten Einführung in Embedded GNU/Linux - Systemarchitektur bis Echtzeit (EMBED1) besucht haben. (dringend empfohlen!) ...es sei denn Sie sind mit dem darin vorgetragenen Material schon sehr vertraut.
  • Um dem Training folgen zu können sollten Sie Erfahrung mit GNU/Linux mitbringen (wie man den kernel baut, userspace, root file-system, tools).

Kursziele

Ziel dieses Kurses ist es, die erforderlichen Grundlagen zu vermitteln mainline GNU/Linux Gerätetreiber schreiben zu können. How-tos, Theorie und praktische Übungen gepaart mit Erfahrungsberichten geben Ihnen das nötige Know-How von Anfang an mit der Community zusammenzuarbeiten was nur eines der Erfolgsrezepte ist wenn man seine eigenen GNU/Linux Gerätetreiber schreiben und warten will/darf/muss.

Kursinhalt

Einführung

Kurzer Überblick über die Geschichte von GNU/Linux, Lizenzen, Kernel Versionierung, Kernel Release Zyklus, Kernel trees, Mainline, Kernel Space im Vergleich zu User Space, Mechanismen im Vergleich zu policy, Alternativen zu Kernel Treibern, Echtzeitbetriebssysteme in Vergleich zu Linux

Speicher Management

Virtueller im Vergleich zu Physikalischem Speicher, Speicherallokierung im Kernel: pages, zones, API, slab, kmalloc im Vergleich zu vmalloc

Kernel Patch

Wer schreibt den Kernel?, Lebenszyklus eines Patches, git, Kernel Sourcen, einen Patch erstellen - überprüfen - Fehler beheben - ausliefern, Wie funktionieren Code Audits beim Kernel?

Kernel Module

Kernel Sourcen herunterladen, konfigurieren, bauen, installieren, Gerätetreiber (statisch mit dem Kernel gelinkt, zur Laufzeit geladen), init, Lizenzen, EXPORT SYMBOL GPL, Makefile außerhalb vom Kernel tree, module-init-tools, Module im Kernel tree, Kconfig, LKM Parameterübergabe, sparse

Char Treiber

Architektur, User/Kernel Interface, I/O Subsystem, VFS, sysfs (devices, bus, drivers, classes), kobject, ktype, kset, Linux Kernel Driver Modell, Device files

  • Char Treiber
    • Initialisierung
    • Registrierung
    • Open, Release
    • cdev, cdev add, cdev del,...
    • major/minor numbers
    • udev, udevmonitor, udevadm
Fortgeschrittene Operationen bei Character Treibern

ioctl, unlocked ioctl, compat ioctl, user space API, kernel space API, Lebenszyklus eines Prozesses, sleeping/blocking, sleeping/waking up, wait queue, thundering herd, poll/select

Kernel Debuggen

bug, debugging, Den Kernel debuggen

  • binäre Suche mit git
  • Debug Unterstützung vom Kernel
  • printk syslogd, klogd, loglevels, rate limit, debug levels, debug selective subsystems
  • Debuggen durch Abfragen (querying) debugfs
  • oops Debugging, oops aufrufen
  • Magic SysRq Key
  • kgdb/kdb
  • JTAG (optional)
Tracing
  • gcov
  • lcov
  • oprofile
  • ftrace
    • nop tracer
    • function tracer
    • sched switch tracer (viewer)
    • function graph tracer
    • dynamic tracer
  • perf
  • LTTng
  • Kernel Probes
    • Kprobes
    • JProbes
    • KretProbes
Interrupts

Interrupts im Vergleich zu Polling, interrupt, program sections, reentrancy, events, interrupt handler, shared interrupt handler, interrupt flow, interrupt control

Deferring Work

top/bottom halves, softirqs, tasklets, work queues, kernel thread, threaded interrupts

Concurrency

critical region/section, atomic, race condition, synchronization, locking, locking Lösungen, deadlock, contention, Was soll man beschützen?

  • atomic operations
  • spin locks
  • reader-writer spin locks
  • semaphore
  • binary semaphore
  • mutex
  • reader-writer semaphore
  • completion variables
  • sequential locks
  • RCU
  • disable preemption
  • orderig and barriers
Zeit

HZ, Tick-less Kernel, Jiffies, große/kleine Verzögerungen, Kernel Timer, High-res Timer

Hardware I/O

I/O Ports, I/O Memory, Was macht man gegen sogenannte ”side effects” wenn man Register zugreifen muss?

User-Kernel Kommunikation

put(get) user(), copy to(from) user(), Kernel I/O, memory mapping, procfs, sysfs, debugfs, relayfs, netlink, ioctl

Portierbarkeit

word Größe, opaque Typen, signed/unsigned char, data alignment, integral promotion, Wiederverwendung von Code, endianess, system tick, Pagegröße, instruction ordering, SMP/preemption/high memory

Preise & Trainingsmethoden

Online Training

Dauer
5 Tage

Preis
  • 2.500,– €
Classroom Training

Dauer
5 Tage

Preis
  • Österreich: 2.500,– €

Derzeit gibt es keine Trainingstermine für diesen Kurs.