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
- A brief history of GNU/Linux
- Licensing
- Kernel versioning
- Release cycles
- Kernel trees
- Mainline
- Kernel versus user space
- Mechanism versus policy
- Alternatives to kernel drivers
- RTOS versus Linux
Memory Management
- Virtual memory versus physical memory
- Memory allocation in the kernel
- Pages
- Zones
- APIs
- Slab
Kernel Patches
- Lifecycle
- Git
- Kernel source
- Creating patches
- Checking patches
- Fixing patches
- Submitting patches
- Audited code
Kernel Modules
- Obtaining kernel sources
- Configuring, building, and installing
- Device drivers (statically linked or loaded at runtime)
- Init and exit functions
- Licensing
- EXPORT_SYMBOL GPL
- Out-of-tree Makefiles
- Module-init-tools
- Modules within the kernel tree
- Kconfig
- Parameter passing
- Sparse
Character Drivers
- Architecture
- User and kernel interfaces
- I/O subsystem
- VFS
- sysfs (devices, bus, drivers, classes)
- kobject, ktype, and kset
- Linux kernel driver model
- Device files
-
Character drivers
- Initialization
- Registration
- Open and release
- cdev, cdev_add, cdev_del, and others
- Major and minor numbers
- udev, udevmonitor, and udevadm
Advanced Character Driver Operations
- ioctl
- Unlocked ioctl
- Compat ioctl
- User space API
- Kernel space API
- Process lifecycle
- Sleeping and blocking
- Sleeping and waking up
- Wait queues
- Thundering herd
- Poll and select
Kernel Debugging
- Debugging basics
-
Debugging the kernel
- Binary search with Git
- Debugging support provided by the kernel
- printk, syslogd, klogd, log levels, rate limiting, debug levels, and selective subsystem debugging
- Debugging via debugfs queries
- Oops debugging and asserting oops
- Magic SysRq key
- kgdb and kdb
- JTAG
Tracing
- gcov
- lcov
- oprofile
-
ftrace
- No-op tracer
- Function tracer
- Schedule switch tracer
- Function graph tracer
- Dynamic tracer
- trace-cmd and kernelshark
- perf
- LTTng
Interrupts
- Interrupts versus polling
- Interrupts
- Program sections
- Reentrancy
- Events
- Interrupt handlers
- Shared interrupt handlers
- Interrupt flow
- Interrupt control
Deferring Work
- Top and bottom halves
- Softirqs
- Tasklets
- Work queues
- Threaded interrupts
Concurrency
- Critical regions and sections
- Atomic operations
- Race conditions
- Synchronization
- Locking
- Locking solutions
- Deadlocks
- Contention
- What to lock?
-
What can be used?
- Atomic operations
- Spin locks
- Reader-writer spin locks
- Semaphores
- Binary semaphores
- Mutexes
- Reader-writer semaphores
- Completion variables
- Sequential locks
- Disabling preemption
- Ordering and barriers
Time
- HZ
- 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() and get_user()
- copy_to_user() and copy_from_user()
- Kernel I/O
- Memory mapping
- procfs
- sysfs
- debugfs
- relayfs
- Netlink
- ioctl
Portability
- Word size
- Opaque types
- Signed and unsigned char
- Data alignment
- Integral promotion
- Code reuse
- Endianness
- System tick
- Page size
- Instruction ordering
- SMP, preemption, and high memory
Unless otherwise noted, the 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 or application development
- Intermediate C programming knowledge
- Attendance at Embedded GNU/Linux Systems Architecture is strongly recommended beforehand, or you should have a solid understanding of the topics covered in that course
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.