The Linux Kernel documentation¶
This is the top level of the kernel’s documentation tree. Kernel documentation, like the kernel itself, is very much a work in progress; that is especially true as we work to integrate our many scattered documents into a coherent whole. Please note that improvements to the documentation are welcome; join the linux-doc list at vger.kernel.org if you want to help out.
Licensing documentation¶
The following describes the license of the Linux kernel source code (GPLv2), how to properly mark the license of individual files in the source tree, as well as links to the full license text.
User-oriented documentation¶
The following manuals are written for users of the kernel — those who are trying to get it to work optimally on a given system.
- The Linux kernel user’s and administrator’s guide
- Linux kernel release 5.x <http://kernel.org/>
- The kernel’s command-line parameters
- Linux allocated devices (4.x+ version)
- Documentation for /proc/sys
- Hardware vulnerabilities
- Reporting bugs
- Security bugs
- Bug hunting
- Bisecting a bug
- Tainted kernels
- Ramoops oops/panic logger
- Dynamic debug
- Explaining the dreaded “No init found.” boot hang message
- Documentation for Kdump - The kexec-based Crash Dumping Solution
- Performance monitor support
- Rules on how to access information in sysfs
- Using the initial RAM disk (initrd)
- Control Group v2
- Control Groups version 1
- Linux Serial Console
- Linux Braille Console
- Parport
- RAID arrays
- Kernel module signing facility
- RapidIO Subsystem Guide
- Linux Magic System Request Key Hacks
- Unicode support
- Software cursor for VGA
- Kernel Support for miscellaneous (your favourite) Binary Formats v1.1
- Mono(tm) Binary Kernel Support for Linux
- Java(tm) Binary Kernel Support for Linux v1.03
- Reliability, Availability and Serviceability
- A block layer cache (bcache)
- The Linux RapidIO Subsystem
- ext4 General Information
- The Android binderfs Filesystem
- The SGI XFS Filesystem
- Power Management
- Thunderbolt
- Linux Security Module Usage
- Memory Management
- Namespaces
- Perf Events and tool security
- ACPI Support
- ATA over Ethernet (AoE)
- btmrvl driver
- Clearing WARN_ONCE
- CPU load
- How CPU topology info is exported via sysfs
- Device Mapper
- The EFI Boot Stub
- gpio
- Notes on the change from 16-bit UIDs to 32-bit UIDs
- Linux support for random number generator in i8xx chipsets
- I/O statistics fields
- Reducing OS jitter due to per-cpu kthreads
- Laptop Drivers
- Parallel port LCD/Keypad Panel support
- LDM - Logical Disk Manager (Dynamic Disks)
- Softlockup detector and hardlockup detector (aka nmi_watchdog)
- Numa policy hit/miss statistics
- Linux Plug and Play Documentation
- Real Time Clock (RTC) Drivers for Linux
- Video Mode Selection Support 2.13
- Video Output Switcher Control
- Kernel Build System
Application-developer documentation¶
The user-space API manual gathers together documents describing aspects of the kernel interface as seen by application developers.
Introduction to kernel development¶
These manuals contain overall information about how to develop the kernel. The kernel community is quite large, with thousands of developers contributing over the course of a year. As with any large community, knowing how things are done will make the process of getting your changes merged much easier.
- Working with the kernel development community
- Linux kernel licensing rules
- HOWTO do Linux kernel development
- Contributor Covenant Code of Conduct
- Linux Kernel Contributor Covenant Code of Conduct Interpretation
- A guide to the Kernel Development Process
- Submitting patches: the essential guide to getting your code into the kernel
- Programming Language
- Linux kernel coding style
- Kernel Maintainer PGP guide
- Email clients info for Linux
- Linux Kernel Enforcement Statement
- Kernel Driver Statement
- Minimal requirements to compile the Kernel
- Submitting Drivers For The Linux Kernel
- The Linux Kernel Driver Interface
- Linux kernel management style
- Everything you ever wanted to know about Linux -stable releases
- Linux Kernel patch submission checklist
- Index of Documentation for People Interested in Writing and/or Understanding the Linux Kernel
- Deprecated Interfaces, Language Features, Attributes, and Conventions
- Applying Patches To The Linux Kernel
- Adding a New System Call
- Linux magic numbers
- Why the “volatile” type class should not be used
- clang-format
- Development tools for the kernel
- How to write kernel documentation
- Kernel Hacking Guides
- Linux Tracing Technologies
- Function Tracer Design
- Notes on Analysing Behaviour Using Events and Tracepoints
- ftrace - Function Tracer
- Using ftrace to hook to functions
- Kprobe-based Event Tracing
- Uprobe-tracer: Uprobe-based Event Tracing
- Using the Linux Kernel Tracepoints
- Event Tracing
- Subsystem Trace Points: kmem
- Subsystem Trace Points: power
- NMI Trace Events
- MSR Trace Events
- In-kernel memory-mapped I/O tracing
- Event Histograms
- Hardware Latency Detector
- Intel(R) Trace Hub (TH)
- System Trace Module
- MIPI SyS-T over STP
- Kernel Maintainer Handbook
- fault-injection
- Kernel Livepatching
Kernel API documentation¶
These books get into the details of how specific kernel subsystems work from the point of view of a kernel developer. Much of the information here is taken directly from the kernel source, with supplemental material added as needed (or at least as we managed to add it — probably not all that is needed).
- The Linux driver implementer’s API guide
- Driver Model
- Driver Basics
- Device drivers infrastructure
- Early Userspace
- CPU and Device Power Management
- The Common Clk Framework
- Bus-Independent Device Accesses
- Device connections
- Buffer Sharing and Synchronization
- Device links
- Component Helper for Aggregate Drivers
- Message-based devices
- Sound Devices
- Frame Buffer Library
- Voltage and current regulator API
- Industrial I/O
- Input Subsystem
- Linux USB API
- Firewire (IEEE 1394) driver Interface Guide
- The Linux PCI driver implementer’s API guide
- Serial Peripheral Interface (SPI)
- I2C and SMBus Subsystem
- IPMB Driver for a Satellite MC
- I3C subsystem
- GENERIC SYSTEM INTERCONNECT SUBSYSTEM
- High Speed Synchronous Serial Interface (HSI)
- Error Detection And Correction (EDAC) Devices
- SCSI Interfaces Guide
- libATA Developer’s Guide
- target and iSCSI Interfaces Guide
- MTD NAND Driver Programming Interface
- Parallel Port Devices
- 16x50 UART Driver
- Pulse-Width Modulation (PWM)
- Intel(R) Management Engine Interface (Intel(R) MEI)
- Memory Technology Device (MTD)
- MMC/SD/SDIO card support
- Non-Volatile Memory Device (NVDIMM)
- W1: Dallas’ 1-wire bus
- The Linux RapidIO Subsystem
- Writing s390 channel device drivers
- VME Device Drivers
- Linux 802.11 Driver Developer’s Guide
- The Userspace I/O HOWTO
- Linux Firmware API
- PINCTRL (PIN CONTROL) subsystem
- General Purpose Input/Output (GPIO)
- RAID
- Miscellaneous Devices
- Near Field Communication
- DMAEngine documentation
- Linux kernel SLIMbus support
- SoundWire Documentation
- FPGA Subsystem
- ACPI Support
- Kernel driver lp855x
- A driver for a selfmade cheap BT8xx based PCI GPIO-card (bt8xxgpio)
- Kernel Connector
- Console Drivers
- Dell Systems Management Base Driver
- Usage of the new open sourced rbu (Remote BIOS Update) driver
- EDID
- EISA bus support
- ISA Drivers
- ISA Plug & Play support by Jaroslav Kysela <perex@suse.cz>
- Generic Counter Interface
- pblk: Physical Block Device Target
- Memory Controller drivers
- MEN Chameleon Bus
- NTB Drivers
- NVMEM Subsystem
- PARPORT interface documentation
- PPS - Pulse Per Second
- PTP hardware clock infrastructure for Linux
- Generic PHY Framework
- Intel MID PTI
- Pulse Width Modulation (PWM) interface
- rfkill - RF kill switch support
- Support for Serial devices
- SGI IOC4 PCI (multi function) device
- SM501 Driver
- Msc Keyboard Scan Expansion/GPIO Expansion device
- Linux Switchtec Support
- Sync File API Guide
- VFIO Mediated devices
- VFIO - “Virtual Function I/O”
- Xilinx FPGA
- Xillybus driver for generic FPGA interface
- Writing Device Drivers for Zorro Devices
- Core API Documentation
- locking
- Accounting
- Block
- BFQ (Budget Fair Queueing)
- Notes on the Generic Block Layer Rewrite in Linux 2.5
- Immutable biovecs and biovec iterators
- Generic Block Device Capability
- Embedded device command line partition parsing
- Data Integrity
- Deadline IO scheduler tunables
- Block io priorities
- Kyber I/O scheduler tunables
- Null block device driver
- Block layer support for Persistent Reservations
- Queue sysfs files
- struct request documentation
- Block layer statistics in /sys/block/<dev>/stat
- Switching Scheduler
- Explicit volatile write back cache control
- cdrom
- Integrated Drive Electronics (IDE)
- Frame Buffer
- The Frame Buffer Device API
- arkfb - fbdev driver for ARK Logic chips
- What is aty128fb?
- Framebuffer driver for Cirrus Logic chipsets
- Understanding fbdev’s cmap
- Deferred IO
- What is efifb?
- Driver for EP93xx LCD controller
- Video Attribute Flags
- Platform callbacks
- Setting the video mode
- Screenpage bug
- The Framebuffer Console
- The Frame Buffer Device
- What is gxfb?
- Intel 810/815 Framebuffer driver
- Intel 830M/845G/852GM/855GM/865G/915G/945G Framebuffer driver
- Frame Buffer device internals
- What is lxfb?
- What is matroxfb?
- Metronomefb
- modedb default video mode support
- What is pvr2fb?
- Driver for PXA25x LCD controller
- s3fb - fbdev driver for S3 Trio/Virge chips
- What is sa1100fb?
- SH7760/SH7763 integrated LCDC Framebuffer driver
- What is sisfb?
- sm501fb
- What is sm712fb?
- sstfb
- What is tgafb?
- Tridentfb
- What is udlfb?
- uvesafb - A Generic Driver for VBE2+ compliant video cards
- What is vesafb?
- VIA Integration Graphic Chip Console Framebuffer Driver
- vt8623fb - fbdev driver for graphics core in VIA VT8623 chipset
- fpga
- Human Interface Devices (HID)
- Industrial I/O
- InfiniBand
- LEDs
- LED handling under Linux
- Flash LED handling under Linux
- One-shot LED Trigger
- LED Transient Trigger
- USB port LED trigger
- Userspace LEDs
- Leds BlinkM driver
- Kernel driver for lm3556
- Kernel driver lp3944
- Kernel driver for lp5521
- Kernel driver for lp5523
- Kernel driver for lp5562
- LP5521/LP5523/LP55231/LP5562/LP8501 Common Driver
- Kernel driver for Mellanox systems LEDs
- Linux Media Subsystem Documentation
- NetLabel
- Linux Networking Documentation
- netdev FAQ
- AF_XDP
- batman-adv
- SocketCAN - Controller Area Network
- The UCAN Protocol
- Vendor Device Drivers
- Distributed Switch Architecture
- Devlink info versions
- IEEE 802.15.4 Developer’s Guide
- Linux Networking and Network Devices APIs
- Z8530 Programming Guide
- MSG_ZEROCOPY
- FAILOVER
- NET_FAILOVER
- PHY Abstraction Layer
- phylink
- IP-Aliasing
- Ethernet Bridging
- SNMP counter
- Checksum Offloads
- Segmentation Offloads
- Scaling in the Linux Networking Stack
- Kernel TLS
- Kernel TLS offload
- pcmcia
- Power Management
- APM or ACPI?
- Debugging hibernation and suspend
- Charger Manager
- Testing suspend and resume support in device drivers
- Energy Model of CPUs
- Freezing of tasks
- Power Management Interface for System Sleep
- Operating Performance Points (OPP) Library
- PCI Power Management
- PM Quality Of Service Interface
- Linux power supply class
- Runtime Power Management Framework for I/O Devices
- How to get s2ram working
- Interaction of Suspend code (S3) with the CPU hotplug infrastructure
- System Suspend and Device Interrupts
- Using swap files with software suspend (swsusp)
- How to use dm-crypt and swsusp together
- Swap suspend
- Video issues with S3 resume
- swsusp/S3 tricks
- Documentation for userland software suspend interface
- Power Capping Framework
- Regulator Consumer Driver Interface
- Regulator API design notes
- Regulator Machine Driver Interface
- Linux voltage and current regulator framework
- Regulator Driver Interface
- TCM Virtual Device
- timers
- High resolution timers and dynamic ticks design notes
- High Precision Event Timer Driver for Linux
- hrtimers - subsystem for high-resolution kernel timers
- NO_HZ: Reducing Scheduling-Clock Ticks
- Clock sources, Clock events, sched_clock() and delay timers
- delays - Information on the various kernel delay / sleep mechanisms
- Linux Watchdog Support
- HPE iLO NMI Watchdog Driver
- Mellanox watchdog drivers
- Berkshire Products PC Watchdog Card
- The Linux Watchdog driver API
- The Linux WatchDog Timer Driver Core kernel API
- WatchDog Module Parameters
- The Linux WatchDog Timer Power Management Guide
- WDT Watchdog Timer Interfaces For The Linux Operating System
- Converting old watchdog drivers to the watchdog framework
- The Linux Input Documentation
- Linux Hardware Monitoring
- Linux GPU Driver Developer’s Guide
- Security Documentation
- Credentials in Linux
- IMA Template Management Mechanism
- Kernel Keys
- Linux Security Modules: General Security Hooks for Linux
- Linux Security Module Development
- Linux Secure Attention Key (SAK) handling
- SCTP
- Kernel Self-Protection
- SipHash - a short input PRF
- HalfSipHash - SipHash’s insecure younger cousin
- Trusted Platform Module documentation
- Linux Sound Subsystem Documentation
- Linux Kernel Crypto API
- Filesystems in the Linux kernel
- Linux Memory Management Documentation
- BPF Documentation
- USB support
- Linux ACM driver v0.16
- Authorizing (or not) your USB devices to connect to the system
- ChipIdea Highspeed Dual Role Controller Driver
- DWC3 driver
- EHCI driver
- How FunctionFS works
- Linux USB gadget configured through configfs
- Linux USB HID gadget driver
- Multifunction Composite Gadget
- Linux USB Printer Gadget Driver
- Linux Gadget Serial Driver v2.0
- Gadget Testing
- Infinity Usb Unlimited Readme
- Mass Storage Gadget (MSG)
- USB 7-Segment Numeric Display
- mtouchusb driver
- OHCI
- Diamonds Rio
- USB/IP protocol
- usbmon
- USB serial
- Linux UWB + Wireless USB + WiNET
- USB references
- Linux CDC ACM inf
- Linux inf
- USB devfs drop permissions source
- WUSB command line script to manipulate auth credentials
- Credits
- Linux PCI Bus Subsystem
- 1. How To Write Linux PCI Drivers
- 2. The PCI Express Port Bus Driver Guide HOWTO
- 3. PCI Express I/O Virtualization Howto
- 4. The MSI Driver Guide HOWTO
- 5. ACPI considerations for PCI host bridges
- 6. PCI Error Recovery
- 7. The PCI Express Advanced Error Reporting Driver Guide HOWTO
- 8. PCI Endpoint Framework
- Assorted Miscellaneous Devices Documentation
- Intel Many Integrated Core (MIC) architecture
- Linux Scheduler
- Completions - “wait for completion” barrier APIs
- CPU Scheduler implementation hints for architecture specific code
- CFS Bandwidth Control
- Deadline Task Scheduling
- CFS Scheduler
- Scheduler Domains
- Energy Aware Scheduling
- Scheduler Nice Design
- Real-Time group scheduling
- Scheduler Statistics
- Scheduler pelt c program
Architecture-specific documentation¶
These books provide programming details about architecture-specific implementation.
- SuperH Interfaces Guide
- ARM Architecture
- ARM Linux 2.6 and upper
- Booting ARM Linux
- Cluster-wide Power-up/power-down race avoidance algorithm
- Interface for registering and calling firmware-specific operations for ARM
- Interrupts
- Kernel mode NEON
- Kernel-provided User Helpers
- Kernel Memory Layout on ARM Linux
- Memory alignment
- ARM TCM (Tightly-Coupled Memory) handling in Linux
- Kernel initialisation parameters on ARM Linux
- Software emulation of deprecated SWP instruction (CONFIG_SWP_EMULATE)
- The Unified Extensible Firmware Interface (UEFI)
- vlocks for Bare-Metal Mutual Exclusion
- Porting
- SoC-specific documents
- ARM64 Architecture
- ACPI Tables
- ACPI on ARMv8 Servers
- Booting AArch64 Linux
- ARM64 CPU Feature Registers
- ARM64 ELF hwcaps
- HugeTLBpage on ARM64
- Legacy instructions
- Memory Layout on AArch64 Linux
- Pointer authentication in AArch64 Linux
- Silicon Errata and Software Workarounds
- Scalable Vector Extension support for AArch64 Linux
- Tagged virtual addresses in AArch64 Linux
- IA-64 Architecture
- Linux kernel release for the IA-64 Platform
- Memory Attribute Aliasing on IA-64
- EFI Real Time Clock driver
- IPF Machine Check (MC) error inject tool
- Light-weight System Calls for IA-64
- IRQ affinity on IA64 platforms
- An ad-hoc collection of notes on IA64 MCA and INIT processing
- Serial Devices
- Recipe for getting/building/running Xen/ia64 with pv_ops
- m68k Architecture
- powerpc
- The PowerPC boot wrapper
- CPU Families
- CPU Features
- Coherent Accelerator Interface (CXL)
- Coherent Accelerator (CXL) Flash
- DAWR issues on POWER9
- DSCR (Data Stream Control Register)
- PCI Bus EEH Error Recovery
- Firmware-Assisted Dump
- HVCS IBM “Hypervisor Virtual Console Server” Installation Guide
- CPU to ISA Version Mapping
- Linux 2.6.x on MPC52xx family
- PCI Express I/O Virtualization Resource on Powerenv
- PMU Event Based Branches
- Ptrace
- Freescale QUICC Engine Firmware Uploading
- Power Architecture 64-bit Linux system call ABI
- Transactional Memory support
- RISC-V architecture
- s390 Architecture
- Linux for S/390 and zSeries
- IBM 3270 Display System support
- Debugging on Linux for s/390 & z/Architecture
- S/390 driver model interfaces
- Linux API for read access to z/VM Monitor Records
- IBM s390 QDIO Ethernet Driver
- S390 Debug Feature
- Adjunct Processor (AP) facility
- vfio-ccw: the basic infrastructure
- The s390 SCSI dump tool (zfcpdump)
- DASD device driver
- S/390 common I/O-Layer
- ibm 3270 changelog
- ibm 3270 config3270.sh
- SuperH Interfaces Guide
- Sparc Architecture
- x86-specific Documentation
- 1. The Linux/x86 Boot Protocol
- 2. x86 Topology
- 3. Kernel level exception handling
- 4. Kernel Stacks
- 5. Kernel Entries
- 6. Early Printk
- 7. ORC unwinder
- 8. Zero Page
- 9. The TLB
- 10. MTRR (Memory Type Range Register) control
- 11. PAT (Page Attribute Table)
- 12. Intel(R) Memory Protection Extensions (MPX)
- 13. Linux IOMMU Support
- 14. Intel(R) TXT Overview
- 15. AMD Memory Encryption
- 16. Page Table Isolation (PTI)
- 17. Microarchitectural Data Sampling (MDS) mitigation
- 18. The Linux Microcode Loader
- 19. User Interface for Resource Control feature
- 20. USB Legacy support
- 21. i386 Support
- 22. x86_64 Support
- Xtensa Architecture
Filesystem Documentation¶
The documentation in this section are provided by specific filesystem subprojects.