Get in Touch

Course Outline

1. Introduction to the Linux Kernel

  • Overview of Embedded Linux
  • Linux kernel architecture
  • User space versus kernel space
  • Key responsibilities of the kernel
  • The kernel development workflow
  • Supported embedded platforms overview

2. Setting Up the Development Environment

  • Preparing the development workstation
  • Concepts of cross-compilation
  • Installing essential development tools
  • Configuring the BeagleBone Black development board
  • Setting up serial console access
  • Booting the target device

3. Obtaining and Understanding the Kernel Source

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

4. Configuring, Compiling, and Booting the Kernel

  • Configuring the kernel using menuconfig
  • Selecting desired 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)
  • Hardware description concepts
  • Modifying Device Tree files
  • Building and deploying Device Trees

6. Linux Kernel Modules

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

7. Linux Kernel Debugging

  • Kernel logging using printk()
  • Utilizing dmesg
  • Implementing dynamic debugging
  • Analyzing kernel panics
  • Understanding Oops messages
  • Debugging with GDB
  • Introduction to basic performance tracing tools

8. Character Device Drivers

  • The Linux device driver model
  • Understanding character devices
  • Registering drivers
  • Defining file operations
  • Implementing read and write operations
  • Using the IOCTL interface
  • Memory management in drivers
  • Cleaning up driver resources

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

  • Git fundamentals
  • Managing kernel source code with Git
  • Branching and merging strategies
  • Creating patches
  • Reviewing 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

  • Kernel coding style guidelines
  • Writing maintainable drivers
  • Avoiding common development pitfalls
  • Exploring kernel documentation resources
  • The open-source contribution workflow
  • Review of key concepts
  • Questions and answers
  • Next steps for Linux kernel development

Requirements

A fundamental understanding of using a GNU/Linux system.

 14 Hours

Number of participants


Price per participant

Testimonials (2)

Upcoming Courses

Related Categories