[Linux] make menuconfig 사용방법

개발 조회 수 1628 추천 수 0 2017.06.12 20:42:59

출처 : http://mauver.kr/wp/archives/252

make menuconfig 는 kernel 을 컴파일할 때, kernel 에 특정 설정을 GUI 할 수 있도록 지원하는 기능이다.

make 로 컴파일 시, .config 파일을 통해 특정 값을 DEFINE 할 수 있는데, 이 부분은 GUI 설정할 수 있도록 하는 기능이다.

커널의 각 소스의 Kconfig 파일에 메뉴를 만들 수 있다.

또는 같은 경로에 있는 Makefile 에 Kconfig 에서 설정한 값이 DEFINE 되느냐에 따라서 특정 파일을 컴파일하는지 마는지에 대한 설정도 할 수 있다.

다음은 Android Kernel 에서 make menuconfig 를 실행한 화면이다.

제목 없음

이런 식으로 셋팅을 하게 되면 좋은 점은 컴파일 시에 굳이 소스파일을 매번 수정할 필요가 없어진다.

소스 파일에는 특정 값이 DEFINE 되어 있는지 확인한 후, 특정 루틴을 돌도록 구현을 해두고, .config 파일에 특정 값을 DEFINE 하도록 해두면 make menuconfig 를 이용하여 원하는 값으로 컴파일이 가능하기 때문이다.

메뉴를 추가하는 방법은 무엇일까?

아래에서 한 예를 들어 메뉴를 추가하는 방법을 설명하겠다.

많이 추가하는 메뉴인, Device Driver 부분에 input 에 관련된 menu를 추가해 보자.

제목 없음2

위의 사진에 해당하는 부분을 선택하면 나오는 메뉴들을 추가할 것이다.

커널에서 다음 경로로 이동하자. (kernel/driveres/input)

이동이 되었으면 Kconfig 파일을 에디터로 열어주자.

제목 없음3

열어보면 menu 이름이 보이고 아래로 내리다 보면 config 로 시작하는 구문이 많이 있을 것이다.

원하는 부분에 다음과 같이 추가해보자. 나는 if INPUT 바로 아래에 추가하도록 하겠다.

제목 없음4

그리고 저장을 해주자.  위의 부분을 설명하면 config 뒤에는 어떤 값을 define 하게 될지 적는다.  

제가 사용하는 커널에서는 저렇게만 적어두어도 앞에 자동으로 CONFIG_ 접두어가 붙어서 값이 define 된다.

tristate 뒤에는 메뉴에 어떻게 표시될 것인지 help 뒤에는 이 메뉴의 역할이 무엇인지 상세 설명을 해준다.

끝을 알리는 부분도 없이 저렇게만 저장하면 된다.

그 다음 다시 kernel 소스로 돌아가서 Device Drivers -> Input device support 에 들어가서 추가된 메를 확인해보자.

제목 없음5

위와 같이 메뉴가 생겼다. 저 메뉴를 사용하도록 하려면 Y를 사용하지 않으려면 N을 눌러주면 된다.

저 메뉴를 사용하도록 설정해보고 ESC 를 연타하면 .config 파일에 설정이 저장되었다고 출력되고

make menuconfig 를 빠져나올 수 있다.

제목 없음6

그러면 .config 파일을 열어서 값이 설정되었는지 확인하자.

kernel 경로의 .config 파일을 에디터로 열어보자. 거기서 아까 위에서 tristate 로 입력하였던 값을 검색해보자.

제목 없음7

위와 같이 CONFIG_INPUT_TEST 값이 y 로 저장되어 있을 것이다. m 이라고 쓰여있는 것도 같은 역할을 한다.

그리고 소스파일에서 저 값이 설정되어 있을 때 무언가 하고 싶다면, 아래와 같이 하면 된다.

만약 저 값이 설정되어 있을 때, 특정 소스파일을 컴파일 하고자 한다면, Makefile을 수정해야한다.

다시 한번 kernel/drivers/input 경로로 이동하여 Makefile 을 에디터로 열어보자.

 제목 없음8

예를 들어 obj-$(CONFIG_INPUT_TEST) += test.o  같이 쓰게 된다면, 해당 경로의 test.c 파일을 컴파일하게 될 것이다.

마지막으로 make menuconfig 를 사용하는데에 있어서 아래와 같은 오류가 난다면 해결법은 다음과 같다.

이 에러는 터미널 창이 작기 때문에 생기는 에러로, 터미널 창을 크게 해주면 된다.

또 다른 에러로  cannot find -lncurses 가 발생한다면 라이브러리가 제대로 설치되지 않았기 때문이다.

아래의 명령으로 해당 라이브러리를 설치해주자.

 


eastsky

2017.06.12 20:45:13
*.196.81.211

출처 : http://forum.falinux.com/zbxe/index.php?document_srl=576359&mid=lecture_tip


Menuconfig 없이 직접 설정하는 방법


1. Kconfig 수정 어렵지 않아요~




저번 시간에는 menuconfig를 통해 커널의 설정을 병경 하는 방법에 대해서 이야기 했었습니다.


