Open-Source Wikis

/

Linux

/

Reference

/

Configuration

torvalds/linux

Configuration

The kernel is configured by Kconfig. The configuration is materialized into a .config file at the repository root which the build reads. Modules and built-ins, debug options, sanitizers, and architecture features are all controlled by Kconfig.

The configuration cycle

graph LR
    A[Kconfig files in tree] -->|read by| B[scripts/kconfig]
    B -->|writes| C[.config]
    C -->|materialized into| D[include/generated/autoconf.h, Kconfig include files]
    D -->|consumed during build| E[Kbuild]
    E --> F[vmlinux + modules]

Common targets

Target What it does
make defconfig Default config for the host arch
make ARCH=arm64 defconfig Default config for arm64
make <name>_defconfig Pick a arch/<arch>/configs/<name>_defconfig
make menuconfig ncurses UI
make nconfig, xconfig, gconfig Other UIs
make olddefconfig Accept defaults for newly added options
make oldconfig Interactive prompt for new options
make savedefconfig Write a minimal defconfig that reproduces the current .config
make localmodconfig Trim .config to only what your machine has loaded
make allyesconfig, allnoconfig, allmodconfig Build everything / nothing / everything as modules
make randconfig Random config (used by build farms)
make help List all targets

The Kconfig program lives in scripts/kconfig/.

Kconfig file structure

Each directory has its own Kconfig file, included by parent Kconfigs via source. The hierarchy starts at the top-level Kconfig.

config CONFIG_FOO
    bool "User-friendly name"
    depends on BAR && !BAZ
    default y
    help
      Multi-line help text shown in menuconfig.

Types: bool, tristate (y/m/n), string, int, hex. Tristate options can be built into the kernel (y) or as modules (m).

Example defconfigs

File Use
arch/x86/configs/x86_64_defconfig A reasonable x86_64 config
arch/arm64/configs/defconfig The big arm64 defconfig
arch/riscv/configs/defconfig RISC-V
kernel/configs/*.config Fragments to overlay (tiny.config, kvm_guest.config, rt.config, …)

Apply a fragment:

make x86_64_defconfig
./scripts/kconfig/merge_config.sh -m .config kernel/configs/kvm_guest.config
make olddefconfig

Important Kconfig groups (tip-of-the-iceberg)

The full menu is enormous. A few Kconfig "spheres" that come up often:

  • Architecturearch/<arch>/Kconfig and per-platform Kconfigs.
  • Processor type and features — CPU family, NUMA, NR_CPUS.
  • Memory model — sparsemem vs. flatmem; vmemmap; HIGHMEM (32-bit); page size on archs that allow it.
  • Kernel hacking — sanitizers, lockdep, debug objects, KASAN, UBSAN.
  • Security options — LSMs (CONFIG_LSM=...), seccomp, lockdown, randstruct.
  • Networking — IPv6 hash, BPF, XDP, kTLS, MPTCP, netfilter modules.
  • Device drivers — the bulk of any defconfig.
  • General setup — preempt model, init system flavor, BPF, kallsyms, IKCONFIG.
  • General architecture-dependent options — page size, addressable memory, CMA.
  • Cryptographic API — every algorithm.

Build system

Kbuild is the recursive make engine driven by make from the top. See Subsystems → Scripts for the engine itself.

Common Make variables

Variable Purpose
ARCH Cross-build target architecture
CROSS_COMPILE Toolchain prefix (e.g. aarch64-linux-gnu-)
LLVM=1 Use clang/lld toolchain
O=path Out-of-tree build directory
KBUILD_OUTPUT Same effect as O= (env var form)
CC=, LD=, AR=, STRIP=, OBJCOPY= Override individual tools
KAFLAGS=, KCFLAGS=, KCPPFLAGS= Extra flags
V=1 Verbose build (show every command)
W=1, W=2, W=3 Increasing warning level
C=1, C=2 Run sparse

Out-of-tree build

mkdir /tmp/build
make O=/tmp/build defconfig
make O=/tmp/build -j$(nproc)

This keeps the source tree clean.

Module signing

CONFIG_MODULE_SIG=y requires the kernel to verify modules. The build embeds the public key from CONFIG_SYSTEM_TRUSTED_KEYS= (defaulting to a generated signing_key.pem under the build directory). See Subsystems → Certs.

Compressed kernel image

Each architecture compresses vmlinux with one of gzip, bzip2, lzma, xz, lzo, lz4, zstd (selectable in General setupKernel compression mode). The compressed image is then wrapped in arch-specific glue to make bzImage / Image / vmlinuz.

Where to look

Built by Factory AutoWiki from public repository content. It is a generated preview for codebase exploration, not source-maintained documentation.

Configuration – Linux wiki | Factory