본문 바로가기
경제

임베디드기사 실기 20부작 5편 ## Kconfig, defconfig, .config의 관계 — Linux Kernel 설정은 어떻게 만들어지는가?

by 프레스러쉬 2026. 9. 15.

임베디드기사 실기 20부작 5편

Kconfig, defconfig, .config의 관계 — Linux Kernel 설정은 어떻게 만들어지는가?

이번 편에서는 Linux Kernel을 빌드하기 전에 반드시 거치게 되는 설정 체계를 정리합니다. 이름이 비슷한 Kconfig, defconfig, .config는 실기시험에서 흐름도·빈칸·단답형으로 출제하기 좋은 주제입니다.

1. 왜 Kernel을 빌드하기 전에 ‘설정’이 필요한가?

Linux Kernel은 하나의 고정된 프로그램이 아닙니다. 어떤 시스템에서는 Ethernet이 필요하고, 다른 시스템에서는 Wi‑Fi만 필요할 수 있습니다. 어떤 보드는 EXT4 파일시스템을 사용하지만, 어떤 임베디드 장비는 Flash 기반의 전용 파일시스템을 사용합니다. CPU Architecture, Memory Size, Peripheral, Driver, Network 기능도 모두 다릅니다.

따라서 Kernel을 빌드할 때는 “이 기능을 Kernel 안에 포함할 것인가, Module로 만들 것인가, 아예 제외할 것인가”를 결정해야 합니다. 이 결정을 체계적으로 관리하는 것이 Linux Kernel Configuration System입니다.

2. 가장 먼저 외워야 할 전체 흐름
[ Kconfig / Kconfig.* ] ───────────┐ ▼ [ arch/<arch>/configs/defconfig ] → [ make menuconfig / oldconfig ] → [ .config ] → [ Makefile / Kernel Build ]

이 흐름 하나만 정확히 기억해도 관련 문제 대부분을 해결할 수 있습니다.

Kconfig는 “무엇을 선택할 수 있는가”를 정의합니다. defconfig는 “이 Board라면 기본적으로 무엇을 선택할 것인가”를 담습니다. 그리고 .config는 실제 사용자가 선택한 결과가 저장되는 최종 설정 파일입니다.

3. Kconfig — 설정 메뉴의 ‘규칙서’

Kconfig는 Kernel Source Tree의 여러 디렉터리에 존재하며, 설정 메뉴의 구조와 각 Option의 의미를 정의합니다. 쉽게 말하면 “설정 항목을 만드는 설계서”입니다.

Kconfig 안에는 보통 다음과 같은 개념이 등장합니다.

  • config : 설정 항목을 선언합니다.
  • bool : y/n 두 상태를 갖는 Option입니다.
  • tristate : y/m/n 세 상태를 가질 수 있습니다.
  • depends on : 다른 Option이 활성화되어야 사용할 수 있다는 의존성을 나타냅니다.
  • select : 다른 Option을 함께 선택하도록 하는 관계를 나타냅니다.
  • help : 해당 항목의 설명을 제공합니다.

시험에서는 Kconfig의 세부 문법까지 깊게 쓰기보다는 “메뉴 항목, Option Type, 의존성 등을 정의하는 파일”이라는 역할을 명확히 적는 것이 중요합니다.

시험용 3문장 답안
Kconfig는 Linux Kernel에서 선택 가능한 기능과 Menu Structure를 정의하는 설정 규칙 파일이다. Option의 Type, 의존성(depends on), 선택 관계(select) 등을 기술한다. make menuconfig 등의 설정 도구는 Kconfig를 읽어 사용자에게 설정 화면을 제공한다.
4. defconfig — 특정 Board를 위한 ‘기본 출발점’

Kernel은 매우 많은 설정 Option을 가지고 있습니다. 새로운 Board를 가져올 때 모든 Option을 처음부터 선택한다면 시간이 오래 걸릴 뿐 아니라 실수도 많아집니다. 그래서 Architecture나 Board별로 검증된 기본 설정을 미리 준비해 둡니다. 이것이 defconfig(Default Configuration)입니다.

대표적인 위치는 다음과 같습니다.

arch/<arch>/configs/

예를 들어 ARM 계열이라면 arch/arm/configs/ 아래에 Board 또는 SoC Family에 맞는 여러 기본 설정 파일이 존재할 수 있습니다.

defconfig는 최종 설정 파일 그 자체라기보다 “이 Target에서 시작하기 좋은 기준점”이라는 점을 기억하면 이해가 쉽습니다.

시험 핵심
Kconfig = 선택 규칙 / defconfig = Board 기본값 / .config = 실제 최종값
5. make menuconfig — 사람이 설정을 편집하는 도구

Kconfig와 기본 설정이 준비되어 있더라도 실제 Project에서는 Board의 용도에 맞춰 설정을 수정해야 합니다. 이때 자주 사용하는 도구가 make menuconfig입니다.

menuconfig는 Kconfig가 정의한 Menu와 의존성을 읽어 Text GUI 형태의 설정 화면을 제공합니다. 사용자는 여기서 Network, Filesystem, Driver, Debug, Security, CPU Option 등을 선택합니다.

tristate Option에서 볼 수 있는 대표 값은 다음과 같습니다.

