---
# System prepended metadata

title: Kconfig
tags: [Linux]

---

# Kconfig

Kconfig 是一種用於配置系統的語言，常見於 Linux kernel 和 ESP-IDF 等嵌入式開發框架中。

## Format

|📘 <span class="note">NOTE</span>|
|:---|
|同一個 `menu` 或 `choice` 區塊內的所有 `config` 名稱，應該要有一個共同的 prefix，長度至少要 3 個字母。|
|若有嵌套關係，不要求 prefix 疊加，但疊加是好習慣。|

## Keywords

### 📁 `menu`

```
menu "Example Configuration"
    ...
endmenu
```
- 定義一個 **選單**。
- 名稱提示：上例為 `"Example Configuration"`。
- 一個 `Kconfig` 內可以有多個 `menu`，且可嵌套。

### 🔀 `choice` / `endchoice`

```
choice BLINK_LED
    prompt "Blink LED type"
    default BLINK_LED_GPIO
    ...
endchoice
```

- 定義一組 **互斥選項**（只能選一個）。
- 一個 `choice` 由多個 `config` 組成。
- `prompt`：名稱提示。
- `default`：預設選項。

### ⚙️ `config`

```
config BLINK_LED_GPIO
    bool "GPIO"
```

- 定義一個 **設定選項**。
- 名稱提示：上例為 `"GPIO"`。
- 型別：可為 `bool`、`int`、`string` ...
- 常見屬性
  | 屬性 | 說明 |
  |------|------|
  | `bool` | 布林選項（開/關） |
  | `int` | 整數輸入 |
  | `string` | 字串輸入 |
  | `prompt` | 選單顯示文字 |
  | `default` | 預設值（可搭配條件） |
  | `range` | 限制輸入範圍（僅適用於 `int`） |
  | `depends on` | 設定條件依賴（僅在條件成立時顯示） |
  | `help` | 說明文字，會顯示在說明欄位中 |

### 🧩 `orsource`

```
orsource "$IDF_PATH/examples/common_components/env_caps/$IDF_TARGET/Kconfig.env_caps"
```

- 導入其他 `Kconfig` 檔案內容。
- 常用於根據目標板子載入不同的配置。

## Options

### 🆘 `help`

```
config BLINK_GPIO
    int "Blink GPIO number"
    help
        GPIO number (IOxx) to blink on and off the LED.
```

- 提供使用者**幫助文檔**。

### 🧷 `depends on`

```
choice BLINK_LED_STRIP_BACKEND
    depends on BLINK_LED_STRIP
    ...
endchoice
```

- 只有當某個 config 被選中時，這個 choice 才會出現。

### 🧪 `if`

```
default BLINK_LED_STRIP_BACKEND_RMT if SOC_RMT_SUPPORTED
```

- 條件成立時才會使用。

## Example

### 🍔 漢堡店菜單

```
menu "Burger Menu"

    menu "Main Course"

        choice BURGER_TYPE
            prompt "Choose your burger type"
            default BURGER_TYPE_CLASSIC
            help
                Please choose your preferred type of burger.

            config BURGER_TYPE_CLASSIC
                bool "Classic Beef Burger"

            config BURGER_TYPE_CHICKEN
                bool "Crispy Chicken Burger"

            config BURGER_TYPE_VEGGIE
                bool "Garden Veggie Burger"
        endchoice

        config BURGER_EXTRA_CHEESE
            bool "Add extra cheese"
            default n
            help
                Add a slice of extra cheese to your burger.

        config BURGER_ADD_BACON
            bool "Add bacon"
            default n
            depends on !BURGER_TYPE_VEGGIE
            help
                Add crispy bacon strips to your burger (Not available for veggie burgers).

        config BURGER_SPICY
            bool "Add hot sauce"
            default n
            depends on BURGER_TYPE_CHICKEN || BURGER_TYPE_CLASSIC
            help
                Only available for meat-based burgers.

    endmenu

    menu "Combo Options"

        config BURGER_SET_COMBO
            bool "Upgrade to combo"
            default y
            help
                Upgrade your meal to a combo with drink and fries.

        menu "Drink Selection"
            depends on BURGER_SET_COMBO

            choice BURGER_DRINK_TYPE
                prompt "Choose your drink"
                default BURGER_DRINK_COKE
                help
                    Choose a drink for your combo meal.

                config BURGER_DRINK_COKE
                    bool "Coke"

                config BURGER_DRINK_TEA
                    bool "Unsweetened Green Tea"

                config BURGER_DRINK_JUICE
                    bool "Orange Juice"
            endchoice
        endmenu

        config BURGER_INCLUDE_KETCHUP
            bool "Include ketchup packets"
            default y
            depends on BURGER_SET_COMBO

        config BURGER_INCLUDE_FRIES
            bool "Include fries"
            default y
            depends on BURGER_SET_COMBO

    endmenu

endmenu
```