This instructor-led training is designed to show experienced programmers how to develop device drivers for the embedded Linux systems,` & give them a basic understanding & familiarity with the Linux kernel. Hands-on labs with a RISC-V-based emulated development target allow professionals to practice what is learned in class.
To make the most of this training, you must have the following:
Knowledge of basic kernel interfaces & methods, such as how to write, compile, load` & unload modules, use synchronization primitives,` & the basics of memory allocation` & management, like provided by LFD420 (Kernel Internals` & Development). Pre class preparation material will be provided before class.
This training is for an experienced developers who need to develop device drivers for the embedded Linux systems.
Upon mastering this material, you'll be familiar with the various kinds of device drivers used under Linux,` & have an introduction to many correct APIs to be used while writing a device driver. Labs for illustrating these concepts will be performed on ARM hardware to get developers familiar with the cross-compiling & developing drivers for an embedded target.
- Objectives
- Who You Are
- The Linux Foundation
- Copyright` & No Confidential Information
- Linux Foundation Training
- Certification Programs` & Digital Badging
- Linux Distributions
- Preparing Your System
- Things change in Linux
- Documentation & Links
- Procedures
- Kernel Versions
- Kernel Sources` & Use of git
- Hardware
- Staging Tree
- Labs
- Overview of How to Contribute appropriately
- Knowing Where the Code is Coming From DCO & CLA
- Stay Close to Mainline for Security` & Quality
- Study & Understand the Project DNA
- Figuring Out What Itch You Want to Scratch
- Identify Maintainers` & Their Work Flows` & Methods
- Get Early Input` & Work in the Open
- Contributing Incremental Bits, Not Large Code Dumps
- Leaving Your Ego at the Door: Don’t Be Thin-Skinned
- Be Patient, Develop Long Term Relationships, and Be Helpful
- The Compiler Triplet
- Built in Linux Distribution Cross Compiler
- CodeSourcery
- Buildroot
- crosstool-ng
- OpenEmbedded
- Linaro
- Labs
- Yocto Project
- Why use QEMU?
- What is QEMU?
- Image Formats
- Emulated Architectures
- Labs
- Getting SW onto a uSD card
- Why do we use uSD cards?
- Booting from flash
- Labs
- Why using uSD cards a bad idea?
- Using virtual Hardware
- An easier way to develop
- The Boot Sequence using TFTP & NFSroot
- Objectives of Lab
- Labs
- Labs
- Configuring the Kernel for the Development Board
- Mechanism vs. Policy
- Types of Devices
- Power Management
- Avoiding Binary Blobs
- How Applications Use Device Drivers
- Error Numbers
- printk()
- Walking Through a System Call Accessing a Device
- devres: Managed Device Resources
- Labs
- The module driver() Macros
- Modules & Hot Plug
- Labs
- Virtual & Physical Memory
- Memory Zones
- Page Tables
- kmalloc()
- get free pages()
- vmalloc()
- Slabs` & Cache Allocations
- Labs
- Device Nodes
- Major` & Minor Numbers
- Reserving Major/Minor Numbers
- Accessing the Device Node
- Registering the Device
- udev
- dev printk()` & Associates
- file operations Structure
- Driver Entry Points
- The file & inode Structures
- Miscellaneous Character Drivers
- Labs
- Components of the Kernel
- User-Space vs. Kernel-Space
- What are System Calls?
- Available System Calls
- Scheduling Algorithms & Task Structures
- Process Context
- Labs
- Transferring Between Spaces
- put(get) user()` & copy to(from) user()
- Direct Transfer: Kernel I/O` & Memory Mapping
- Kernel I/O
- Mapping User Pages
- Memory Mapping
- User-Space Functions for mmap()
- Driver Entry Point for mmap()
- Accessing Files from the Kernel
- Labs
- What are Platform Drivers?
- Main Data Structures
- Registering Platform Devices
- An Example
- Hardcoded Platform Data
- The New Way: Device Trees
- Labs
- What are Device Trees?
- What Device Trees Do` & What They Do Not Do
- Device Tree Syntax
- Device Tree Walk Through
- Device Tree Bindings
- Device Tree support in Boot Loaders
- Using Device Tree Data in Drivers
- Coexistence` & Conversion of Old Drivers
- Labs
- What are Interrupts & Exceptions?
- Exceptions
- Asynchronous Interrupts
- MSI
- Enabling/Disabling Interrupts
- What You Cannot Do at Interrupt Time
- IRQ Data Structures
- Installing an Interrupt Handler
- Labs
- Kinds of Timing Measurements
- Jiffies
- Getting the Current Time
- Clock Sources
- Real-Time Clock
- Programmable Interval Timer
- Time Stamp Counter
- HPET
- Going Tickless
- Inserting Delays
- What are Kernel Timers?
- Low-Resolution Timer Functions
- Low-Resolution Timer Implementation
- High-Resolution Timers
- Using High-Resolution Timers
- Labs
- What are ioctls?
- Driver Entry point for ioctls
- Defining ioctls
- Labs
- Unified Device Model
- Basic Structures
- Real Devices
- sysfs
- kset` & kobject examples
- Labs
- What is Firmware?
- Loading Firmware
- Labs
- What are Wait Queues?
- Going to Sleep` & Waking Up
- Going to Sleep Details
- Exclusive Sleeping
- Waking Up Details
- Polling
- Labs
- Top & Bottom Halves
- Softirqs
- Tasklets
- Work Queues
- New Work Queue API
- Creating Kernel Threads
- Threaded Interrupt Handlers
- Interrupt Handling in User-Space
- Labs
- Memory Barriers
- Allocating` & Mapping I/O Memory
- Accessing I/O Memory
- What is DMA?
- DMA Directly to the User
- DMA` & Interrupts
- DMA Memory Constraints
- DMA Masks
- DMA API
- DMA Pools
- Scatter/Gather Mappings
- Labs
- What are MTD Devices?
- NAND vs. NOR vs. eMMC
- Driver` & User Modules
- Flash Filesystems
- What is USB?
- USB Topology
- Terminology
- Endpoints
- Descriptors
- USB Device Classes
- USB Support in Linux
- Registering USB Device Drivers
- Moving Data
- Example of a USB Driver
- Labs
- Evaluation Survey
- UNIX` & Linux **
- Monolithic` & Micro Kernels
- Object-Oriented Methods
- Main Kernel Components
- User-Space` & Kernel-Space
- Task Structure
- Memory Allocation
- Transferring Data between User` & Kernel Spaces
- Object-Oriented Inheritance - Sort Of
- Linked Lists
- Jiffies
- Labs
- What are Modules?
- A Trivial Example
- Compiling Modules
- Modules vs. Built-in
- Module Utilities
- Automatic Module Loading
- Module Usage Count
- Module Licensing
- Exporting Symbols
- Resolving Symbols **
- Labs
- Processes, Threads,` & Tasks
- Kernel Preemption
- Real-Time Preemption Patch
- Labs
- Installation & Layout of the Kernel Source
- Kernel Browsers
- Kernel Configuration Files
- Kernel Building` & Makefiles
- initrd` & initramfs
- Labs
- Coding Style
- Using Generic Kernel Routines` & Methods
- Making a Kernel Patch
- sparse
- Using likely()` & unlikely()
- Writing Portable Code, CPU, 32/64-bit, Endianness
- Writing for SMP
- Writing for High Memory Systems
- Power Management
- Keeping Security in Mind
- Labs
- Concurrency` & Synchronization Methods
- Atomic Operations
- Bit Operations
- Spinlocks
- Seqlocks
- Disabling Preemption
- Mutexes
- Semaphores
- Completion Functions
- Read-Copy-Update (RCU)
- Reference Counts
- Labs
- Virtual Memory Management
- Systems With` & Without MMU` & the TLB
- Memory Addresses
- High & Low Memory
- Memory Zones
- Special Device Nodes
- NUMA
- Paging
- Page Tables
- page structure
- Labs
- Requesting` & Releasing Pages
- Buddy System
- Slabs` & Cache Allocations
- Memory Pools
- kmalloc()
- vmalloc()
- Early Allocations` & bootmem()
- Memory Defragmentation
- Labs
To attend the training session, you should have operational Desktops or Laptops with the required specification, along with a good internet connection to access the labs.
We would always recommend you attend the live session to practice & clarify the doubts instantly` & get more value from your investment. However, if, due to some contingency, you have to skip the class, Radiant Techlearning will help you with the recorded session of that particular day. However, those recorded sessions are not meant only for personal consumption & NOT for distribution or any commercial use.
Radiant Techlearning has a data center containing a Virtual Training environment for the purpose of professional hand-on-practice.
Professionals can easily access these labs over Cloud with the help of a remote desktop connection.
Radiant virtual labs provide you the flexibility to learn from anywhere in the world & in any time zone.
The professionals will be enthralled as we engage them in real-world` & industry Oriented projects during the training program. These projects will improve your skills & knowledge & you will gain a better experience. These real-time projects will help you a lot in your future tasks & assignments.