Wind River Linux Device Driver and Board Support Package Development
The Wind River Linux Device Driver and Board Support Package Development course provides engineers with a fast, cost-effective way to acquire the skills necessary to develop, deploy, and debug their own customized Linux device drivers and BSPs in the Wind River® Linux environment.
Course Description
The Wind River Linux Device Driver and Board Support Package Development course provides engineers with a fast, cost-effective way to acquire the skills necessary to develop, deploy, and debug their own customized Linux device drivers and BSPs in the Wind River® Linux environment.
After this course, participants will be able to perform the following:
- After this course, participants will be able to perform the following:
- Develop and manipulate Linux kernel modules
- Develop Linux device drivers for the various types of devices supported in Linux
- Describe the workings of the different kernel subsystems and how they impact the structure of a device driver
- Debug Linux device drivers
- Create a new BSP, and customize, patch, and validate the BSP
- Port Wind River Linux platform projects to new boards
Products Supported
- Wind River Linux LTS 21
- The following targets are available: QEMU simulated target (Intel® x86-64)
Course Format
- This four-day expert-led course consists of lectures and lab sessions.
- Students gain hands-on experience and receive personal guidance from expert Wind River instructors.
- Specific questions are addressed.
Audience
- Developers new to device driver and BSP development in Linux
- Linux application developers who need insight into the Linux kernel
- Developers interested in the interface between the Linux kernel and device drivers
- Developers who plan to use Wind River Linux on an unsupported board (hardware architecture is supported)
Prerequisite Skills
- Familiarity with the Yocto build environment
- Familiarity with makefiles and the GNU toolchain
- Understanding of how to deploy and debug Linux-based applications in a cross-development environment
- C or C++ programming experience on Linux/UNIX
- Familiarity with the Helix Platform hypervisor
Prerequisite Courses
- Introduction to Linux
Related Courses
- Wind River Linux CLI Essentials
Syllabus
DAY 1
INTRODUCTION TO LINUX DEVICE DRIVERS
- Linux architecture overview
- Linux device driver overview
- Device driver types
- Linux device model
LINUX KERNEL SOURCE CODE
- Configuring the kernel
- Building the kernel
- Patching the kernel
- LAB: Getting Started with the Wind River Linux Lab Environment
- LAB: Managing Simulated Targets from the Command Line
INTRODUCTION TO LINUX KERNEL MODULES
- Overview
- Building modules
- Installing modules
- Managing modules
- Module parameters
- LAB: Managing Kernel Modules
- LAB: Developing Kernel Modules
CHARACTER DEVICE DRIVERS
- OverviewDriver Life Cycle
- Major and Minor Numbers
- Character driver entry points
- Blocking operations
- Controlling a device
- Querying the read/write ability
- Restricting operations
- LAB: Developing a Character Device Driver
DAY 2
MANAGING MEMORY IN THE LINUX DEVICE DRIVERS
- How Linux manages memory
- Allocating memory with kmalloc( )
- Page-based memory allocation
- Manipulating memory
- Memory-mapped I/O
- Accessing user space memory
- Implementing the mmap operation
- LAB: Managing Memory in Kernel Code
CONCURRENCY IN LINUX DEVICE DRIVERS
- Concurrency
- Race conditions
- Locking primitives
- Deadlock
- Atomic variables
- LAB: Managing Concurrency in Kernel Code
- LAB: Managing Execution of Driver Code
HANDLING INTERRUPTS IN LINUX DEVICE DRIVERS
- How interrupts work
- IRQs
- Interrupt handlers
- LAB: Implementing Interrupt Handlers
DEBUGGING LINUX DEVICE DRIVERS
- Debugging by printing
- Debugging by querying
- Debugging by observation
- Using a kernel debugger
- LAB: Implementing Debugging Strategies in Kernel Code
- LAB: Configuring KGDB
- LAB: Kernel Debugging with GDB
DAY 3
LINUX PCI DEVICE DRIVERS
- PCI configuration space
- Identifying devices
- Matching devices and drivers
- Driver registration
- The probe( ) function
- Memory and I/O regions
- DMA
- The remove( ) function
- LAB: Driving Devices over PCI
LINUX USB DEVICE DRIVERS
- USB architecture
- Matching devices and drivers
- Driver registration
- The probe( ) function
- Communicating with the device
- LAB: Driving Devices over USB
BLOCK DEVICE DRIVERS
- Driver Life Cycle
- Major and Minor Numbers
- Block Layer Architecture
- Block Driver Entry Points
- Processing Requests
- Controlling a Device
- LAB: Developing a Block Device Driver
LINUX NETWORK DEVICE DRIVERS
- Overview of network devices
- Implementing the driver
- Packet transmission and reception
- NAPI drivers
- LAB: Developing a Network Device
Day 4
WIND RIVER LINUX BSP OVERVIEW
- The role of a Wind River Linux BSP
- The Wind River Linux BSP structure
- Setting up the build environment
- Configuring and patching a kernel
- Configuring user space
CREATING WIND RIVER LINUX BSPS
- BSP development overview
- Starting from scratch
- Starting with third-party code
- Enabling supported boards
- Cloning BSPs
- Packaging Wind River Linux BSPs
- LAB: Creating a BSP
- LAB: Customizing the BSP
- LAB: Patching the Kernel in the BSP Layer
ADDITIONAL BSP CONSIDERATIONS
- BSP documentation
- Boot loaders
- Legal requirements
- Validating a BSP
- LAB: Validating the Kernel
COURSE DETAILS SUMMARY
- Duration: 4 Days
- Course Information: View
- Format: Lectures and Labs
- Type: Instructor-led, Remote delivery available