Get in Touch

Course Outline

1. Introduction to the Linux Kernel

  • Foundations of Embedded Linux
  • Structure of the Linux kernel architecture
  • Distinguishing between user space and kernel space
  • Core responsibilities of the kernel
  • The workflow for kernel development
  • Survey of supported embedded platforms

2. Establishing the Development Environment

  • Preparing the development workstation
  • Understanding cross-compilation principles
  • Installing essential development tools
  • Setting up the BeagleBone Black development board
  • Configuring the serial console
  • Initiating the boot process on the target device

3. Acquiring and Analyzing Kernel Source Code

  • Structure of the Linux kernel source tree
  • Differences between stable and long-term support kernels
  • Procedures for downloading kernel sources
  • Navigating the source code organization
  • Utilizing kernel documentation
  • Version control for the kernel

4. Configuring, Building, and Booting the Kernel

  • Configuring the kernel via menuconfig
  • Enabling specific kernel features
  • Cross-compiling the kernel image
  • Generating kernel images
  • Installing kernel modules
  • Overview of bootloader mechanics
  • Booting a custom-compiled kernel

5. Fundamentals of Device Trees

  • The role and purpose of the Device Tree
  • Anatomy of Device Tree Source (DTS) files
  • Understanding Device Tree Blobs (DTB)
  • Concepts in hardware description
  • Techniques for modifying Device Tree files
  • Building and deploying Device Trees

6. Linux Kernel Modules

  • Architecture of kernel modules
  • Constructing loadable kernel modules
  • Processes for loading and unloading modules
  • Utilizing module parameters
  • Managing module dependencies
  • Methods for interacting with kernel modules
  • Strategies for module debugging

7. Debugging the Linux Kernel

  • Implementing kernel logging with printk()
  • Utilizing the dmesg utility
  • Enabling dynamic debugging
  • Analyzing kernel panics
  • Interpreting oops messages
  • Debugging sessions with GDB
  • Essential performance tracing tools

8. Character Device Drivers

  • The Linux device driver model
  • Understanding character devices
  • Procedures for registering drivers
  • Implementing file operations
  • Handling read and write operations
  • Using the IOCTL interface
  • Memory management in drivers
  • Driver cleanup procedures

9. Integrating Drivers and Accessing Hardware

  • Platform devices and their drivers
  • GPIO programming techniques
  • Handling interrupts
  • Using timers and deferred work
  • Accessing hardware registers
  • Working with memory-mapped I/O

10. Version Control with Git

  • Core Git concepts
  • Managing kernel source code versions
  • Techniques for branching and merging
  • Generating patches
  • Reviewing code changes
  • Collaborative workflows in kernel development

11. Practical Kernel Development Labs

  • Configuring a bespoke kernel
  • Building and deploying the kernel image
  • Developing a simple kernel module
  • Implementing a basic character device driver
  • Adjusting Device Tree files
  • Troubleshooting kernel issues on BeagleBone Black

12. Best Practices and Course Summary

  • Standards for kernel coding style
  • Strategies for writing maintainable drivers
  • Avoiding common development pitfalls
  • Accessing kernel documentation resources
  • Workflow for contributing to open source
  • Recap of essential concepts
  • Opportunity for questions and answers
  • Recommended next steps for Linux kernel development

Requirements

A foundational understanding of using GNU/Linux operating systems.

 14 Hours

Number of participants


Price per participant

Testimonials (2)

Provisional Upcoming Courses (Require 5+ participants)

Related Categories