Kconfig, 커널 옵션을 메뉴에서 고르는 법

Kconfig는 리눅스 커널이 어떤 기능을 넣을지 선택하는 설정 언어이고, make menuconfig는 그 선택을 메뉴로 보여 줍니다.

이 글은 Linux 커널 kbuild 문서의 Configuration targets and editors와 Kconfig Language 페이지를 2026-09-01 기준으로 정리한 일반 설명이며, 커널 트리와 프론트엔드에 따라 세부 동작은 달라질 수 있습니다.

Kconfig는 무엇인가?

한 줄 답:

이 설정은 커널에 넣을 기능의 선택지를 트리로 정리하고, 각 항목의 의존성에 따라 보이는 항목과 선택 가능한 값을 정합니다.

구성 데이터베이스는 설정 옵션을 트리 구조로 조직한 모음입니다. 대부분의 항목은 설정 옵션을 정의하고, 나머지 항목은 메뉴와 계층을 정리합니다. config로 새 설정 항목을 시작하고 뒤따르는 줄에서 타입, 입력 프롬프트, 의존성, 도움말, 기본값 같은 속성을 정합니다.

모든 항목에는 고유한 의존성이 있으며, 이 의존성이 항목의 표시 여부를 결정합니다. 부모 항목이 보여야 하위 항목도 보이며, depends on으로 적은 여러 의존성은 &&로 연결됩니다. 따라서 메뉴에 보이는 항목이더라도 현재 의존성 조건에 따라 선택할 수 있는 값의 범위가 달라질 수 있습니다.

모든 설정 옵션에는 타입이 필요하며 문서화된 타입은 bool, tristate, string, hex, int입니다. 이 글에서 중심으로 보는 booltristate는 설정 상태를 표현하는 방식이 다르고, 나머지 타입은 문자열이나 수치 값을 표현하는 데 사용됩니다.

입력 프롬프트는 항목을 사용자에게 보여 주는 문구입니다. 프롬프트가 없는 심볼은 보이지 않는 심볼이므로 메뉴에 나타나지 않고 .config에서 값을 직접 바꿀 수도 없으며, defaultselect를 통해서만 값이 정해집니다. 기본값은 사용자가 다른 값을 정하지 않았을 때 적용되고, 빌드가 불필요하게 커지는 일을 피하려고 기본적으로 n이 됩니다. select는 의존성을 확인하는 과정 없이 다른 심볼의 하한값을 강제할 수 있으므로 신중하게 사용해야 합니다.

다음은 config, 타입, 의존성의 관계를 보여 주는 공식 문서의 일반 예입니다.

config MODVERSIONS
      bool "Set version information on all module symbols"
      depends on MODULES

이 예에서 config는 설정 항목을 시작하고, bool은 해당 항목의 타입을 정하며, 입력 프롬프트는 메뉴에 표시할 문구가 됩니다. MODULES가 충족되어야 이 항목을 다룰 수 있다는 조건은 depends on으로 나타냅니다.

언어의 menuconfig 키워드는 하위 옵션을 별도 목록으로 표시하도록 프론트엔드에 힌트를 주는 키워드입니다. 다음 절에서 다루는 make menuconfig라는 make 대상과는 서로 다른 개념입니다.

디바이스 트리는 하드웨어를 설명하고, 이 설정은 무엇을 컴파일에 넣을지 고릅니다. 보드가 전용 컴퓨터라는 연결은 임베디드 시스템이란에서 확인할 수 있습니다.

make menuconfig는 무엇을 하나?

한 줄 답:

make menuconfig는 텍스트 메뉴 프론트엔드 mconf를 실행해 이 설정의 선택지를 메뉴에서 확인하고 고르게 합니다.

커널 문서는 make *config 대상을 사용하는 데 필요한 도움말을 제공하며, 가능한 설정 대상은 make help로 확인할 수 있습니다. 그중 menuconfigmconf라는 텍스트 메뉴 프론트엔드를 실행해 설정 트리를 표시합니다.

같은 문서에는 nconfig(nconf), xconfig(qconf), gconfig(gconf)도 다른 프론트엔드로 나옵니다. 이 글에서는 메뉴 기반 흐름의 중심인 menuconfig만 설명하며, 각 프론트엔드의 기능 비교나 설치 방법은 다루지 않습니다.

