Thank you for sending your enquiry! One of our team members will contact you shortly.
Thank you for sending your booking! One of our team members will contact you shortly.
Course Outline
Introduction
- Historical overview of GNU/Linux
- Licensing models
- Kernel versioning schemes
- Release cycles
- Kernel trees
- Mainline development
- Kernel space vs. user space
- Mechanism versus policy
- Alternatives to kernel drivers
- RTOS compared to Linux
Memory Management
- Virtual memory vs. physical memory
- Memory allocation within the kernel
- Pages
- Memory zones
- Application Programming Interfaces (API)
- Slab allocator
Kernel Patches
- Patch lifecycle
- Git usage
- Accessing kernel source code
- Creating patches
- Patch checking
- Patch correction
- Submitting patches
- Audited code practices
Kernel Modules
- Obtaining kernel sources
- Configuring, building, and installing
- Device drivers: static linking vs. runtime loading
- Init and exit functions
- Licensing considerations
- EXPORT_SYMBOL GPL
- Out-of-tree Makefiles
- Module initialization tools
- Adding modules within the kernel tree
- Kconfig system
- Parameter passing
- Sparse static analysis
Character Drivers
- Architectural overview
- User-kernel interface
- I/O subsystem
- Virtual File System (VFS)
- sysfs (devices, bus, drivers, classes)
- kobject, ktype, and kset structures
- Linux kernel driver model
- Device files
-
Character driver implementation
- Initialization
- Registration
- Open and release operations
- cdev, cdev_add, cdev_del
- Major and minor numbers
- udev, udevmonitor, and udevadm tools
Advanced Character Driver Operations
- ioctl
- Unlocked ioctl
- Compat ioctl
- User space API
- Kernel space API
- Process lifecycle management
- Sleeping and blocking mechanisms
- Sleeping and waking up processes
- Wait queues
- Thundering herd problem
- Poll and select
Kernel Debugging
- General debugging techniques
-
Debugging the kernel
- Binary search using Git
- Built-in kernel debug support
- printk, syslogd, klogd, log levels, rate limiting, debug levels, and selective subsystem debugging
- Debugging via debugfs queries
- Oops debugging and generating oopses
- Magic SysRq Key
- kgdb and kdb
- JTAG debugging
Tracing
- gcov
- lcov
- oprofile
-
ftrace
- nop tracer
- Function tracer
- Sched switch tracer
- Function graph tracer
- Dynamic tracer
- trace-cmd and kernelshark
- perf
- LTTng
Interrupts
- Interrupts versus polling
- Interrupt handling
- Program sections
- Reentrancy
- Events
- Interrupt handlers
- Shared interrupt handlers
- Interrupt flow
- Interrupt control
Deferring Work
- Top halves and bottom halves
- Softirqs
- Tasklets
- Work queues
- Threaded interrupts
Concurrency
- Critical regions and sections
- Atomic operations
- Race conditions
- Synchronization strategies
- Locking techniques
- Locking solutions
- Deadlocks
- Contention
- Identifying what to lock
-
Available synchronization primitives
- Atomic operations
- Spinlocks
- Reader-writer spinlocks
- Semaphores
- Binary semaphores
- Mutexes
- Reader-writer semaphores
- Completion variables
- Seqlocks
- Disabling preemption
- Ordering and barriers
Time
- HZ configuration
- Jiffies
- Large and small delays
- Kernel timers
Hardware I/O
- I/O Ports
- I/O Memory
- Handling side effects when accessing registers
User-Kernel Communication
- put_user/get_user
- copy_to_user/copy_from_user
- Kernel I/O
- Memory mapping
- procfs
- sysfs
- debugfs
- relayfs
- Netlink
- ioctl
Portability
- Word size considerations
- Opaque types
- Signed versus unsigned char
- Data alignment
- Integral promotion
- Code reuse strategies
- Endianness
- System tick
- Page size
- Instruction ordering
- SMP, preemption, and 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
- Completion of Embedded GNU/Linux Systems Architecture is strongly recommended, or equivalent understanding of the topics covered therein
35 Hours
Testimonials (3)
Everything is ok.
Adrian Rybka - SEOyon
Course - Flutter Development Bootcamp with Dart
Very usefull additional informations
Grzegorz - Comp S.A.
Course - BLoC Pattern
His knowledge and patience.