Linux Kernel Internals & Development (LFD420)

Course Description

Learn how to develop the Linux kernel. In this instructor-led training, you’ll learn how Linux is architected, the basic methods for the developing on the kernel, & how to efficiently work with the Linux developer community. If you're interested in learning about the Linux kernel, this is the definitive training on the subject.

Prerequisites

To make the most of this training, you must:

Be proficient in the C programming language and basic Linux (UNIX) utilities like ls, grep & tar, & be comfortable with any of available text editors (e.g., emacs, vi, etc.) Experience with a major Linux distribution is helpful but not strictly required.

 

Target Audience

This training is designed to provide an experienced programmers with the solid understanding of the Linux kernel. Professionals should be proficient in the C programming language and basic Linux (UNIX) utilities such as ls, grep & tar, & be comfortable with any of the available text editors (e.g., emacs, vi, etc.).

Learning Objectives

In this training, you will learn how Linux is architected, how kernel algorithms work, hardware & memory management, modularization techniques & debugging, how the kernel developer community operates & how to efficiently work with it, & much more.

Content Outline

Introduction

  • Objectives
  • Who You Are
  • The Linux Foundation
  • Copyright & No Confidential Information
  • Linux Foundation Training
  • Certification Programs & Digital Badging
  • Linux Distributions
  • Platforms
  • Preparing Your System
  • Using & Downloading a Virtual Machine
  • Things Change in Linux & Open Source Projects
  • Documentation & Links

 

Preliminaries

  • Procedures
  • Kernel Versions
  • Kernel Sources & Use of git
  • Labs

 

How to Work in OSS Projects **

  • Overview of How to Contribute Properly
  • Know Where the Code is Coming From DCO & CLA
  • Stay Close to Mainline for Security & Quality
  • Study & Understand the Project DNA
  • Figure Out What Itch You Want to Scratch
  • Identify Maintainers & Their Work Flows & Methods
  • Get Early Input & Work in the Open
  • Contribute Incremental Bits, Not Large Code Dumps
  • Leave Your Ego at the Door: Don’t Be Thin-Skinned
  • Be Patient, Develop Long Term Relationships, and Be Helpful

 

Kernel Architecture I

  • UNIX & Linux **
  • Monolithic & Micro Kernels
  • Object-Oriented Methods
  • Main Kernel Components
  • User-Space & Kernel-Space

 

Kernel Programming Preview

  • Error Numbers & Getting Kernel Output
  • Task Structure
  • Memory Allocation
  • Transferring Data between User & Kernel Spaces
  • Object-Oriented Inheritance - Sort Of
  • Linked Lists
  • String to Number Conversions
  • Jiffies
  • Labs

 

Modules

  • What are Modules?
  • A Trivial Example
  • Compiling Modules
  • Modules vs. Built-in
  • Module Utilities
  • Automatic Module Loading
  • Module Usage Count
  • The module struct
  • Module Licensing
  • Exporting Symbols
  • Resolving Symbols **
  • Labs

 

Kernel Architecture II

  • Processes, Threads, & Tasks
  • Process Context
  • Kernel Preemption
  • Real-Time Preemption Patch
  • Dynamic Kernel Patching
  • Run-time Alternatives **
  • Porting to a New Platform **
  • Labs

 

Kernel Initialization

  • Overview of System Initialization
  • System Boot
  • Das U-Boot for Embedded Systems**
  • Kernel Startup

 

Kernel Configuration & Compilation

  • Installation & Layout of the Kernel Source
  • Kernel Browsers
  • Kernel Configuration Files
  • Kernel Building & Makefiles
  • initrd & initramfs
  • Labs

 

System Calls

  • What are System Calls?
  • Available System Calls
  • How System Calls are Implemented
  • Adding a New System Call
  • Labs

 

Kernel Style & General Considerations

  • Coding Style
  • kernel-doc **
  • Using Generic Kernel Routines & Methods
  • Making a Kernel Patch
  • sparse
  • Using likely() & unlikely()
  • Writing Portable Code, CPU, 32/64-bit, Endianness
  • Writing for SMP
  • Writing for High Memory Systems
  • Power Management
  • Keeping Security in Mind
  • Mixing User- & Kernel-Space Headers **
  • Labs

 

