1. Booting
    1. From bootloader to kernel
    2. First steps in the kernel setup code
    3. Video mode initialization and transition to protected mode
    4. Transition to 64-bit mode
    5. Kernel decompression
    6. Kernel load address randomization
  2. Initialization
    1. First steps in the kernel
    2. Early interrupts handler
    3. Last preparations before the kernel entry point
    4. Kernel entry point
    5. Continue architecture-specific boot-time initializations
    6. Architecture-specific initializations, again...
    7. End of the architecture-specific initializations, almost...
    8. Scheduler initialization
    9. RCU initialization
    10. End of initialization
  3. Interrupts
    1. Introduction
    2. Start to dive into interrupts
    3. Interrupt handlers
    4. Initialization of non-early interrupt gates
    5. Implementation of some exception handlers
    6. Handling Non-Maskable interrupts
    7. Dive into external hardware interrupts
    8. Initialization of external hardware interrupts structures
    9. Softirq, Tasklets and Workqueues
    10. Last part
  4. System calls
    1. Introduction to system calls
    2. How the Linux kernel handles a system call
    3. vsyscall and vDSO
    4. How the Linux kernel runs a program
    5. Implementation of the open system call
    6. Limits on resources in Linux
  5. Timers and time management
    1. Introduction
    2. Clocksource framework
    3. The tick broadcast framework and dyntick
    4. Introduction to timers
    5. Clockevents framework
    6. x86 related clock sources
    7. Time related system calls
  6. Synchronization primitives
    1. Introduction to spinlocks
    2. Queued spinlocks
    3. Semaphores
    4. Mutex
    5. Reader/Writer semaphores
    6. SeqLock
    7. RCU
    8. Lockdep
  7. Memory management
    1. Memblock
    2. Fixmaps and ioremap
    3. kmemcheck
  8. Cgroups
    1. Introduction to Control Groups
  9. SMP
  10. Concepts
    1. Per-CPU variables
    2. Cpumasks
    3. The initcall mechanism
    4. Notification Chains
  11. Data Structures in the Linux Kernel
    1. Doubly linked list
    2. Radix tree
    3. Bit arrays
  12. Theory
    1. Paging
    2. Elf64
    3. Inline assembly
    4. CPUID
    5. MSR
  13. Initial ram disk
    1. initrd
  14. Misc
    1. Linux kernel development
    2. How the kernel is compiled
    3. Linkers
    4. Program startup process in userspace
    5. Write and Submit your first Linux kernel Patch
    6. Data types in the kernel
  15. KernelStructures
    1. IDT
  16. Useful links
  17. Contributors

Linux Insides

Useful links

Linux boot

  • Linux/x86 boot protocol
  • Linux kernel parameters

Protected mode

  • 64-ia-32-architectures-software-developer-vol-3a-part-1-manual.pdf

Memory management in the Linux kernel

  • Notes on the linux kernel VM subsystem by @lorenzo-stoakes

Serial programming

  • 8250 UART Programming
  • Serial ports on OSDEV

VGA

  • Video Graphics Array (VGA)

IO

  • IO port programming

GCC and GAS

  • GCC type attributes
  • Assembler Directives

Important data structures

  • task_struct definition

Useful links

  • Linux x86 Program Start Up
  • Memory Layout in Program Execution (32 bits)