Kernel configuration
Kernel options select the drivers and system features built into Linux. The
S31 defconfig is under linux-esp32-s31/arch/riscv/configs/. The parent
build applies configs/kernel/common.config and board.config, plus
debug.config for DEBUG=1. See Build configuration.
S31 options
Names below omit the CONFIG_ prefix used in .config files.
Option |
Purpose |
|---|---|
|
Core-local interrupt controller |
|
SYSTIMER driver used by the S31 defconfig for the 16 MHz clocksource and S31 timer-event helpers |
|
Alternative Kconfig entry that builds the same SYSTIMER driver |
|
Read-only Counter framework access to SYSTIMER and LP RTC counters |
|
Save and restore coprocessor state |
|
Cache support |
|
Clock and reset provider |
|
Power-domain provider |
|
Runtime overlay manager |
|
DMAengine providers |
|
General-purpose timers and pulse counters |
|
Analog conversion |
|
Comparator and touch sensing |
|
Watchdog support |
|
LP-core firmware and mailbox |
|
Radio firmware integration |
|
Linux S-mode radio runtime |
|
mac80211 single-station frontend |
|
Prelinked radio payload in its dedicated flash slot |
|
Native kernel size optimization ( |
|
Upstream unused-export trimming, retaining the generated radio import whitelist |
|
Generated |
|
Built-in ext4 filesystem and journal support |
|
Bluetooth frontend |
|
Hardware crypto driver |
The peripheral subsystems also have their own options, such as
I2C_ESP32S31, SPI_ESP32S31, and SND_SOC_ESP32S31_I2S. Their Kconfig entries
declare their framework dependencies. I2C and SPI use depends on for
requirements such as clocks and device-tree support; those dependencies must
already be enabled. The I2S option also selects the generic DMAengine PCM
helper. Per-CPU clockevents use the RISC-V timer driver, which calls the S31
SYSTIMER event helper; ESP32S31_SYSTEM_TIMERS is a separate Counter interface.
The parent build enforces size optimization, radio XIP, upstream export trimming with the generated radio whitelist, built-in ext4, and the full board peripheral contract. Removing these required options makes configuration validation fail. The whitelist is generated from the radio payload’s undefined symbols before the native Linux build; do not replace it with a hand-maintained list.
Check a build
After make linux, the resulting configuration is in
out/linux/.config. For example:
grep -E '^(CONFIG_I2C_ESP32S31=|# CONFIG_I2C_ESP32S31 is not set)' out/linux/.config
grep -E '^(CONFIG_ESP32S31_RADIO_SMODE_DRIVER=|# CONFIG_ESP32S31_RADIO_SMODE_DRIVER is not set)' out/linux/.config
y builds a feature into the kernel; m builds a loadable module where the
option supports it. Disabled options are shown as # CONFIG_NAME is not set.
.config is generated. For lasting changes, update the source defconfig and
the parent configs/kernel/*.config fragments affecting the option.
The next parent build reapplies all of these inputs and resolves dependencies
with olddefconfig. Enable the corresponding overlay on the board to use an
optional peripheral; an overlay cannot supply a driver omitted from the build.