Race Conditions & Synchronization Methods

  • Concurrency & Synchronization Methods
  • Atomic Operations
  • Bit Operations
  • Spinlocks
  • Seqlocks
  • Disabling Preemption
  • Mutexes
  • Semaphores
  • Completion Functions
  • Read-Copy-Update (RCU)
  • Reference Counts
  • Labs

 

SMP & Threads

  • SMP Kernels & Modules
  • Processor Affinity
  • CPUSETS
  • SMP Algorithms - Scheduling, Locking, etc
  • Per-CPU Variables **
  • Labs

 

Processes

  • What are Processes?
  • The task struct
  • Creating User Processes & Threads
  • Creating Kernel Threads
  • Destroying Processes & Threads
  • Executing User-Space Processes From Within the Kernel
  • Labs

 

Process Limits & Capabilities **

  • Process Limits
  • Capabilities
  • Labs

 

Monitoring & Debugging

  • Debuginfo Packages
  • Tracing & Profiling
  • sysctl
  • SysRq Key
  • oops Messages
  • Kernel Debuggers
  • debugfs
  • Labs

 

Scheduling

  • Main Scheduling Tasks
  • SMP
  • Scheduling Priorities
  • Scheduling System Calls
  • The 2.4 schedule() Function **
  • O(1) Scheduler **
  • Time Slices & Priorities
  • Load Balancing
  • Priority Inversion & Priority Inheritance **
  • The CFS Scheduler
  • Calculating Priorities & Fair Times
  • Scheduling Classes
  • Scheduler Details
  • Labs

 

Memory Addressing

  • Virtual Memory Management
  • Systems With & Without MMU & th...

 

Introduction

  • Objectives
  • Who You Are
  • The Linux Foundation
  • Copyright & No Confidential Information
  • Linux Foundation Training
  • Certification Programs & Digital Badging
  • Linux Distributions
  • Platforms
  • Preparing Your System
  • Using & Downloading a Virtual Machine
  • Things Change in Linux & Open Source Projects
  • Documentation & Links

 

Preliminaries

  • Procedures
  • Kernel Versions
  • Kernel Sources & Use of git
  • Labs

 

How to Work in OSS Projects **

  • Overview of How to Contribute Properly
  • Know Where the Code is Coming From DCO & CLA
  • Stay Close to Mainline for Security & Quality
  • Study & Understand the Project DNA
  • Figure Out What Itch You Want to Scratch
  • Identify Maintainers & Their Work Flows & Methods
  • Get Early Input & Work in the Open
  • Contribute Incremental Bits, Not Large Code Dumps
  • Leave Your Ego at the Door: Don’t Be Thin-Skinned
  • Be Patient, Develop Long Term Relationships, and Be Helpful

 

Kernel Architecture I

  • UNIX & Linux **
  • Monolithic & Micro Kernels
  • Object-Oriented Methods
  • Main Kernel Components
  • User-Space & Kernel-Space

 

Kernel Programming Preview

  • Error Numbers & Getting Kernel Output
  • Task Structure
  • Memory Allocation
  • Transferring Data between User & Kernel Spaces
  • Object-Oriented Inheritance - Sort Of
  • Linked Lists
  • String to Number Conversions
  • Jiffies
  • Labs

 

Modules

  • What are Modules?
  • A Trivial Example
  • Compiling Modules
  • Modules vs. Built-in
  • Module Utilities
  • Automatic Module Loading
  • Module Usage Count
  • The module struct
  • Module Licensing
  • Exporting Symbols
  • Resolving Symbols **
  • Labs

 

Kernel Architecture II

  • Processes, Threads, & Tasks
  • Process Context
  • Kernel Preemption
  • Real-Time Preemption Patch
  • Dynamic Kernel Patching
  • Run-time Alternatives **
  • Porting to a New Platform **
  • Labs

 

Kernel Initialization

  • Overview of System Initialization
  • System Boot
  • Das U-Boot for Embedded Systems**
  • Kernel Startup

 

Kernel Configuration & Compilation

  • Installation & Layout of the Kernel Source
  • Kernel Browsers
  • Kernel Configuration Files
  • Kernel Building & Makefiles
  • initrd & initramfs
  • Labs

 

System Calls

  • What are System Calls?
  • Available System Calls
  • How System Calls are Implemented
  • Adding a New System Call
  • Labs

 