의미
y Kernel Image 안에 기능을 직접 포함
m Loadable Kernel Module로 빌드
n 해당 기능을 빌드에서 제외

즉, menuconfig는 설정 파일 자체가 아니라 설정을 편집하는 사용자 Interface입니다.

6. .config — 실제 Kernel Build가 참고하는 ‘최종 결과’

사용자가 defconfig를 불러오고 menuconfig 등으로 수정한 뒤에는 Kernel Source의 최상위 Directory에 .config라는 숨김 파일이 만들어집니다.

이 파일에는 실제 Build에 사용할 Option이 다음과 같은 형태로 저장됩니다.

CONFIG_NET=y CONFIG_EXT4_FS=m # CONFIG_DEBUG_INFO is not set

Kernel Build 과정에서는 이 .config를 기준으로 어떤 Source를 Compile할지, 어떤 기능을 내장할지, 어떤 기능을 Module로 만들지를 결정하게 됩니다.

따라서 실기에서 “실제 Kernel Compile 시 참조하는 최종 설정 결과 파일”이라는 표현이 나오면 가장 먼저 .config를 떠올려야 합니다.

7. Kconfig, defconfig, .config를 한 번에 비교하기
항목 역할 한 줄 암기
Kconfig Menu·Option·의존성 규칙 정의 무엇을 선택할 수 있는가?
defconfig Architecture/Board 기본 설정 처음 무엇을 선택해 둘 것인가?
.config 현재 Build의 최종 설정 실제로 무엇을 Build할 것인가?
8. 실기시험에서는 어떻게 변형되어 나올 수 있을까?

이 주제는 단순한 단답형뿐 아니라 흐름도와 빈칸 문제로 변형하기 좋습니다.

예상문제 1
Linux Kernel의 Menu와 의존성 규칙을 정의하는 파일은 무엇인가?
정답: Kconfig

예상문제 2
특정 Board 또는 Architecture용 기본 Kernel 설정 파일은 무엇인가?
정답: defconfig

예상문제 3
Kernel Build 시 Makefile이 참조하는 최종 설정 결과 파일은 무엇인가?
정답: .config

예상문제 4
다음 흐름의 빈칸을 채우시오.
Kconfig + ( A ) → make menuconfig → ( B ) → Kernel Build
정답: A=defconfig, B=.config

9. 현장에서 왜 중요한가 — ‘Kernel이 안 올라온다’보다 먼저 볼 것

실무에서 Kernel Porting이나 Driver Integration을 하다 보면 “Driver가 안 보인다”, “Device Node가 생기지 않는다”, “Network Interface가 올라오지 않는다” 같은 문제가 발생합니다. 이때 Source Code부터 의심하기 쉽지만 실제로는 Kernel Option이 빠져 있는 경우도 적지 않습니다.

예를 들어 Driver Source가 정상이라도 해당 Driver가 CONFIG_xxx=n 상태라면 Build 대상 자체에서 빠질 수 있습니다. 반대로 m으로 설정했다면 Kernel Image 내부가 아니라 Module로 만들어지므로 Module Load 여부도 확인해야 합니다.

즉, Kernel 문제를 분석할 때는 Source → Makefile → Kconfig → .config → Build Output을 함께 보는 습관이 중요합니다.

10. 흔히 헷갈리는 포인트

① Kconfig와 .config는 같은 파일이 아니다.
Kconfig는 규칙을 정의하고 .config는 그 규칙을 바탕으로 결정된 결과입니다.

② defconfig는 최종 설정이 아니다.
defconfig는 Target Board용 시작점입니다. 실제 Project에서는 이후 사용자가 수정할 수 있습니다.

③ menuconfig는 파일이 아니라 Tool이다.
설정 내용을 사람이 수정할 수 있도록 Interface를 제공합니다.

④ y/m/n의 의미를 구분해야 한다.
y는 Kernel 내장, m은 Module, n은 제외입니다.

11. 시험 직전 30초 암기
Kconfig = 규칙
defconfig = 기본값
.config = 최종값

Kconfig + defconfig → menuconfig → .config → Kernel Build

y = Kernel 내장 / m = Module / n = 제외
12. 책으로 묶을 때 기억해야 할 한 문장

Linux Kernel 설정은 단순한 Option 선택 작업이 아닙니다. Kconfig가 선택 가능한 세계를 정의하고, defconfig가 Board의 출발점을 제공하며, .config가 실제 Build 결과를 결정합니다. 이 세 가지의 관계를 이해하면 Linux Kernel Porting과 Driver Build 과정이 훨씬 명확하게 보이기 시작합니다.

다음 편 예고

6편 — Linux Device Driver와 사용자 프로그램은 어떻게 연결되는가?

다음 편에서는 User Application → System Call → /dev Device Node → Device Driver → Hardware 구조를 중심으로 register_chrdev(), mknod, open(), read(), write(), ioctl()이 어떻게 하나의 흐름으로 연결되는지 살펴봅니다.

태그
#임베디드기사 #임베디드기사실기 #임베디드실기 #리눅스커널 #LinuxKernel #Kconfig #defconfig #config #menuconfig #커널빌드 #KernelBuild #임베디드리눅스 #커널포팅 #DeviceDriver #크로스컴파일 #리눅스설정 #자격증공부 #기사시험 #실기시험 #임베디드시스템