Get in Touch

Course Outline

1. Introduction to the Linux Kernel

  • An overview of Embedded Linux
  • Linux kernel architecture
  • Differences between user space and kernel space
  • Core responsibilities of the kernel
  • The kernel development workflow
  • A summary of supported embedded platforms

2. Setting Up the Development Environment

  • Preparing the development workstation
  • Concepts of cross-compilation
  • Installation of essential development tools
  • Configuration of the BeagleBone Black development board
  • Serial console setup
  • Booting the target device

3. Obtaining and Understanding the Kernel Source

  • Navigating the Linux kernel source tree
  • Distinctions between stable and long-term support kernels
  • Downloading kernel sources
  • Exploring the structure of the source code
  • Utilizing kernel documentation
  • Managing different kernel versions

4. Configuring, Compiling, and Booting the Kernel

  • Configuring the kernel via menuconfig
  • Selecting specific kernel features
  • Cross-compiling the kernel
  • Building kernel images
  • Installing kernel modules
  • Overview of bootloaders
  • Booting a custom-built kernel

5. Device Tree Fundamentals

  • The purpose of the Device Tree
  • Device Tree Source (DTS) files
  • Device Tree Blob (DTB)
  • Concepts of hardware description
  • Modifying Device Tree files
  • Building and deploying Device Trees

6. Linux Kernel Modules

  • Architecture of kernel modules
  • Constructing loadable kernel modules
  • Loading and unloading modules
  • Utilizing module parameters
  • Understanding module dependencies
  • Interacting with kernel modules
  • Techniques for debugging modules

7. Linux Kernel Debugging

  • Kernel logging using printk()
  • Utilizing the dmesg utility
  • Implementing dynamic debugging
  • Analyzing kernel panics
  • Interpreting Oops messages
  • Debugging with GDB
  • Overview of basic performance tracing tools

8. Character Device Drivers

  • The Linux device driver model
  • Understanding character devices
  • Registering drivers
  • Implementing file operations
  • Handling read and write operations
  • Implementing the IOCTL interface
  • Managing memory in drivers
  • Performing driver cleanup

9. Driver Integration and Hardware Access

  • Platform devices and 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

  • Fundamentals of Git
  • Managing kernel source code
  • Branching and merging strategies
  • Creating patches
  • Reviewing code changes
  • Collaborating on kernel development

11. Hands-on Kernel Development Labs

  • Configuring a custom kernel
  • Building and deploying the kernel
  • Creating a simple kernel module
  • Developing a basic character device driver
  • Modifying Device Tree files
  • Debugging kernel issues on BeagleBone Black

12. Best Practices and Summary

  • Adhering to the kernel coding style
  • Writing maintainable drivers
  • Avoiding common development pitfalls
  • Leveraging kernel documentation resources
  • Navigating the open-source contribution workflow
  • Review of key concepts
  • Questions and answers
  • Next steps for Linux kernel development

Requirements

A foundational understanding of using a GNU/Linux system

 14 Hours

Number of participants


Price per participant

Testimonials (2)

Upcoming Courses

Related Categories