Course Outline
Introduction
- quick history of GNU/Linux
 - licensing
 - kernel versioning
 - release cycle
 - kernel trees
 - mainline
 - kernel vs. user space
 - mechanism vs. policy
 - kernel driver alternatives
 - RTOS vs. Linux
 
Memory Management
- Virtual memory vs. physical memory
 - memory allocation in kernel
 - pages
 - zones
 - API
 - slab
 
Kernel Patch
- life cycle
 - git
 - kernel source
 - create patch
 - check patch
 - fix patch
 - ship patch
 - audited code
 
Kernel Modules
- get kernel sources
 - configure/build/install
 - device drivers (statically linked, loaded at runtime)
 - init/exit
 - licensing
 - EXPORT SYMBOL GPL
 - out of tree makefile
 - module-init-tools
 - module in kernel tree
 - Kconfig
 - parameter passing
 - sparse
 
Char Drivers
- architecture
 - user/kernel interface
 - I/O subsystem
 - VFS
 - sysfs (devices, bus, drivers, classes),
 - kobject/ktype/kset
 - linux kernel driver model
 - device files
 - char driver
- initialization
 - registration
 - open, release
 - cdev, cdev add, cdev del,...
 - major/minor numbers
 - udev, udevmonitor, udevadm
 
 
Advanced Charachter Driver Operations
- ioctl
 - unlocked ioctl
 - compat ioctl
 - user space API
 - kernel space API
 - process lifecycle
 - sleeping/blocking
 - sleeping/waking up
 - wait queue
 - thundering herd
 - poll/select
 
Kernel Debugging
- bug
 - debugging
 - debugging the kernel
- binary search with git
 - debug support from kernel
 - printk syslogd, klogd, loglevels, rate limit, debug levels, debug selective subsystems
 - debugging by querying debugfs
 - oops debugging, asserting oops
 - Magic SysRq Key
 - kgdb/kdb
 - JTAG
 
 
Tracing
- gcov
 - lcov
 - oprofile
 - ftrace
- nop tracer
 - function tracer
 - sched switch tracer
 - function graph tracer
 - dynamic tracer
 
 - trace-cmd/kernelshark
 - perf
 - LTTng
 
Interrupts
- interrupts vs. polling
 - interrupt
 - program sections
 - reentrancy
 - events
 - interrupt handler
 - shared interrupt handler
 - interrupt flow
 - interrupt control
 
Deferring Work
- top/bottom halves
 - softirqs
 - tasklets
 - work queues
 - threaded interrrupts
 
Concurrency
- critical region/section
 - atomic
 - race condition
 - synchronization
 - locking
 - locking solutions
 - deadlock
 - contention
 - what to lock?
 - what can be used?
- atomic operations
 - spin locks
 - reader-writer spin locks
 - semaphore
 - binary semaphore
 - mutex
 - reader-writer semaphore
 - completion variables
 - sequential locks
 - disable preemption
 - orderig and barriers
 
 
Time
- HZ
 - Jiffies
 - big/small delays
 - kernel timers
 
Hardware I/O
- I/O Ports
 - I/O Memory
 - How to deal with side effects accessing registers?
 
User-Kernel Communication
- put(get)_user()
 - copy to(from)_user()
 - Kernel I/O
 - memory mapping
 - procfs
 - sysfs
 - debugfs
 - relayfs
 - netlink
 - ioctl
 
Portability
- word size
 - opaque types
 - signed/unsigned char
 - data alignment
 - integral promotion
 - code reuse
 - endianess
 - system tick
 - page size
 - instruction ordering
 - SMP/preemption/high memory
 
Except where otherwise noted content and this course outline are licensed under Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0).
Requirements
- Basic familiarity with using a GNU/Linux system as an end user
 - Basic familiarity with a command line shell
 - Basic knowledge of user space / application development
 - Intermediate C programming knowledge
 - Should have attended Embedded GNU/Linux Systems Architecture before (strongly recommended!) and/or have a good understanding of the topics outlined there
 
Testimonials (5)
Very usefull additional informations
Grzegorz - Comp S.A.
Course - BLoC Pattern
Edward is an awesome facilitator
Zibusiso Ncube - Agricatural Research Council
Course - Ionic 4 and Angular for Developers
Miguel's knowledge of the subject was extensive. He made the training easy to understand and the flow was balanced; adding on to each section with new features as needed. He covered everything that was asked and answered each and every question thoroughly. It was a very pleasant experience.
Paul Coaton - SEMPCheck Services
Course - Flutter Development Bootcamp with Dart
That the trainer adapts to our needs
Eduardo Fontecha - ORMAZABAL PROTECTION & AUTOMATION S.L.U.
Course - The Yocto Project - An Overview - hands-on
The trainer was enthusiastic, kind, and loved the topic