Programování linuxového jádra (LNXPR3)
Unixové systémy, Linux - programování
Přijďte si vyzkoušet, jaké to je psát kód, který poběží jako součást jádra operačního systému. Nestačí vám psát kód běžící v uživatelském prostoru? Potřebujete některé věci z důvodu výkonu přesunout do Linuxového jádra? Chcete si psát vlastní mechanismy pro komunikaci mezi procesy či vlákny? Efektivně komunikovat s periferiemi na různých sběrnicích? Psát si vlastní hardwarové drivery? Nebo jenom porozumět fungování linuxového jádra?
Privátní školení a termíny na míru
Toto téma je možné zrealizovat pouze jako privátní, a to nejen formou uzavřeného firemního kurzu, ale také jako individuální konzultaci pro jednotlivce.
V případě kurzu na míru je níže uvedená osnova pouze inspirací. Finální obsah vzdělávání, jeho délka i termíny budou přizpůsobeny konkrétním vstupním znalostem, potřebám a cílům účastníků.
Cenovou nabídku vám rádi připravíme na základě vstupů zaslaných e-mailem nebo zadaných prostřednictvím poptávkového formuláře. Cena privátního školení vychází z náročnosti požadované obsahové náplně školení, časového rozsahu a celkového počtu přihlášených osob.
KDE A KDY KURZ PROBÍHÁ?
Kontaktujte nás
S námi
máte na výběr: Přijďte na
kurz osobně do naší učebny, nebo se ke kurzu
připojte online. Pokud preferujete online formu, uveďte prosím do poznámky v objednávce "Připojím se virtuálně".
Více informací k hybridní formě školení
naleznete zde.
Náplň kurzu:
Skrýt detaily
-
Introduction to the Linux kernel
-
Kernel features
-
Understanding the development process
-
Legal constraints with device drivers
-
Kernel user interface (/proc and /sys)
-
Userspace device drivers
-
Kernel sources
-
Specifics of Linux kernel development
-
Coding standards
-
Retrieving Linux kernel sources
-
Tour of the Linux kernel sources
-
Kernel source code browsers: cscope, Kscope, Linux Cross Reference (LXR)
-
Lab - Kernel sources
-
Making searches in the Linux kernel sources: looking for C definitions, for definitions of kernel configuration parameters, and for other kinds of information
-
Using the Unix command line and then kernel source code browsers
-
Configuring, compiling and booting the Linux kernel
-
Kernel configuration
-
Native and cross-compilation. Generated files
-
Booting the kernel. Kernel booting parameters
-
Lab - Kernel configuration, cross compiling and booting
-
Configuring, cross-compiling and booting a Linux kernel
-
Linux kernel modules
-
Linux device drivers
-
A simple module
-
Programming constraints
-
Loading, unloading modules
-
Module dependencies
-
Adding sources to the kernel tree
-
Lab - Writing modules
-
Write a kernel module with several capabilities
-
Access kernel internals from your module
-
Setup the environment to compile it
-
Linux device model
-
Understand how the kernel is designed to support device drivers
-
The device model
-
Binding devices and drivers
-
Platform devices, Device Tree
-
Interface in userspace: /sys
-
Lab - Linux device model for an I2C driver
-
Implement a driver that registers as an I2C driver
-
Modify the Device Tree to list an I2C device
-
Get the driver called when the I2C device is enumerated at boot time
-
Introduction to the I2C API
-
The I2C subsystem of the kernel
-
Details about the API provided to kernel drivers to interact with I2C devices
-
Pin muxing
-
Understand the pinctrl framework of the kernel
-
Understand how to configure the muxing of pins
-
Lab - Communicate with the Nunchuk over I2C
-
Configure the pin muxing for the I2C bus used to communicate with the Nunchuk
-
Extend the I2C driver started in the previous lab to communicate with the Nunchuk via I2C
-
Kernel frameworks
-
Block vs. character devices
-
Interaction of userspace applications with the kernel
-
Details on character devices, file_operations, ioctl(), etc.
-
Exchanging data to/from userspace
-
The principle of kernel frameworks
-
The input subsystem
-
Principle of the kernel input subsystem
-
API offered to kernel drivers to expose input devices capabilities to userspace application
-
Userspace API offered by the input subsystem
-
Lab - Expose the Nunchuk functionality to userspace
-
Extend the Nunchuk driver to expose the Nunchuk features to userspace applications, as a input device.
-
Test the operation of the Nunchuk using sample userspace applications
-
Memory management
-
Linux: memory management - Physical and virtual (kernel and user) address spaces
-
Linux memory management implementation
-
Allocating with kmalloc()
-
Allocating by pages
-
Allocating with vmalloc()
-
I/O memory and ports
-
I/O register and memory range registration
-
I/O register and memory access
-
Read / write memory barriers
-
Minimal platform driver and access to I/O memory
-
Implement a minimal platform driver
-
Modify the Device Tree to instantiate the new serial port device
-
Reserve the I/O memory addresses used by the serial port
-
Read device registers and write data to them, to send characters on the serial port
-
The misc kernel subsystem
-
What the misc kernel subsystem is useful for
-
API of the misc kernel subsystem, both the kernel side and userspace side
-
Lab - Output-only serial port driver
-
Extend the driver started in the previous lab by registering it into the misc subsystem
-
Implement serial port output functionality through the misc subsystem
-
Test serial output from userspace
-
Processes, scheduling, sleeping and interrupts
-
Process management in the Linux kernel
-
The Linux kernel scheduler and how processes sleep
-
Interrupt handling in device drivers: interrupt handler registration and programming, scheduling deferred work
-
Lab - Sleeping and handling interrupts in a device driver
-
Adding read capability to the character driver developed earlier
-
Register an interrupt handler
-
Waiting for data to be available in the read file operation
-
Waking up the code when data is available from the device
-
Locking
-
Issues with concurrent access to resources
-
Locking primitives: mutexes, semaphores, spinlocks
-
Atomic operations
-
Typical locking issues
-
Using the lock validator to identify the sources of locking problems
-
Lab - Locking
-
Observe problems due to concurrent accesses to the device
-
Add locking to the driver to fix these issues
-
Driver debugging techniques
-
Debugging with printk
-
Debugfs entries
-
Analyzing a kernel oops
-
Using kgdb, a kernel debugger
-
Using the Magic SysRq commands
-
Debugging through a JTAG probe
-
Lab - Investigating kernel faults
-
Studying a broken driver
-
Analyzing a kernel fault and locating the problem in the source code
-
ARM board support and SoC support
-
Understand the organization of the ARM support code
-
Understand how the kernel can be ported to a new hardware board
-
Power management
-
Overview of the power management features of the kernel
-
Topics covered: clocks, suspend and resume, dynamic frequency scaling, saving power during idle, runtime power management, regulators, etc.
-
The Linux kernel development process
-
Organization of the kernel community
-
The release schedule and process: release candidates, stable releases, long-term support, etc.
-
Legal aspects, licensing
-
How to submit patches to contribute code to the community
-
Předpokládané znalosti:
-
Znalost unixového prostředí a programování v jazyku C.
-
Časový rozvrh:
-
5 dní (9:00hod. - 17:00hod.)
Vybrané zákaznické reference
Thermo Fisher Scientific Brno s.r.o., Petr K.
Programování linuxového jádra (
LNXPR3)
"Dobry den,
nas skolitel byl velice dobre pripraven a zodpovedel vsechny dotazy."
RETIA, a.s., Michal D.
Programování linuxového jádra (
LNXPR3)
"Dobrá diskuse, se školením jsem spokojen."
ŠKODA DIGITAL s.r.o., Petr H.
Programování linuxového jádra (
LNXPR3)
"Š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%."