2010년 3월 23일 화요일

ANDROID빌드환경에서 LINUX바이너리컴파일

[jsk@mdroid eclair]$ pwd
/home/jsk/00.SOURCE/ma110/trunk/mdroid/eclair
[jsk@mdroid eclair]$ ls -l system/core/
합계 116
-rw-rw-r-- 1 jsk jsk 933 2010-03-09 14:11 Android.mk
-rw-rw-r-- 1 jsk jsk 764 2010-03-09 14:11 README
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 adb
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 cpio
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 debuggerd
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 fastboot
drwxrwxr-x 13 jsk jsk 4096 2010-03-09 14:11 include
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 init
drwxrwxr-x 4 jsk jsk 4096 2010-03-09 14:11 libacc
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 libctest
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 libcutils
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 liblog
drwxrwxr-x 4 jsk jsk 4096 2010-03-09 14:11 libmincrypt
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 libnetutils
drwxrwxr-x 6 jsk jsk 4096 2010-03-09 14:11 libpixelflinger
drwxrwxr-x 4 jsk jsk 4096 2010-03-09 14:11 libsysutils
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 libzipfile
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 logcat
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 logwrapper
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 mkbootimg
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 15:08 netcfg
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 nexus
drwxrwxr-x 4 jsk jsk 4096 2010-03-09 14:11 rootdir
drwxrwxr-x 5 jsk jsk 4096 2010-03-09 14:11 sh
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 15:08 toolbox
drwxrwxr-x 3 jsk jsk 4096 2010-03-09 14:11 vold

0. system/core/ 디렉토리에 보면 커맨드로 사용되는 유틸리티들이 있음.

1. 컴파일하고자하는 C코드(Linux 유틸)를 system/core/ 빌드환경에 맞춰 준다.

1.1. system/core/Android.mk 파일에 의해서 system/core/ 하위 디렉토리는 컴파일 대상이 된다.
=> 하위 디렉토리에 Android.mk 파일에 의해서 컴파일 여부가 결정 됨

1.2. cp -ar system/core/netcfg system/core/dpram_dbg
=> 빌드환경을 갖고있는 디렉토리를 dpram_dbg 디렉토리로 복사 함

1.3. cp dpram_dbg.c system/core/dpram_dbg/dpram_dbg.c
=> 컴파일하고자 하는 C코드를 위에서 생성한 디렉토리에 복사함.

1.4. vim system/core/dpram_dbg/Android.mk
=> LOCAL_SRC_FILES, LOCAL_MODULE, LOCAL_SHARED_LIBRARIES 수정
------------------------------------------------------------
ifneq ($(BUILD_TINY_ANDROID),true)
LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)
LOCAL_SRC_FILES:= dpram_dbg.c
LOCAL_MODULE:= dpram_dbg

#LOCAL_FORCE_STATIC_EXECUTABLE := true
#LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT_SBIN)
#LOCAL_UNSTRIPPED_PATH := $(TARGET_ROOT_OUT_SBIN_UNSTRIPPED)
#LOCAL_STATIC_LIBRARIES := libcutils libc

LOCAL_SHARED_LIBRARIES := libc libnetutils

include $(BUILD_EXECUTABLE)
endif

1.5. 안드로이드 루트 디렉토리에서 빌드하면 됨
=> 라이브러리가 없어서 *.h 를 못찾는 에러가 나오면
LOCAL_SHARED_LIBRARIES 에 lib* 시작하는 라이브러리를 추가해주면 될 듯
lib* 은 /system/core/ 디렉토리에 많이 있음.

댓글 없음:

댓글 쓰기