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
- GNU/Linux historical overview
- Licensing models
- Kernel versioning schemes
- Release cycles
- Kernel trees
- Mainline development
- Kernel vs. user space interactions
- Mechanism vs. policy separation
- Alternatives to kernel drivers
- RTOS versus Linux
Memory Management
- Virtual versus physical memory
- Kernel memory allocation
- Memory pages
- Memory zones
- Allocation APIs
- Slab allocators
Kernel Patching
- Patch lifecycle
- Git workflow
- Kernel source management
- Creating patches
- Reviewing patches
- Refining patches
- Distributing patches
- Audited code standards
Kernel Modules
- Acquiring kernel sources
- Configuration, build, and installation
- Device drivers (static linking and runtime loading)
- Initialization and exit routines
- Licensing requirements
- EXPORT_SYMBOL_GPL usage
- Out-of-tree Makefiles
- Module initialization tools
- In-tree module integration
- Kconfig configuration
- Parameter passing mechanisms
- Sparse static analysis
Character Drivers
- Architectural design
- User/kernel interface standards
- I/O subsystem overview
- Virtual File System (VFS)
- sysfs (devices, buses, drivers, classes)
- kobject, ktype, and kset structures
- Linux kernel driver model
- Device file management
-
Character driver structure
- Initialization procedures
- Registration processes
- Open and release handlers
- cdev, cdev_add, cdev_del operations
- Major and minor numbers
- udev, udevmonitor, and udevadm utilities
Advanced Character Driver Operations
- ioctl commands
- Unlocked ioctl
- Compat ioctl
- User space APIs
- Kernel space APIs
- Process lifecycle management
- Sleeping and blocking mechanisms
- Wakeup and sleep transitions
- Wait queues
- Thundering herd problem
- Poll and select operations
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
- Oops debugging and triggering oopses
- Magic SysRq Key functionality
- kgdb/kdb usage
- JTAG debugging
Tracing
- gcov coverage
- lcov report generation
- oprofile analysis
-
ftrace
- nop tracer
- Function tracer
- Scheduler switch tracer
- Function graph tracer
- Dynamic tracer
- trace-cmd and kernelshark
- perf tools
- LTTng
Interrupts
- Interrupts versus polling
- Interrupt handling concepts
- Program execution sections
- Reentrancy issues
- Event handling
- Interrupt handlers
- Shared interrupt handlers
- Interrupt flow control
- Interrupt management
Deferring Work
- Top halves and bottom halves
- Soft interrupts (softirqs)
- Tasklets
- Work queues
- Threaded interrupts
Concurrency
- Critical regions and sections
- Atomic operations
- Race conditions
- Synchronization strategies
- Locking mechanisms
- Locking solutions
- Deadlock prevention
- Contention management
- Determining 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 memory barriers
Time Handling
- HZ configuration
- Jiffies counter
- Large and small delays
- Kernel timers
Hardware I/O
- I/O Ports
- I/O Memory
- Managing side effects when accessing registers
User-Kernel Communication
- put_user()/get_user()
- copy_to_user()/copy_from_user()
- Kernel I/O operations
- Memory mapping
- procfs
- sysfs
- debugfs
- relayfs
- Netlink sockets
- ioctl
Portability
- Word size considerations
- Opaque types
- Signed versus unsigned characters
- Data alignment issues
- Integral promotion rules
- Code reuse strategies
- Endianness
- System tick handling
- Page size variations
- Instruction ordering
- SMP, preemption, and high memory
Unless otherwise stated, the content and this course outline are licensed under Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0).
Requirements
- Familiarity with using a GNU/Linux system as an end user
- Comfort with command line shells
- Foundational knowledge of user space and application development
- Intermediate proficiency in C programming
- Completion of Embedded GNU/Linux Systems Architecture is strongly recommended, or a solid grasp of the topics covered therein.
35 Hours
Custom Corporate Training
Training solutions designed exclusively for businesses.
- Customized Content: We adapt the syllabus and practical exercises to the real goals and needs of your project.
- Flexible Schedule: Dates and times adapted to your team's agenda.
- Format: Online (live), In-company (at your offices), or Hybrid.
Price per private group, online live training, starting from 6500 € + VAT*
Contact us for an exact quote and to hear our latest promotions
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.