본문 바로가기

Linux

[Kernel Config] Kconfig 명령

http://kernel.org/doc/Documentation/kbuild/kconfig-language.txt 

출처 :  http://www.semanogic.com/blog/tc/scott/entry/Kernel-Config-Kconfig-%EB%AA%85%EB%A0%B9 

#1. mainmenu

예> mainmenu "Linux Kernel Configuration"

--> mainmenu 뒤에 있는 문장을 타이틀 로 사용한다. 이게 무슨말이고하니...

make menuconfig 를 실행 하였을때 파란 파탕에 회색 창이 뜨는데 회색창의 타이틀로 여기서 지정한 문장을 쓰겠다는 얘기가 되겠다.

 

#2. config

예> config ARM

--> Kconfig 파일에서 가장 많이 볼 수있는 명령어이다. 그도 그럴것이 이 config란 것이 menu entry 를 정의 할때 쓰는 것이기에 가장 많이 나오는 것이 당연하다 할것이다. menu entry 란 커널 옵션 항목을 말한다. config 뒤에 붙은 ARM은 feature 명이다. 이는 또 무슨 말이고 하니.... config ARM 이라는  커널 옵션 항목을 만들었다면, 결국 만들어 지는 feature는 CONFIG_ARM 이라는 feature 가 만들어 진다. 또 feature가 또 무었이냐라고 한다면 주로 #define 문으로 정의되는데 어떤 코드를 상황에따라 넣어다가 뺐다가 할수 잇도록 하는 용도로 사용되어 지는 것인데..... 마찬가지로 커널에서도 필요한 항목만 넣기 위해서 이 방법을 사용한다. 설명이 장황해 졌는데......

config ARM 에 대한 코드를 알고 싶으면..

linux-x.x.x>grep -w "CONFIG_ARM" ./  -rn

을 실행하면 사용한 위치가 보이고.. 그중에서 눈여겨 볼 파일이

include/linux/autoconf.h 이다.

이 파일은 make menuconfig 나 혹은 다른 방법으로 .config 파일이 생성되면 최종적으로 만들어 지는 파일인 것이다.

 

보통 config 문은 이러한 구조로 되어 있다.

 

config EXAM
      bool "Exam Menu"

      default y
     depends on MODULES

     select TEST
     help
       Usually, modules have to be recompiled whenever you switch to a new
       kernel.  ...
config  이후의 문장들은 메뉴 속성을 지정하는 부분이다.

 

#3. bool

메뉴 속성에서

      bool "Set version information on all module symbols"
는 메뉴타입을 지정하는 것이다.

여기서 bool 은 tristate / string / hex / int 가 될 수 있으며

bool 은 두가지 상태 즉 yes/no, true/false, 등과 같은 것들을 지정....

tristate는 세가지 상태, Y / M / N  즉 커널에 넣기 / 모듈로 넣기 / 빼기 이다.

string 은 스트링을 입력 받으 수 있는 타입이며 마찬가지로 hex int 는 각각 hexa 와 integer 값을 입력 받는 타입이다.

 

#4. prompt

모든 메뉴엔트리는 하나의 prompt를 가진다. prompt 라는 것은 사용자가 볼수 있도록 화면에 출력시켜주는 문자열이다. 즉 메뉴상에 나타나는 문장이다.

하지만 이 prompt 는 생략 가능하므로, 위의 예는

bool "Exam Menu" 는

bool

prompt "Exam Menu" 과 같은 의미이다.

 

#5. default

메뉴 엔트리의 기본 값을 정하는 명령어 이다.

 

#6. depends on

현재 메뉴엔트리의 종속성 설정하는 명령어 이다. 종속성이라.... 쉽게 말하자면 , "나는 철수가 학교가면 나도 갈것이다"라고 생각하면 되겠다. 즉 다른 feature가 선택이 되면 현재 메뉴 엔트리가 활성화가 되게끔하는 명령어이다.

위의 예에서

     depends on MODULES

은 MODULES 가 yes , active , on 등 긍정적인 설정이 되면 현재 메뉴 엔트리가 활성화 된다는 것을 의미한다.

 