이번에는 직접 우리만의 커널 설정을 추가해 보겠습니다.


먼저 Kconfig를 하나 수정해 보겠습니다.


일단 익숙한 파일에 수정을 해보겠습니다

(물론 제기준입니다 ㅎㅎ)


arch/arm/mach-s5pv210/Kconfig 파일을 열어 보겠습니다.


01.PNG


위와같이 TEST_KCONFIG 를 추가 해 봅시다.


menuconfig를 통해 확인해보면


System Type --->

  [*] EZS5PV210                                                                                                

  [ ]     TEST (NEW) 


위와 같이 추가 된 모습을 볼 수 있습니다.


일단 한번 EZS5PV210 표시를 해제해볼까요?


TEST 항목이 사라졌습니다. 왜?


depends on MACH_EZS5PV210 항목 때문입니다.


MACH_EZS5PV210 가 활성화 되어 있을 때만 설정창이 보이게 됩니다.


bool "TEST" 는 menuconfig에서 보이는 이름을 나타냅니다.


menuconfig에서 help를 확인해 볼까요?


02.PNG 


우리가 넣어준 help 설명이 들어있죠?


그리고 설정이 있는 파일이름도 보입니다.


자 우리의 config 를 선택한다면 CONFIG_TEST_KCONFIG 라는 것이 커널상에서 정의가 됩니다.

(우리가 정의해준 이름 앞에 CONFIG_ 가 자동으로 붙게 되어 있습니다.)


이를 통해 원하는 파일을 컴파일 하게 하던지 소스상에서 원하는 동작의 동작 유무 등을 선택해서 동작하게 할 수있습니다.


먼저 파일을 넣는 방법을 확인해 볼까요?

(요부분은 귀찮으니 있는걸로 확인해 봅시다 ㅎㅎ)


MACH_EZS5PV210가 활성화 됬을때 추가되는 파일을 확인해 보겠습니다.


arch/arm/mach-s5pv210/Makefile 을 열어보겠습니다.


03.PNG


CONFIG_MACH_EZS5PV210 가 보이시나요? 설정되어 있다면 


mach-ezs5pv210.c bootmem-ezs5pv210.c 파일이 컴파일 되도록 하는 부분입니다.


CONFIG_MACH_SMDKC110 이라면 mach-smdkc110.c 파일이 컴파일 되겠죠?


다음은 arch/arm/mach-s5pv210/mach-ezs5pv210.c 파일을 열어 보겠습니다.


04.PNG 


#ifdef CONFIG_~~~ 가 엄청 많이 보이시죠?


이것들이 모두 menuconfig를 통해 넘어오는 config로 소스코드를 추가할지를 경정하는 것입니다.


예를 들어 CONFIG_S3C_DEV_HSMMC 설정이 빠져있다면?


s5pv210_default_sdhci0 함수는 호출되지 않을겁니다.



위와같이 Kconfig  menuconfig를 통해 여러가지 일들을 할수 있습니다.


추가하는거나 선택하는것도 어렵지는 않습니다.


다만 Kconfig와 Makefile과 c 소스 상에서 사용하는 문법들이 다르다는점! 명심해야 합니다.

List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 개발 오디오 분석을 위한 소스 빌드 사전작업 secret eastsky 2010-12-16 3
공지 개발 Android Tips secret eastsky 2010-11-15 5
27 개발 Android6.0 - PowerManagerService状态分析 eastsky 2017-07-21 751
26 개발 Android6.0 - PowerManagerService Notifier 分析 eastsky 2017-07-21 705
25 개발 Android 개발 전반에 대한 연재 eastsky 2017-06-13 1158
24 개발 kBuild eastsky 2017-06-13 1136
23 개발 Kbuild system eastsky 2017-06-13 1359
» 개발 [Linux] make menuconfig 사용방법 [1] eastsky 2017-06-12 1628
21 개발 ADB 명령어 및 Log Filter eastsky 2017-06-12 1811
20 개발 GNU Make eastsky 2017-06-09 1397
19 개발 Android Build System [1] eastsky 2017-06-09 1662
18 개발 Linux and Android - Suspend / Resume eastsky 2012-12-24 30412
17 개발 안드로이드 터치 보정값을 얻자. file [1] 이종일 2011-02-23 42955
16 개발 Android에 BusyBox 첨가 하기. [3] 이종일 2011-02-22 48675
15 개발 Android 동호문서 따라하기 file 이종일 2011-02-18 29595
14 개발 Linux RamDisk 참고 자료 file 이종일 2011-02-17 33247
13 일반 Android 2.3 Platform Highlights eastsky 2010-12-08 20047
12 개발 안드로이드 초기화 과정 eastsky 2010-12-02 43044
11 일반 하이씨엘 앱 에디터 eastsky 2010-12-01 23703
10 개발 Android 2.2 - Market Client on ADV file eastsky 2010-11-30 26052
9 개발 Android 2.2 - SDK & AVD Manager file eastsky 2010-11-30 27316