Get in Touch
 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

Number of participants


Price per participant

Testimonials (2)

Provisional Upcoming Courses (Require 5+ participants)

Related Categories