#7. select

역종속성을 설정하는 명령어 이다. 역종속성.. 영어로는 ,reverse dependencies 라고 한다. "내가 학교가니깐 영희도 철수도 학교간다." 정도로 생각하면 정확한다. 즉 현재 menu가 선택되면 다른 메뉴 항목도 선택 되게끔 설정하는 명령어이다. 
역종속성이라는 말처럼.. 잘못하면하면 종속성을 거스르는 문제가 발생하기도 한다.

즉 A에 종속 되어 있는 메뉴가 A가 on 되기 전에 select 명령어로 활성화가 될수도 있다는 말이다.

그래서 select는 주로 non-visisible symbols 과 종속성이 없는 것에 일반적으로 사용되어 진다.




하기 출처 : http://blog.naver.com/ddrkcodz/10093058060

커널 컴파일 규칙

 

리눅스 커널은 수많은 소스로 구성되기 때문에

효율적으로 변수를 설정하고 컴파일 하기 위한 규칙이 있다.

리눅스 커널 2.6의 경우 이를 위하여 kbuild 시스템을 사용한다.

<linux>/Documentation/kbuild 디렉터리 아래의 kconfig-language.txt 와 makefiles.txt 파일은

각각 커널 설정화면과 커널 컴파일을 위한 규칙을 자세하게 설명한다.

 

Kconfig 문법구조

 

리눅스 커널은 커널에 포함시킬 기능을 선택하기 위해 컴파일 옵션을 이용한다.

컴파일 옵션 파일은 메뉴 항목으로 구성된다.

메뉴 항목은 각행의 맨앞에 선언된 명령에 의해 시작된다.

 

기본명령어

 

자주 사용하는 기본적인 명령어를 살펴보면 다음과 같다.

 

config 명령어

  • 기능 : 메뉴 항목을 선언하며 심볼에 값을 정의 한다.
  • 형식 : config<심볼>
             <옵션>
  • 설명 : 옵션에 따라 심볼의 특성이 정해진다.
             선언된 config 명령은 다음 config 명령이나 menu 명령 이전 까지 영향을 미친다.

menuconfig 명령어

  • 기능 : 종속된 config 명령에 영향을 주기 위해 사용한다.
  • 형식 : menuconfig <심볼>
             <옵션>
  • 설명 : 선언된 config 명령은 파일의 끝이나 다음 config 상위 명령이 나타낼때 까지 영향을 미친다.
             주로 의존성 변수 값을 생성하기 위한 것으로 가장 먼저 출력 된다.

menu 명령어

  • 기능 : 하부 메뉴로 표현하기 위해 사용한다.
  • 형식 : menu "출력 문자열"
             <옵션>
  • 설명 : menu 와 end menu 사이에 있는 메뉴 항목들은 하부 항목으로 구별되어 출력 된다.

choice 명령어

  • 기능  : choice 와 endchoice 사이에 포함된 config 명령 중 하나만 선택할 경우 사용한다.
  • 형식  : choice
              <옵션>
              ....
              endchoice

if 명령어

  • 기능 : 표현식이 참일 때만 if 와 endif 사이에 포함된 내용을 수행하도록 한다.
  • 형식 : if <표현식>
             ....
             endif

옵션

 

선언된 심볼에 대하여 다양한 특성을 부여하기 위하여 형선언, 출력 문자열, 기본값, 의존성, 도움말 등을 위한 옵션이 있다. 여기서 표현식은 일반적인 경우와 달리 참 혹은 거짓뿐만 아니라 중간값을 결과로 가질수 있다.

참이면 y, 거짓이면, n 이고, 중간 값이면 m 이다.

[출처] 커널 컴파일 규칙|작성자 ddrkcodz

 

'Linux' 카테고리의 다른 글

우분투 putty에서 연결시 한글 입력이 안될때  (0) 2012.02.29
Samba Tunneling 삼바 터널링  (0) 2012.02.27
vi vim 단축키  (0) 2012.02.01
cscope  (0) 2012.02.01
[Linux] 디렉토리나, 파일 개수 세기  (0) 2012.01.31