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
Course Outline
1. Fundamentals of the Linux Kernel
- Introduction to the Embedded Linux ecosystem
- Core architecture of the Linux kernel
- Distinction between user space and kernel space
- Core responsibilities of the kernel
- Standard workflows for kernel development
- Survey of supported embedded hardware platforms
2. Preparing the Development Environment
- Configuration of the host development workstation
- Concepts and principles of cross-compilation
- Installation and setup of essential development toolchains
- Setting up the BeagleBone Black target board
- Configuring the serial console for communication
- Initial boot processes for target devices
3. Accessing and Analyzing Kernel Source Code
- Navigating the Linux kernel source directory
- Differences between stable and long-term support kernel releases
- Procedures for retrieving kernel source code
- Understanding the organization of source code modules
- Utilizing official kernel documentation
- Strategies for managing kernel version control
4. Kernel Configuration, Compilation, and Booting
- Customizing kernel features using the menuconfig interface
- Methodologies for selecting appropriate kernel capabilities
- Executing cross-compilation for the kernel
- Generating bootable kernel images
- Installing and managing kernel modules
- Overview of bootloader functions
- Process for booting a customized kernel
5. Essentials of the Device Tree
- Role and purpose of the Device Tree mechanism
- Structure of Device Tree Source (DTS) files
- Understanding the Device Tree Blob (DTB) format
- Principles of hardware description via device trees
- Techniques for modifying Device Tree definitions
- Compiling and deploying Device Tree structures
6. Working with Linux Kernel Modules
- Architectural design of kernel modules
- Compilation and creation of loadable kernel modules
- Processes for loading and unloading modules at runtime
- Defining and using module parameters
- Managing dependencies between modules
- Techniques for interacting with loaded modules
- Approaches to debugging module code
7. Debugging the Linux Kernel
- Implementing kernel logging via printk()
- Interpreting dmesg output
- Utilizing dynamic debugging features
- Analyzing kernel panic events
- Interpreting Oops error messages
- Debugging kernel code using GDB
- Overview of basic performance tracing utilities
8. Developing Character Device Drivers
- The Linux device driver model overview
- Characteristics of character devices
- Procedures for registering device drivers
- Implementing file operation interfaces
- Handling read and write operations
- Implementing the IOCTL control interface
- Memory management strategies in drivers
- Proper driver cleanup and resource release
9. Integrating Drivers and Accessing Hardware
- Working with platform devices and their drivers
- Programming General Purpose Input/Output (GPIO) pins
- Implementing interrupt handling routines
- Managing timers and deferred work queues
- Direct access to hardware registers
- Techniques for memory-mapped I/O operations
10. Version Control Using Git
- Core concepts and commands in Git
- Best practices for managing kernel source repositories
- Managing branches and merging code changes
- Generating patch files for review
- Conducting code reviews effectively
- Workflows for collaborative kernel development
11. Practical Kernel Development Exercises
- Hands-on configuration of a custom kernel build
- Compiling and deploying the custom kernel to target hardware
- Development of a simple loadable kernel module
- Construction of a basic character device driver
- Practical modifications to Device Tree files
- Debugging specific kernel issues on the BeagleBone Black platform
12. Best Practices and Course Conclusion
- Adhering to standard kernel coding styles
- Strategies for writing sustainable and maintainable drivers
- Avoiding common development errors and pitfalls
- Key resources for kernel documentation
- Workflow for contributing to open-source projects
- Summary and review of critical concepts
- Open forum for questions and answers
- Recommended pathways for advanced Linux kernel development
Requirements
A foundational understanding of standard GNU/Linux system administration and usage is required.
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.