Arm Linux Kernel Development

This course covers the Linux kernel's architecture, source organization, build process, the role of DeviceTree for hardware description, pragmatic driver development using concepts like MMIO and Regmap, and techniques for symbolic debugging.

Description

This course provides a pragmatic and in-depth view of the kernel's architecture and driver development. The curriculum spans from foundational topics like the kernel's source organization, configuration using Kconfig, and the build process with Kbuild, to detailed discussions on how to write and manage kernel modules (builtin vs. loadable). It includes dedicated sections on the DeviceTree (its structure, nodes, and properties) for describing hardware, and advanced hardware handling concepts such as Memory Mapped I/O (MMIO) and the bus-agnostic Regmap framework for managing device registers. Finally, the course culminates in a module on Symbolic Debugging, explaining the principles of symbolic debuggers, kernel mechanisms like ptrace and core dumps for debugging userspace and kernel code, and the impact of compiler options like -g and optimization levels on the debugging experience.

Attributes

Level: Beginner
Class type: General
Time commitment: 16h

Topics Covered

  • Device Tree Fundamentals: Understanding the structure and purpose of device trees in Linux.
  • Linux Kernel Source Retrieval and Configuration: How to obtain, configure, and build the Linux kernel.
  • Linux Driver Development Basics: An introduction to developing Linux kernel modules and drivers.
  • Handling Hardware Resources in Drivers: Techniques for interacting with hardware, including MMIO and register maps.
  • Symbolic Debugging Techniques: Using GDB and other tools to debug kernel and user-space code.

Learning Outcomes

  • How to Navigate and Understand the Linux Kernel: Gaining knowledge of kernel structure, build processes, and configuration.
  • Skills to Write Basic Linux Drivers: Learning how to create kernel modules and interact with hardware.
  • Ability to Troubleshoot Kernel and Driver Issues: Using debugging tools to diagnose and fix problems.
  • Understanding of Hardware Description via Device Trees: Knowing how hardware is described and made accessible to the kernel.
  • Confidence in Working with the Linux Kernel Source: Being able to retrieve, configure, and build the kernel from source.

Similar courses

This course introduces the Linaro Automated Validation Architecture (LAVA), covering how users write and submit jobs for automated testing on real hardware, how to analyze test results with queries and charts, and how administrators can install, configure, and manage a LAVA lab infrastructure.

More Information

This course details the technical and social process of contributing code to the mainline Linux kernel, covering its organizational structure, the benefits of upstreaming, the culture and rules of mailing list communication, and the use of tools like b4 and clang-format for creating, formatting, and submitting high-quality patch series.

More Information

This course builds a systematic approach to diagnosing kernel issues, starting with principles such as failing early and progressing to practical, in-depth use of core Linux kernel debugging tools. Learners gain hands-on experience with ftrace for tracing, eBPF for low-overhead dynamic analysis, and perf for statistical profiling.

More Information