…in a free collaborative book!

linux-insides is a online project developed by 0xAX focused on the making of a book about the linux kernel and its insides:

The goal is simple — to share my modest knowledge about the insides of the linux kernel and help people who are interested in linux kernel insides, and other low-level subject matter.

http://turnoff.us/geek/brothers-conflict/

The project is very detailed and already quite complete, here a content summary:

Booting

  • From bootloader to kernel
  • First steps in the kernel setup code
  • Video mode initialization and transition to protected mode
  • Transition to 64-bit mode
  • Kernel decompression

Initialization

  • First steps in the kernel
  • Early interrupts handler
  • Last preparations before the kernel entry point
  • Kernel entry point
  • Continue architecture-specific boot-time initializations
  • Architecture-specific initializations, again…
  • End of the architecture-specific initializations, almost…
  • Scheduler initialization
  • RCU initialization
  • End of initialization

Interrupts

  • Introduction
  • Start to dive into interrupts
  • Interrupt handlers
  • Initialization of non-early interrupt gates
  • Implementation of some exception handlers
  • Handling Non-Maskable interrupts
  • Dive into external hardware interrupts
  • Initialization of external hardware interrupts structures
  • Softirq, Tasklets and Workqueues
  • Last part

System calls

  • Introduction to system calls
  • How the Linux kernel handles a system call
  • vsyscall and vDSO
  • How the Linux kernel runs a program
  • Implementation of the open system call

Timers and time management

  • Introduction
  • Clocksource framework
  • The tick broadcast framework and dyntick
  • Introduction to timers
  • Clockevents framework
  • x86 related clock sources
  • Time related system calls

Synchronization primitives

  • Introduction to spinlocks
  • Queued spinlocks
  • Semaphores
  • Mutex
  • Reader/Writer semaphores
  • SeqLock
  • RCU
  • Lockdep

Memory management

  • Memblock
  • Fixmaps and ioremap
  • kmemcheck

Cgroups

  • Introduction to Control Groups

SMP

  • Concepts
  • Per-CPU variables
  • Cpumasks
  • The initcall mechanism

Data Structures in the Linux Kernel

  • Doubly linked list
  • Radix tree
  • Bit arrays

Theory

  • Paging
  • Elf64
  • Inline assembly
  • CPUID
  • MSR

Initial ram disk

  • initrd

Misc

  • How the kernel is compiled
  • Linkers
  • Linux kernel development
  • Program startup process in userspace
  • Write and Submit your first Linux kernel Patch
  • Data types in the kernel

KernelStructures

  • IDT

References