본문 바로가기
Embedded/Embedded Software

Kconfig, defconfig, .config? Linux kernel

by aloHyomora 2025. 10. 27.

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) → 빌드


img