Upstream Linux Kernel Development

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.

Description

This course breaks down the technical and social process of contributing code to the mainline Linux kernel. It covers the fundamental Mechanics of upstreaming, including its definition, the benefits (such as reduced costs and increased quality), and the organizational structure of the Linux project with its maintainer hierarchy. It then delves into Tips, Tools, and Techniques, which detail the culture of mailing list communication (plain text, no top-posting), the process of patch creation, the use of tags, and strategies for dealing with reviewers and maintainers. Finally, the course provides practical, hands-on guidance for using modern tools like b4 and clang-format for preparing, formatting, and submitting high-quality patch series, including automating the collection of necessary reviewer and mailing list addresses.

Attributes

Level: Intermediate
Class type: General
Time commitment: 8h

Topics Covered

  • Process of Upstreaming Code: The detailed workflow of getting code accepted into the mainline Linux kernel.
  • Kernel Organization and Structure: How the Linux project is structured with maintainers and mailing lists.
  • Best Practices for Patch Submission: Rules, style guidelines, and conventions for creating and sending patches.
  • Effective Communication with Upstream: How to engage with maintainers on mailing lists and address feedback.
  • Tools and Techniques for Kernel Development: Specific tools like "b4", "clang-format", and techniques for bisecting regressions.

Learning Outcomes

  • How to Contribute to the Linux Kernel: Practical skills to prepare, create, and submit patches for upstreaming.
  • Navigating the Linux Community: Understanding the culture and dynamics of the Linux kernel development community.
  • Writing High-Quality Kernel Code: Learning to adhere to kernel coding style and standards.
  • Debugging and Resolving Kernel Issues: Techniques for tracking down and fixing bugs, especially regressions.
  • Working Effectively with Git for Kernel Development: Proficiency in using Git for patch management and collaboration within the kernel context.

Similar courses

This course is designed to provide an in-depth understanding of the Arm Trusted Firmware-A (TF-A) project and the underlying security architecture.

More Information

This course covers foundational concepts, environment setup, and hands-on skills for creating custom embedded Linux systems, and developing custom components like recipes and layers.

More Information

This course is for experienced programmers, covering the fundamentals of the Rust language, its ecosystem (Crates, Cargo), advanced topics like the Type System and Taming the Borrow Checker (ownership, lifetimes), and specialized applications such as Embedded Rust and Rust for Linux kernel development.

More Information

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.

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

This course covers the foundational concepts, architecture, and components of the Open Portable Trusted Execution Environment (OP-TEE), including TEE principles, compliance with GlobalPlatform standards, shared memory, cryptography, compatibility with ARM Trusted Firmware, and practical guidance on building and porting the system.

More Information

U-Boot is the most widely used embedded bootloader, backed by a large community, and this module explains why: covering its core features, configuration options, and practical build and deployment on real hardware.

More Information