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
- ACPI Support
- ATA over Ethernet (AoE)
- Auxiliary Display Support
- A block layer cache (bcache)
- The Android binderfs Filesystem
- Kernel Support for miscellaneous Binary Formats (binfmt_misc)
- The Linux RapidIO Subsystem
- Boot Configuration
- Linux Braille Console
- btmrvl driver
- Control Groups version 1
- Control Group v2
- CIFS
- Clearing WARN_ONCE
- CPU load
- How CPU topology info is exported via sysfs
- Dell Remote BIOS Update driver (dell_rbu)
- Device Mapper
- EDID
- The EFI Boot Stub
- ext4 General Information
- NFS
- gpio
- Notes on the change from 16-bit UIDs to 32-bit UIDs
- Linux support for random number generator in i8xx chipsets
- Using the initial RAM disk (initrd)
- I/O statistics fields
- Java(tm) Binary Kernel Support for Linux v1.03
- IBM’s Journaled File System (JFS) for Linux
- 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)
- Linux Security Module Usage
- RAID arrays
- Memory Management
- Kernel module signing facility
- Mono(tm) Binary Kernel Support for Linux
- Namespaces
- Numa policy hit/miss statistics
- Parport
- Perf Events and tool security
- Power Management
- Linux Plug and Play Documentation
- RapidIO Subsystem Guide
- Reliability, Availability and Serviceability
- Real Time Clock (RTC) Drivers for Linux
- Linux Serial Console
- Video Mode Selection Support 2.13
- Linux Magic System Request Key Hacks
- USB4 and Thunderbolt
- Using UFS
- Unicode support
- Software cursor for VGA
- Video Output Switcher Control
- WiMAX subsystem
- The SGI XFS Filesystem
- 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
- Embargoed hardware issues
- List of maintainers and how to submit kernel changes
- Applying Patches To The Linux Kernel
- Adding a New System Call
- Linux magic numbers
- Why the “volatile” type class should not be used
- (How to avoid) Botching up ioctls
- clang-format
- arch/riscv maintenance guidelines for developers
- Development tools for the kernel
- Coccinelle
- Sparse
- kcov: code coverage for fuzzing
- Using gcov with the Linux kernel
- The Kernel Address Sanitizer (KASAN)
- The Undefined Behavior Sanitizer - UBSAN
- Kernel Memory Leak Detector
- Debugging kernel and modules via gdb
- Using kgdb, kdb and the kernel debugger internals
- Linux Kernel Selftests
- KUnit - Unit Testing for the Linux 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
- Boot-time tracing
- Hardware Latency Detector
- Intel(R) Trace Hub (TH)
- System Trace Module
- MIPI SyS-T over STP
- CoreSight - ARM Hardware Trace
- 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
- ioctl based interfaces
- 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
- InfiniBand and Remote DMA (RDMA) Interfaces
- 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
- Device Frequency Scaling
- 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
- Thermal
- FPGA Subsystem
- ACPI Support
- Kernel driver lp855x
- Kernel Connector
- Console Drivers
- Dell Systems Management Base Driver
- EISA bus support
- IPMB Driver for a Satellite MC
- ISA Drivers
- ISA Plug & Play support by Jaroslav Kysela <perex@suse.cz>
- The io_mapping functions
- Ordering I/O writes to memory-mapped addresses
- 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
- 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
- Linux CPUFreq - CPU frequency and voltage scaling code in the Linux(TM) kernel
- 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)
- I2C/SMBus Subsystem
- Industrial I/O
- ISDN
- 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
- Bare UDP Tunnelling Module Documentation
- batman-adv
- SocketCAN - Controller Area Network
- The UCAN Protocol
- Vendor Device Drivers
- Distributed Switch Architecture
- Linux Devlink Documentation
- Netlink interface for ethtool
- IEEE 802.15.4 Developer’s Guide
- J1939 Documentation
- Linux Networking and Network Devices APIs
- Z8530 Programming Guide
- MSG_ZEROCOPY
- FAILOVER
- Net DIM - Generic Network Dynamic Interrupt Moderation
- 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
- Linux NFC subsystem
- Netdev private dataroom for 6lowpan interfaces
- 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
- 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
- Serial Peripheral Interface (SPI)
- 1-Wire Subsystem
- 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
- Linux Virtualization Support
- 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
- USB Raw Gadget
- USB/IP protocol
- usbmon
- USB serial
- USB references
- Linux CDC ACM inf
- Linux inf
- USB devfs drop permissions source
- 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
- 9. Boot Interrupts
- Linux SCSI Subsystem
- The 53c700 Driver Notes
- AACRAID Driver for Linux (take two)
- AdvanSys Driver Notes
- Adaptec AHA-1520/1522 SCSI driver for Linux (aha152x)
- Adaptec Ultra320 Family Manager Set
- Adaptec Aic7xxx Fast -> Ultra160 Family Manager Set v7.0
- ARECA FIRMWARE SPEC
- Usage of IOP331 adapter
- RS-232 Interface for Areca Raid Controller
- Linux driver for Brocade FC/FCOE adapters
- Operating FCoE using bnx2fc
- BusLogic MultiMaster and FlashPoint SCSI Driver for Linux
- Chelsio S3 iSCSI Driver for Linux
- README file for the dc395x SCSI driver
- Adaptec dpti driver
- The BusLogic FlashPoint SCSI Driver
- README file for the Linux g_NCR5380 driver
- HPSA - Hewlett Packard Smart Array driver
- Highpoint RocketRAID 3xxx/4xxx Adapter Driver (hptiop)
- SAS Layer
- Link Power Managent Policy
- LPFC Driver Release Notes
- Notes on Management Module
- The Linux NCR53C8XX/SYM53C8XX drivers README file
- WorkBiT NinjaSCSI-3/32Bi driver for Linux
- Terse where to get ZIP Drive help info
- Qlogic FASXXX Family Driver Notes
- README for the SCSI media changer driver
- SCSI EH
- SCSI FC Tansport
- Notes on Linux SCSI Generic (sg) driver
- SCSI mid_level - lower_level driver interface
- SCSI Kernel Parameters
- SCSI subsystem documentation
- Linux SCSI Disk Driver (sd) Parameters
- SMARTPQI - Microsemi Smart PQI Driver
- The SCSI Tape Driver
- The sym53c500_cs Driver
- The Linux SYM-2 driver documentation file
- tcm_qla2xxx Driver Notes
- Universal Flash Storage
- Driver for Western Digital WD7193, WD7197 and WD7296 SCSI cards
- SCSI RDMA (SRP) transport class diagram
- Assorted Miscellaneous Devices Documentation
- 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
- MHI
Architecture-agnostic documentation¶
Architecture-specific documentation¶
These books provide programming details about architecture-specific implementation.
- 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
- Activity Monitors Unit (AMU) extension in AArch64 Linux
- 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
- AArch64 TAGGED ADDRESS ABI
- 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
- MIPS-specific Documentation
- Linux on the Nios II architecture
- OpenRISC Architecture
- PA-RISC 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
- ELF Note PowerPC Namespace
- Firmware-Assisted Dump
- HVCS IBM “Hypervisor Virtual Console Server” Installation Guide
- IMC (In-Memory Collection Counters)
- CPU to ISA Version Mapping
- KASLR for Freescale BookE32
- Linux 2.6.x on MPC52xx family
- Hypercall Op-codes (hcalls)
- 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
- Protected Execution Facility
- RISC-V architecture
- s390 Architecture
- Linux for S/390 and zSeries
- IBM 3270 Display System support
- 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)
- 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. Linux IOMMU Support
- 13. Intel(R) TXT Overview
- 14. AMD Memory Encryption
- 15. Page Table Isolation (PTI)
- 16. Microarchitectural Data Sampling (MDS) mitigation
- 17. The Linux Microcode Loader
- 18. User Interface for Resource Control feature
- 19. TSX Async Abort (TAA) mitigation
- 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.