Kernel Style & General Considerations

  • Coding Style
  • kernel-doc **
  • Using Generic Kernel Routines & Methods
  • Making a Kernel Patch
  • sparse
  • Using likely() & unlikely()
  • Writing Portable Code, CPU, 32/64-bit, Endianness
  • Writing for SMP
  • Writing for High Memory Systems
  • Power Management
  • Keeping Security in Mind
  • Mixing User- & Kernel-Space Headers **
  • Labs

 

Race Conditions & Synchronization Methods

  • Concurrency & Synchronization Methods
  • Atomic Operations
  • Bit Operations
  • Spinlocks
  • Seqlocks
  • Disabling Preemption
  • Mutexes
  • Semaphores
  • Completion Functions
  • Read-Copy-Update (RCU)
  • Reference Counts
  • Labs

 

SMP & Threads

  • SMP Kernels & Modules
  • Processor Affinity
  • CPUSETS
  • SMP Algorithms - Scheduling, Locking, etc
  • Per-CPU Variables **
  • Labs

 

Processes

  • What are Processes?
  • The task struct
  • Creating User Processes & Threads
  • Creating Kernel Threads
  • Destroying Processes & Threads
  • Executing User-Space Processes From Within the Kernel
  • Labs

 

Process Limits & Capabilities **

  • Process Limits
  • Capabilities
  • Labs

 

Monitoring & Debugging

  • Debuginfo Packages
  • Tracing & Profiling
  • sysctl
  • SysRq Key
  • oops Messages
  • Kernel Debuggers
  • debugfs
  • Labs

 

Scheduling

  • Main Scheduling Tasks
  • SMP
  • Scheduling Priorities
  • Scheduling System Calls
  • The 2.4 schedule() Function **
  • O(1) Scheduler **
  • Time Slices & Priorities
  • Load Balancing
  • Priority Inversion & Priority Inheritance **
  • The CFS Scheduler
  • Calculating Priorities & Fair Times
  • Scheduling Classes
  • Scheduler Details
  • Labs

 

