Linux – Embedded Driver and Kernel Development (LNXKRN1)
Unix-like systems, Linux - programming
Many simple drivers run as applications in user space, but sometimes you must run code inside the kernel or modify existing kernel sources to meet project needs. Set up a virtual machine or real target hardware to begin practical experiments.
Linux evolved since 1991 and provides an object-like driver model to work with memory and I/O controllers and dedicated buses such as I2C, SPI, USB or PCI Express. The course covers implementations in C, with optional Rust or C++ tracks and targets x86-64 or ARM64.
Location, current course term
Contact us
The course:
Hide detail
-
Kernel initialization
-
Kernel boot image and the device tree
-
Root filesystem and the init process
-
Loadable modules and initramfs
-
Setting up the lab environment
-
Virtual machine environment
-
Build environment and tooling
-
Running your first kernel code
-
Constraints and specifics of kernel code
-
No stable driver API guarantees
-
Long-term maintenance of kernel code
-
Design specifics for kernel-space code
-
User-space alternatives
-
Device drivers running in user space
-
More stable APIs toward user space
-
Wider choice of programming languages
-
Building kernel modules
-
Initialization and cleanup
-
Acquiring and releasing resources
-
Registering operation structures
-
Creating user-space interfaces
-
Virtual filesystem interfaces
-
Read, write and ioctl operations
-
Roles of procfs, sysfs and debugfs
-
Exposing character devices
-
Global character device numbering
-
Dynamic miscdev allocation
-
Publishing devices via devtmpfs
-
Hardware driver mechanics
-
Linux device driver model
-
Initialization and teardown flows
-
Resource acquisition and release
-
Representing hardware buses
-
Devices accessed by CPU instructions
-
Buses without enumeration (I2C, SPI, …)
-
Smart buses with enumeration (USB, PCI, …)
-
Connecting user space with hardware
-
Presenting hardware devices to applications
-
Character devices and the block layer
-
Integration with specialized subsystems
-
Kernel module design patterns
-
Rollback on failed initialization
-
Callbacks using
container_of
-
Preallocated buffers and FIFOs
-
Dynamic module loading infrastructure
-
Module loading and unloading steps
-
Symbol dependencies between modules
-
Resource management and blocked removal
-
Locking and waiting mechanisms
-
Mutexes and working with kernel threads
-
Spinlocks, interrupts and synchronization
-
Timers and wait queues
-
Support for ARM boards
-
Device and board files
-
Binary device tree
-
Pinctrl, GPIO and interrupts
-
Discussion about kernel development
-
Differences vs. bare-metal programming
-
Real-time and performance considerations
-
Legal, community and PR aspects
-
Assumed knowledge:
-
Good knowledge of C programming.
-
Schedule:
-
5 days (9:00 AM - 5:00 PM )
-
Language:
-
Vybrané zákaznické reference
Thermo Fisher Scientific Brno s.r.o., Petr K.
Linux – Embedded Driver and Kernel Development (
LNXKRN1)
"Dobry den,
nas skolitel byl velice dobre pripraven a zodpovedel vsechny dotazy."
RETIA, a.s., Michal D.
Linux – Embedded Driver and Kernel Development (
LNXKRN1)
"Dobrá diskuse, se školením jsem spokojen."
ŠKODA DIGITAL s.r.o., Petr H.
Linux – Embedded Driver and Kernel Development (
LNXKRN1)
"Školení bylo směrované přesně na míru tomu, co jsem si od školení sliboval, že se dozvím, takže za mě 100%."