Kconfig, defconfig, .config를 이해하기 위해서
“리눅스 커널을 직접 빌드해서 내 보드에서 돌리고 싶다”고 가정해봅시다.
그럼 커널에게 이런 걸 알려줘야 해요
“나는 어떤 CPU를 쓸 거고, 어떤 드라이버를 켜고 끌 거고, 어떤 파일시스템을 쓸 거야.”
이 설정을 ‘커널 설정(configuration)’이라고 부르고,
그걸 저장하고 관리하는 파일들이 바로
Kconfig, defconfig, .config 입니다.
커널 설정의 흐름 한 줄 요약
📂 Kconfig → 📄 defconfig → 🧾 .config
1️⃣ Kconfig — 메뉴 설계도 (설정 항목의 “설계도”)
“어떤 설정 항목이 존재하는가?”를 정의해둔 파일이에요.
- 커널 소스코드 곳곳에 Kconfig 파일이 있음
- 각 디렉터리별로 설정 항목(Menu) 을 정의
- 예를 들어:
menu "Device Drivers"
config USB_SUPPORT
bool "Support USB"
default y
endmenu
이런 식으로 “USB 지원(y/n)” 같은 메뉴를 정의해둔 거예요.
요약: Kconfig는 설정 항목의 설계도 즉, 메뉴 구성 자체를 정의하는 파일이에요.
2️⃣ defconfig — 기본 설정 세트 (출발점)
“보드나 플랫폼에 맞는 기본 설정값”이에요.
예를 들어,
- Raspberry Pi용 defconfig
- STM32용 defconfig
- QEMU 가상 머신용 defconfig
이런 식으로 플랫폼별로 미리 세팅된 값이 있어요.
명령으로 불러올 수 있습니다:
make defconfig
이걸 실행하면 해당 보드의 기본 설정 세트를 불러와 .config를 생성해요.
요약: defconfig는 Kconfig 메뉴의 기본 선택값을 모아둔 출발점이에요.
3️⃣ .config — 내가 최종적으로 선택한 설정 결과
“지금 커널이 어떤 옵션으로 빌드될지”를 실제로 저장하는 파일이에요.
- make menuconfig나 make xconfig 등으로 메뉴에서 옵션을 선택하면
그 결과가 .config 파일에 기록돼요. - 이 파일은 커널 빌드 시 Makefile이 참조해서
“어떤 기능을 컴파일할지” 결정합니다.
예:
CONFIG_USB_SUPPORT=y
CONFIG_SND_SUPPORT=n
이런 식으로 “어떤 기능을 포함할지” 실제로 정리된 결과표예요.
요약: .config는 빌드에 실제로 사용되는 설정 결과물
전체 흐름 시각화
┌────────────┐
│ Kconfig │ ← 메뉴 구조 정의 (설계도)
└──────┬─────┘
│
▼
┌────────────┐
│ defconfig │ ← 보드별 기본 설정값
└──────┬─────┘
│ make defconfig
▼
┌────────────┐
│ .config │ ← 실제 빌드용 설정 결과
└──────┬─────┘
│ make menuconfig / make
▼
커널 빌드 (vmlinux 생성)
핵심 요약 암기법
구분 역할 언제 등장?
| Kconfig | 설정 메뉴 구조 정의 | 커널 소스 디렉토리마다 존재 |
| defconfig | 기본 설정값 모음 | make defconfig 시 사용 |
| .config | 최종 설정 결과 | make menuconfig 실행 후 생성 |
실제 명령 흐름
make defconfig # 기본 설정 불러오기 (.config 생성)
make menuconfig # 세부 설정 수정 (.config 업데이트)
make -j4 # 빌드 시작 (커널 컴파일)
이제 이 세 파일이 서로 관계가 있는 하나의 설정 생명주기라는 게 보이죠?
설계도(Kconfig) → 기본값(defconfig) → 실제 결과(.config) → 빌드

'Embedded > Embedded Software' 카테고리의 다른 글
| POSIX(Portable Operating System Interface for UNIX), pthread (0) | 2025.10.21 |
|---|---|
| 2025 정기 기사 3회 - 임베디드 기사 필기 합격 (0) | 2025.09.10 |
| Makefile default grammer - Pattern Rule, Automatic Variable (0) | 2025.04.25 |
| Makefile default grammar - default structure, using variables, cleaning files, .PHONY (0) | 2025.04.23 |
| ESP-IDF를 이용한 펌웨어 빌드(with CMake), 플래싱, 모니터링 (0) | 2025.04.19 |