본문 바로가기

개발 개발/Android

Kconfig, Makefile, defconfig

출처 : http://blog.naver.com/areema/60135756070


Kconfig, Makefile, defconfig

 

얘네들이 리눅스 시스템 개발 처음 시작할 때 가장 헷갈리고 가장 영향을 많이 줬던 녀석들이었다.

지금 생각해 보면 정말 별거 아닌 것 들인데 -..- 책에는 뭔가 어렵게만 적혀 있었던게 기억난다.

 

간단히 집고 넘어가보자

 

Makefile

 

말 그대로 파일을 생성하는 스크립트다. 예제를 하나 보자면



obj-y                += gpio/
obj-$(CONFIG_GPIO)        += gpio/

obj-y 의 y는 yes 라는 말로 gpio 폴더 내의 .o 파일들을 오브젝트 파일로 만들겠다 그 소리다. 참고로 / 가 붙어있는건 폴더라는 뜻이고 파일 한개만 지정하고 싶을 땐 .o 를 붙여주면 되겠다.

obj-$(CONFIG_GPIO) 는 뭐냐면 $(CONFIG_GPIO) 가 일종의 define 인데 이 define 이 바로.config 에 명시되어 있다. 음 근데 갑자기 .config 는 또 뭘까

 

.config 는 최상위 디렉토리 안에 위치하고 소스 안에는 이런것들이 명시되어 있다.

#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.35.7
# Thu Jul 28 18:03:53 2011
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
CONFIG_HAVE_SCHED_CLOCK=y
CONFIG_GENERIC_GPIO=y
CONFIG_GENERIC_TIME=y

맞다. 위에서 본거다. CONFIG_GPIO 도 여기 어딘가에 정의가 되어있다.

그럼 .config는 어떻게 만드는걸까-

 

자동으로 만들어진다..

 

대신 Kconfig 를 참고해서-

 

다시 말하면 각 모듈마다 있는 Kconfig 에 y로 해놓을지 n을 해놓을지 명시를 해 놓으면 컴파일 될 때 자동으로 취합해서 하나의 파일인 .config 에 써지게 되는 것이다. 이 .config 는 다시 autoconf.h 라는 파일로 최종적으로 만들어 지게 된다.

 

Kconfig 에 대한 자세한 설명이 있는 블로그 : http://blog.daum.net/chazzing/20

 

자 다시 정리하자면 .ko 파일을 만드려면 Makefile 에 명시를 해줘야 하는데 그냥 y로 되있지 않고 $(CONFIG_XXX)라고 되어있으면 Kconfig에 가서

config GPIO
bool
default y

 

이렇게 해줘야지 된다. (참고로 Kconfig 에 config GPIO 라고 해 놓으면 .config 만들어 질 때 CONFIG_ 가 앞에 자동으로 붙게 되어있다.)

 

근데 보통 개발할 때 보면 FEATURE 처리가 되어 있을 때가 많다. 아래 처럼

if MSM_DEVICES
  config GPIO
  bool
  default y
endif

if 문이 하나 붙은걸 볼 수 있다. if 문이니까 MSM_DEVICES 가 true 일 경우에 아래 문장이 실행 되겠지-

말하자면 먼저 한번 걸러 주는 것이다.

암튼 저런 것을 FEATURE (피처) 처리 해준다고 하는데 요놈들은 defconfig 라는 파일에 명시되어 있다. 보통 kernel/arch/arm/config 폴더에 위치한다.

defconfig 라고 다를건 없다. y 로 해주든지 n 로 해주든지 그건 개발자 맘이다.

 

 

암튼 저렇게 해서 obj 파일에 포함이 되면은 최종적으로 .ko 파일이 만들어지게 된다. 뭔가 많이 길어졌네

책에 보면 Makefile 의 문법같은게 자세하게 나와있는데 내 생각엔 이정도만 알아도 드라이버 올리는덴 문제가 없다.

 

[출처] Kconfig, Makefile, defconfig|작성자 영승

'개발 개발 > Android' 카테고리의 다른 글

Android에서 4gb 이상 비디오 돌리기  (0) 2011.11.15
ICS (IceCream Sandwitch) 소스가 나왔다.  (2) 2011.11.15
objdump  (0) 2011.11.14
안드로이드 [Resource]리소스 폴더구조  (0) 2011.09.23
Locale 변경하기  (0) 2011.02.21