xconfig, menuconfig, nconfig에는 탐색·검색·기타 일반 조작을 위한 도움말이 내장되어 있습니다. 메뉴를 이동하거나 검색하는 구체적인 방법은 각 프론트엔드의 내장 도움말을 확인해야 합니다. gconfig의 도움말은 제한적이라고 문서에 설명되어 있습니다.

심볼 이름 검색은 찾으려는 이름과 가까운 문자열을 알고 있어야 합니다. 예를 들어 /hotplug를 검색하면 HOTPLUG_CPU, MEMORY_HOTPLUG처럼 hotplug를 포함하는 설정 심볼이 나옵니다. 검색 문자열에는 정규 표현식도 사용할 수 있으므로 /^hotplug처럼 시작 부분을 지정할 수 있습니다.

검색 결과는 먼저 정확히 일치하는 항목을 알파벳순으로 보여 주고, 그다음 나머지 일치 항목을 알파벳순으로 보여 줍니다. 검색 결과의 (#) 접두사에 표시된 키로 해당 위치의 메뉴로 바로 이동할 수 있으며, 새 메뉴를 빠져나오면 검색 결과로 돌아옵니다. 검색 도움말은 /를 입력한 뒤 TAB-TAB으로 항목을 강조하고 Enter로 열 수 있습니다.

표시 방식은 환경 변수로 일부 조정할 수 있습니다. make MENUCONFIG_COLOR=<theme> menuconfig에는 mono, blackbg, classic, bluetitle 테마를 지정할 수 있고, make MENUCONFIG_MODE=single_menu menuconfig는 하위 메뉴를 하나의 큰 트리로 표시합니다.

새 커널 트리에는 설정 심볼이 추가되거나 이름이 바뀔 수 있으므로, 기존 .configmake oldconfig를 실행하는 것만으로 동작하는 새 커널이 보장되지는 않습니다. 새 심볼 목록은 기존 설정을 .config에 둔 뒤 make listnewconfig로 확인할 수 있으며, make oldconfig 다음에 scripts/diffconfig .config.old .config를 사용하는 경로도 문서화되어 있습니다. 이미지가 빌드 산출물일 수 있다는 연결은 Yocto/Poky에서 확인할 수 있지만, 여기서는 설정 프론트엔드의 역할만 다룹니다.

.config 파일은 어디에 쓰이나?

한 줄 답:

기본 이름이 .config인 이 파일은 메뉴에서 정한 설정 값을 저장하며, 관련 환경 변수로 파일 이름과 생성 경로의 기본값을 조정할 수 있습니다.

기본 커널 설정 파일의 이름은 .config입니다. KCONFIG_CONFIG를 설정하면 이 기본 이름을 다른 커널 설정 파일 이름으로 바꿀 수 있습니다. 메뉴에서 정한 사용자 입력은 보이는 프롬프트가 있는 심볼의 값으로 이 파일에 저장됩니다.

.config가 아직 없을 때 사용할 기반 설정 파일은 KCONFIG_DEFCONFIG_LIST로 지정합니다. 목록의 항목은 공백으로 구분하며, 그중 처음으로 존재하는 파일이 기반 설정으로 사용됩니다.

설정 파일을 다루는 동작에는 다음 환경 변수가 관여합니다.

환경 변수역할
KCONFIG_OVERWRITECONFIG.config가 다른 위치를 가리키는 심볼릭 링크일 때 링크를 끊지 않도록 합니다.
KCONFIG_WARN_UNKNOWN_SYMBOLS설정 입력에서 인식하지 못한 모든 심볼에 경고를 표시합니다.
KCONFIG_WARN_CHANGED_INPUT공백이 아닌 값으로 설정하면, 의존성 해결이나 범위 같은 제약을 적용한 뒤 사용자 입력이 바뀔 때 선택적 경고를 표시합니다.
KCONFIG_WERROR설정하면 경고를 오류로 처리합니다.

환경 변수 CONFIG_를 설정하면 저장할 때 모든 심볼 앞에 붙는 접두사가 기본값 CONFIG_ 대신 그 값으로 바뀝니다. 이 설정은 저장되는 심볼 이름의 접두사에 관한 것이며, C 매크로나 Makefile 처리 방법을 설명하는 기능은 아닙니다.

동기화 과정에서 생성되는 파일의 기본 경로와 이름도 바꿀 수 있습니다. KCONFIG_AUTOCONFIG의 기본 출력은 include/config/auto.conf이고, KCONFIG_AUTOHEADER의 기본 출력은 include/generated/autoconf.h입니다. KCONFIG_NOSILENTUPDATE를 공백이 아닌 값으로 설정하면 설정을 조용히 갱신하지 않고 명시적인 갱신을 요구합니다.

KCONFIG_ALLCONFIGallyesconfig, allmodconfig, alldefconfig, allnoconfig, randconfig 같은 대상에서 일부 심볼을 특정 값으로 요구하는 미니 설정 파일이나 플래그를 지정하는 데 사용합니다. 설정 시스템은 이 요구를 바탕으로 전체 .config를 생성하며, 미니 설정에 적은 값도 정상적인 의존성 검사를 계속 받습니다.

드라이버를 모듈로 넣는 것과 내장은 무엇이 다른가?

한 줄 답:

tristate는 일반 불리언보다 모듈 상태를 하나 더 표현해 y, m, n 값을 다루며, bool은 두 상태를 바탕으로 합니다.

이 설정 언어의 표현식은 n, m, y 가운데 하나의 값을 가질 수 있으며, 계산에서는 각각 0, 1, 2로 다뤄집니다. 메뉴 항목은 그 항목의 조건 표현식이 m 또는 y로 평가될 때 보입니다. 따라서 의존성 조건의 결과가 무엇인지에 따라 메뉴에서 보이는 항목과 선택 가능한 상태가 함께 달라집니다.

tristate는 일반 불리언 논리에 없는 세 번째 상태를 모듈 상태로 표현합니다. bool은 그보다 적은 두 상태를 바탕으로 하므로 모듈 상태까지 표현하지 않습니다. 모듈 상태를 사용할지는 메뉴의 구체적인 조작 키를 임의로 전제하지 말고 프론트엔드 내장 도움말에서 확인해야 합니다.

modules 속성은 모든 설정 심볼이 세 번째 모듈 상태를 사용할 수 있도록 MODULES 심볼을 선언합니다. 이 속성을 가진 심볼은 하나만 둘 수 있습니다.

다음은 구성 요소를 모듈 상태 또는 비활성 상태로만 제한하는 공식 문서의 일반 예입니다.

config FOO
      depends on BAR && m

이 조건은 BAR에 의존하는 FOO가 모듈 상태인 m 또는 비활성 상태인 n만 가질 수 있도록 제한합니다. 선택적 의존성은 문서에 제시된 depends on BAR if BAR 또는 depends on BAR || !BAR 패턴으로 표현할 수 있으며, FOO=yBAR=m 조합은 허용되지 않습니다.

FAQ

한 줄 답:

메뉴 기반으로 커널 옵션을 고를 때는 문서화된 설정 대상, 기본 파일 이름, 세 상태, 내장 검색 도움말을 함께 확인합니다.

리눅스 커널에서 옵션을 메뉴로 고르려면 무엇을 사용합니까? make menuconfigmconf 텍스트 메뉴 프론트엔드를 실행합니다. 가능한 설정 대상의 전체 목록은 make help로 확인합니다.

.config의 기본 이름은 무엇이고 어떻게 바꿉니까? 기본 이름은 .config이며, KCONFIG_CONFIG로 기본 커널 설정 파일 이름을 바꿀 수 있습니다.

tristatey / m / n은 무엇을 나타냅니까? 설정 표현식이 가질 수 있는 세 값이며, m은 문서가 설명하는 모듈 상태를 나타냅니다. bool은 두 상태를 바탕으로 합니다.

메뉴에서 심볼 이름은 어떻게 찾습니까? /hotplug처럼 가까운 심볼 이름을 검색 문자열로 입력할 수 있으며, HOTPLUG_CPU, MEMORY_HOTPLUG 같은 결과를 확인합니다. 정규 표현식과 검색 결과 위치 이동을 포함한 자세한 조작은 프론트엔드의 내장 도움말에서 확인합니다.

출처

한 줄 답: 본문 사실과 일반 예는 2026-09-01 기준으로 확인한 Linux 커널 공식 kbuild 문서에서만 사용합니다.

  • Configuration targets and editorsmake *config, 프론트엔드, 검색, .config, KCONFIG_*, auto.conf, autoconf.h 관련 설명을 확인했습니다.
  • Kconfig Language — 옵션 트리, 타입, 프롬프트와 표시, 의존성, tristate, 모듈 상태, depends on m 관련 설명과 일반 예를 확인했습니다.
  • Kconfig macro language — 텍스트 치환 단계와 심볼 의존성 평가 단계가 구분된다는 설명을 확인했습니다.