Memory Addressing

  • Virtual Memory Management
  • Systems With & Wit...
  • Objectives
  • Who You Are
  • The Linux Foundation
  • Copyright & No Confidential Information
  • Linux Foundation Training
  • Certification Programs & Digital Badging
  • Linux Distributions
  • Platforms
  • Preparing Your System
  • Using & Downloading a Virtual Machine
  • Things Change in Linux & Open Source Projects
  • Documentation & Links
  • Procedures
  • Kernel Versions
  • Kernel Sources & Use of git
  • Labs
  • Overview of How to Contribute Properly
  • Know Where the Code is Coming From DCO & CLA
  • Stay Close to Mainline for Security & Quality
  • Study & Understand the Project DNA
  • Figure Out What Itch You Want to Scratch
  • Identify Maintainers & Their Work Flows & Methods
  • Get Early Input & Work in the Open
  • Contribute Incremental Bits, Not Large Code Dumps
  • Leave Your Ego at the Door: Don’t Be Thin-Skinned
  • Be Patient, Develop Long Term Relationships, and Be Helpful
  • UNIX & Linux **
  • Monolithic & Micro Kernels
  • Object-Oriented Methods
  • Main Kernel Components
  • User-Space & Kernel-Space
  • Error Numbers & Getting Kernel Output
  • Task Structure
  • Memory Allocation
  • Transferring Data between User & Kernel Spaces
  • Object-Oriented Inheritance - Sort Of
  • Linked Lists
  • String to Number Conversions
  • Jiffies
  • Labs
  • What are Modules?
  • A Trivial Example
  • Compiling Modules
  • Modules vs. Built-in
  • Module Utilities
  • Automatic Module Loading
  • Module Usage Count
  • The module struct
  • Module Licensing
  • Exporting Symbols
  • Resolving Symbols **
  • Labs
  • Processes, Threads, & Tasks
  • Process Context
  • Kernel Preemption
  • Real-Time Preemption Patch
  • Dynamic Kernel Patching
  • Run-time Alternatives **
  • Porting to a New Platform **
  • Labs
  • Overview of System Initialization
  • System Boot
  • Das U-Boot for Embedded Systems**
  • Kernel Startup
  • Installation & Layout of the Kernel Source
  • Kernel Browsers
  • Kernel Configuration Files
  • Kernel Building & Makefiles
  • initrd & initramfs
  • Labs
  • What are System Calls?
  • Available System Calls
  • How System Calls are Implemented
  • Adding a New System Call
  • Labs
  • Coding Style
  • kernel-doc **
  • Using Generic Kernel Routines & Methods
  • Making a Kernel Patch
  • sparse
  • Using likely() & unlikely()
  • Writing Portable Code, CPU, 32/64-bit, Endianness
  • Writing for SMP
  • Writing for High Memory Systems
  • Power Management
  • Keeping Security in Mind
  • Mixing User- & Kernel-Space Headers **
  • Labs
  • Concurrency & Synchronization Methods
  • Atomic Operations
  • Bit Operations
  • Spinlocks
  • Seqlocks
  • Disabling Preemption
  • Mutexes
  • Semaphores
  • Completion Functions
  • Read-Copy-Update (RCU)
  • Reference Counts
  • Labs
  • SMP Kernels & Modules
  • Processor Affinity
  • CPUSETS
  • SMP Algorithms - Scheduling, Locking, etc
  • Per-CPU Variables **
  • Labs
  • What are Processes?
  • The task struct
  • Creating User Processes & Threads
  • Creating Kernel Threads
  • Destroying Processes & Threads
  • Executing User-Space Processes From Within the Kernel
  • Labs
  • Process Limits
  • Capabilities
  • Labs
  • Debuginfo Packages
  • Tracing & Profiling
  • sysctl
  • SysRq Key
  • oops Messages
  • Kernel Debuggers
  • debugfs
  • Labs
  • Main Scheduling Tasks
  • SMP
  • Scheduling Priorities
  • Scheduling System Calls
  • The 2.4 schedule() Function **
  • O(1) Scheduler **
  • Time Slices & Priorities
  • Load Balancing
  • Priority Inversion & Priority Inheritance **
  • The CFS Scheduler
  • Calculating Priorities & Fair Times
  • Scheduling Classes
  • Scheduler Details
  • Labs
  • Virtual Memory Management
  • Systems With & Without MMU & the TLB
  • Memory Addresses
  • High & Low Memory
  • Memory Zones
  • Special Device Nodes
  • NUMA
  • Paging
  • Page Tables
  • page structure
  • Kernel Samepage Merging (KSM) **
  • Labs
  • Huge Page Support
  • Transparent Huge Pages
  • libhugetlbfs
  • Labs
  • Requesting & Releasing Pages
  • Buddy System
  • Slabs & Cache Allocations
  • Memory Pools
  • kmalloc()
  • vmalloc()
  • Early Allocations & bootmem()
  • Memory Defragmentation
  • Labs
  • Allocating User Memory & Address Spaces
  • Locking Pages
  • Memory Descriptors & Regions
  • Access Rights
  • Allocating & Freeing Memory Regions
  • Page Faults
  • Labs
  • Caches
  • Page Cache Basics
  • What is Swapping?
  • Swap Areas
  • Swapping Pages In & Out
  • Controlling Swappiness
  • The Swap Cache
  • Reverse Mapping **
  • OOM Killer
  • Labs
  • Types of Devices
  • Device Nodes
  • Character Drivers
  • An Example
  • Labs
  • What are Signals?
  • Available Signals
  • System Calls for Signals
  • Sigaction
  • Signals & Threads
  • How the Kernel Installs Signal Handlers
  • How the Kernel Sends Signals
  • How the Kernel Invokes Signal Handlers
  • Real-Time Signals
  • Labs

Evaluation Survey

FAQs

To attend the training session, you should have operational Desktops or Laptops with the required specification, along with a good internet connection to access the labs. 

We would always recommend you attend the live session to practice & clarify the doubts instantly & get more value from your investment. However, if, due to some contingency, you have to skip the class, Radiant Techlearning will help you with the recorded session of that particular day. However, those recorded sessions are not meant only for personal consumption & NOT for distribution or any commercial use.

Radiant Techlearning has a data center containing a Virtual Training environment for the purpose of professional hand-on-practice. 

Professionals can easily access these labs over Cloud with the help of a remote desktop connection. 

Radiant virtual labs provide you the flexibility to learn from anywhere in the world & in any time zone. 

 

The professionals will be enthralled as we engage them the real-world & industry Oriented projects during the training program. These projects will improve your skills & knowledge & you will gain a better experience. These real-time projects will help you a lot in your future tasks & assignments.

 

Send a Message.


  • Enroll