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 |