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.
Duration 14 hours (2 days)
Course Outline
1. Introduction to the Linux Kernel
- General overview of Embedded Linux
- Architecture of the Linux kernel
- Distinguishing between user space and kernel space
- Core responsibilities of the kernel
- Workflow for kernel development
- Survey of supported embedded platforms
2. Setting Up the Development Environment
- Configuring the development workstation
- Understanding cross-compilation concepts
- Installing essential development toolchains
- Configuring the BeagleBone Black development board
- Establishing serial console connectivity
- Initiating the boot process on the target device
3. Obtaining and Understanding the Kernel Source
- Navigating the Linux kernel source tree
- Differentiating between stable and long-term support kernels
- Acquiring kernel source code
- Examining the structure of the source code
- Utilising kernel documentation
- Managing different kernel versions
4. Configuring, Compiling, and Booting the Kernel
- Configuring the kernel via menuconfig
- Choosing specific kernel features
- Cross-compiling the kernel code
- Generating kernel images
- Installing kernel modules
- Understanding the bootloader
- Booting a custom-configured kernel
5. Device Tree Fundamentals
- The role and purpose of the Device Tree
- Working with Device Tree Source (DTS) files
- Understanding Device Tree Blobs (DTB)
- Concepts in hardware description
- Modifying Device Tree configurations
- Building and deploying Device Trees
6. Linux Kernel Modules
- Architectural design of kernel modules
- Constructing loadable kernel modules
- Processes for loading and unloading modules
- Defining module parameters
- Handling module dependencies
- Interaction mechanisms with kernel modules
- Techniques for debugging modules
7. Linux Kernel Debugging
- Implementing kernel logging with printk()
- Utilising the dmesg utility
- Employing dynamic debugging
- Analyzing kernel panics
- Interpreting oops messages
- Debugging processes using GDB
- Using basic performance tracing tools
8. Character Device Drivers
- The Linux device driver model
- Concepts behind character devices
- Registering new drivers
- Implementing file operations
- Handling read and write operations
- Utilising the IOCTL interface
- Managing memory allocation
- Performing driver cleanup routines
9. Driver Integration and Hardware Access
- Managing platform devices and drivers
- Implementing GPIO programming
- Handling interrupt signals
- Using timers and deferred work queues
- Accessing hardware registers directly
- Interacting with memory-mapped I/O
10. Version Control with Git
- Core principles of Git
- Managing kernel source code repositories
- Executing branching and merging strategies
- Generating and applying patches
- Reviewing code changes
- Fostering collaboration in kernel development
11. Hands-on Kernel Development Labs
- Configuring a bespoke kernel
- Building and deploying the custom kernel
- Developing a simple kernel module
- Creating a fundamental character device driver
- Adjusting Device Tree files
- Diagnosing kernel issues on the BeagleBone Black
12. Best Practices and Summary
- Adhering to kernel coding style guidelines
- Writing maintainable and robust drivers
- Avoiding common development pitfalls
- Accessing key kernel documentation resources
- Navigating the open-source contribution workflow
- Recap of essential concepts
- Session for questions and answers
- Recommended next steps for kernel development
Requirements
Fundamental experience with operating on a GNU/Linux system
Testimonials (2)
The knowledge of the trainer. He was able to answer all of my questions, even questions about our platform. He also continued to help until we all understood the material.
James O'Donnell - Tennant Company
Course - Embedded Linux Kernel and Driver Development
I liked the hands-on nature of it.