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
- Linux ABI description
- Feature status on all architectures
- Hardware vulnerabilities
- Reporting issues
- Security bugs
- Bug hunting
- Bisecting a bug
- Tainted kernels
- Ramoops oops/panic logger
- Dynamic debug
- Explaining the “No working init found.” boot hang message
- Documentation for Kdump - The kexec-based Crash Dumping Solution
- Performance monitor support
- pstore block oops/panic logger
- 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
- Media subsystem admin and user guide
- 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
- Set udev rules for PMF Smart PC Builder
- Linux Plug and Play Documentation
- RapidIO Subsystem Guide
- Reliability, Availability and Serviceability (RAS)
- Address translation
- Real Time Clock (RTC) Drivers for Linux
- Linux Serial Console
- Video Mode Selection Support 2.13
- Syscall User Dispatch
- Linux Magic System Request Key Hacks
- Thermal Subsystem
- USB4 and Thunderbolt
- Using UFS
- Unicode support
- Software cursor for VGA
- Video Output Switcher Control
- 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.
- The Linux kernel user-space API guide
- No New Privileges Flag
- Seccomp BPF (SECure COMPuting with filters)
- Landlock: unprivileged access control
- unshare system call
- Speculation Control
- OpenCAPI (Open Coherent Accelerator Processor Interface)
- Firmware Control (FWCTL) Userspace API
- eBPF Userspace API
- IOCTLs
- IOMMU Userspace API
- IOMMUFD
- Linux Media Infrastructure userspace API
- Netlink Handbook
- Platform Profile Selection (e.g. /sys/firmware/acpi/platform_profile)
- futex2
- VDUSE - “vDPA Device in Userspace”
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
- Unaligned Memory Accesses
- Development tools for the kernel
- Kernel Testing Guide
- Checkpatch
- Coccinelle
- Sparse
- kcov: code coverage for fuzzing
- Using gcov with the Linux kernel
- The Kernel Address Sanitizer (KASAN)
- The Kernel Memory Sanitizer (KMSAN)
- The Undefined Behavior Sanitizer - UBSAN
- Kernel Memory Leak Detector
- The Kernel Concurrency Sanitizer (KCSAN)
- Kernel Electric-Fence (KFENCE)
- Debugging kernel and modules via gdb
- Using kgdb, kdb and the kernel debugger internals
- Linux Kernel Selftests
- KUnit - Linux Kernel Unit Testing
- 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
- Fprobe - Function entry/exit probe
- Kernel Probes (Kprobes)
- 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
- Histogram Design Notes
- Boot-time tracing
- Hardware Latency Detector
- OSNOISE Tracer
- Timerlat tracer
- Intel(R) Trace Hub (TH)
- Lockless Ring Buffer Design
- System Trace Module
- MIPI SyS-T over STP
- CoreSight - ARM Hardware Trace
- Runtime Verification
- Kernel Maintainer Handbook
- fault-injection
- Kernel Livepatching
- Rust
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
- Buffer Sharing and Synchronization
- Device links
- Component Helper for Aggregate Drivers
- Extcon Device Subsystem
- Message-based devices
- InfiniBand and Remote DMA (RDMA) Interfaces
- Managing Ownership of the Framebuffer Aperture
- Frame Buffer Library
- Voltage and current regulator API
- Reset controller API
- Industrial I/O
- Input Subsystem
- Linux USB API
- Firewire (IEEE 1394) driver Interface Guide
- The Linux PCI driver implementer’s API guide
- Compute Express Link
- Serial Peripheral Interface (SPI)
- I2C and SMBus Subsystem
- IPMB Driver for a Satellite MC
- The Linux IPMI Driver
- 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
- The Common Mailbox Framework
- 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
- Media subsystem kernel internal API
- Miscellaneous Devices
- Near Field Communication
- DMAEngine documentation
- Linux kernel SLIMbus support
- SoundWire Documentation
- Thermal
- FPGA Subsystem
- ACPI Support
- Auxiliary Bus
- Kernel driver lp855x
- Kernel Connector
- Console Drivers
- Dell Systems Management Base Driver
- EISA bus support
- 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
- 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
- Pulse Width Modulation (PWM) interface
- PLDM Firmware Flash Update Library
- Overview of the
pldmfwlibrary - rfkill - RF kill switch support
- Support for Serial devices
- SM501 Driver
- Surface System Aggregator Module (SSAM)
- Linux Switchtec Support
- Sync File API Guide
- VFIO Mediated devices
- VFIO - “Virtual Function I/O”
- Acceptance criteria for vfio-pci device specific driver variants
- Virtio
- Xilinx FPGA
- Xillybus driver for generic FPGA interface
- Writing Device Drivers for Zorro Devices
- The Linux Hardware Timestamping Engine (HTE)
- The Linux kernel dpll subsystem
- WBRF - Wifi Band RFI Mitigations
- Crypto Drivers
- Core API Documentation
- locking
- Lock types and their rules
- Runtime locking correctness validator
- Lock Statistics
- Kernel Lock Torture Test Operation
- Generic Mutex Subsystem
- RT-mutex implementation design
- RT-mutex subsystem with PI support
- Sequence counters and sequential locks
- Locking lessons
- Wound/Wait Deadlock-Proof Mutex Design
- Proper Locking Under a Preemptible Kernel: Keeping Kernel Code Preempt-Safe
- Lightweight PI-futexes
- Futex Requeue PI
- Hardware Spinlock Framework
- Percpu rw semaphores
- A description of what robust futexes are
- The robust futex ABI
- Accounting
- Block
- BFQ (Budget Fair Queueing)
- Immutable biovecs and biovec iterators
- Multi-Queue Block IO Queueing Mechanism (blk-mq)
- Embedded device command line partition parsing
- Data Integrity
- Deadline IO scheduler tunables
- Inline Encryption
- 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
- 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)
- Introduction to HID report descriptors
- Care and feeding of your Human Interface Devices
- HIDRAW - Raw Access to USB and Bluetooth Human Interface Devices
- HID Sensors Framework
- HID I/O Transport Drivers
- HID-BPF
- UHID - User-space I/O driver support for HID subsystem
- ALPS HID Touchpad Protocol
- Intel Integrated Sensor Hub (ISH)
- Intel Touch Host Controller (THC)
- AMD Sensor Fusion Hub
- I2C/SMBus Subsystem
- Industrial I/O
- ISDN
- InfiniBand
- LEDs
- LED handling under Linux
- Flash LED handling under Linux
- Multicolor LED handling under Linux
- One-shot LED Trigger
- LED Transient Trigger
- USB port LED trigger
- Userspace LEDs
- Leds BlinkM driver
- Kernel driver for Crane EL15203000
- 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
- Kernel driver for Spreadtrum SC27XX
- NetLabel
- Linux Networking Documentation
- netdev FAQ
- AF_XDP
- Bare UDP Tunnelling Module Documentation
- batman-adv
- SocketCAN - Controller Area Network
- The UCAN Protocol
- Hardware Device Drivers
- Networking Diagnostics
- Distributed Switch Architecture
- Linux Devlink Documentation
- CAIF
- Netlink interface for ethtool
- IEEE 802.15.4 Developer’s Guide
- J1939 Documentation
- Linux Networking and Network Devices APIs
- MSG_ZEROCOPY
- FAILOVER
- Net DIM - Generic Network Dynamic Interrupt Moderation
- NET_FAILOVER
- Page Pool API
- 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
- In-Kernel TLS Handshake
- Linux NFC subsystem
- Netdev private dataroom for 6lowpan interfaces
- 6pack Protocol
- ARCnet Hardware
- ARCnet
- ATM
- AX.25
- Linux Ethernet Bonding Driver HOWTO
- cdc_mbim - Driver for CDC MBIM Mobile Broadband modems
- DCCP protocol
- DCTCP (DataCenter TCP)
- Linux DECnet Networking Layer Information
- DNS Resolver Module
- Softnet Driver Issues
- EQL Driver: Serial IP Load Balancing HOWTO
- LC-trie implementation notes
- Linux Socket Filtering aka Berkeley Packet Filter (BPF)
- Generic HDLC layer
- Generic Netlink
- Netlink Family Specifications
- Generic networking statistics for netlink users
- The Linux kernel GTP tunneling module
- Identifier Locator Addressing (ILA)
- AppleTalk-IP Decapsulation and AppleTalk-IP Encapsulation
- IP dynamic address hack-port v0.03
- IPsec
- IP Sysctl
- IPv6
- IPVLAN Driver HOWTO
- IPvs-sysctl
- Kernel Connection Multiplexor
- L2TP
- The Linux LAPB Module Interface
- How to use packet injection with mac80211
- MPLS Sysfs variables
- MPTCP Sysfs variables
- HOWTO for multiqueue network device support
- Multi-PF Netdev
- Common Networking Struct Cachelines
- Netconsole
- Netdev features mess and how to get out from it alive
- Network Devices, the Kernel, and You!
- Netfilter Sysfs variables
- NETIF Msg Level
- Resilient Next-hop Groups
- Netfilter Conntrack Sysfs variables
- Netfilter’s flowtable infrastructure
- Open vSwitch datapath developer documentation
- Operational States
- Packet MMAP
- Linux Phonet protocol family
- PHY link topology
- HOWTO for the linux packet generator
- PLIP: The Parallel Line Internet Protocol Device
- PPP Generic Driver and Channel Interface
- The proc/net/tcp and proc/net/tcp6 variables
- Power Sourcing Equipment (PSE) Documentation
- How to use radiotap headers
- Overview
- R