블로그 이미지
HISONA

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함

calendar

1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30



Android Source 에서 Windows 용 SDK 빌드하기

2012. 11. 2. 15:44 | Posted by HISONA

Android Source 에서 Windows 용 SDK 빌드하기

(android-4.1.1_r6 기준)

 

1. 안드로이드 소스 받기

 

안드로이드 &커널 소스 다운 받기(구글 안드로이드, 각 제조사 오픈소스) 

http://olpost.com/v/3531216 참조

 

$ mkdir jb_4.1

$ cd jb_4.1

$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.1.1_r6

$ repo sync

 

2. Windows 용 SDK build

 

Linux 장비에서 MinGw 를 통해서 Windows 용 SDK 를 빌드합니다.

 

1) Mingw for Linux, Tofrodos 받기

 

$ sudo apt-get install mingw32 tofrodos

 

2) Build

 

$ . build/envsetup.sh
$ lunch sdk-eng
$ make win_sdk

 

3. Goldfish Kernel Build

 

1) Goldfish Kernel 다운로드

 

$ git clone https://android.googlesource.com/kernel/goldfish.git kernel
$ cd kernel

$ git checkout --track -b android-goldfish-2.6.29 remotes/origin/android-goldfish-2.6.29

 

2) Kernel 빌드

 

$ make ARCH=arm goldfish_armv7_defconfig

$ make ARCH=arm CROSS_COMPILE=~/android/jb_4.1/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-

$ make

$ cp arch/arm/boot/zImage ./kernel-qemu

 

 

 

 

 

 

 





안녕하세요? 

이전 버전의 Windows 용 Android NDK 에서는 Android C-native 코드를 빌드하기 위해서는
Cygwin 이 반드시 필요했습니다.

그러나, Android NDK,r5 버전 부터는 prebuilt 에 포함된 Arm Toolchain 의 Cygwin 의 종속성이 없어졌습니다. 그런데, 아직 Makefile 들은 정리가 안된 것 같네요..

다음과 같이 Makefile 을 수정해 주시면 MinGW 환경에서도 NDK 로 빌드하실 수 있습니다.

build/core/definitions.mk 파일에서, 

 ifeq ($(HOST_OS),windows) 항목을 ifeq ($(OSTYPE),cygwin) 로 수정해 주시면 됩니다.

사용법은, android-ndk-r5 디렉토리에서 다음과 같이 하시면 됩니다..  

    sh ndk-build -C samples\hello-jni\jni 

감사합니다.

P.S : MinGW 설치 방법은 이전 포스트를 참조하세요... 
        (MinGW\bin, msys\bin 디렉토리가 환경변수 path 에 들어있어야 하는 것은 알고
        계시죠? ㅎㅎ)





Android 에서 디바이스 드라이버를 테스트 한다거나, 리눅스 라이브러리를 빌드하는 것과 같은, 여러가지 이유로 간단하게 C 로 작성된 테스트 어플 및 Dynamic Linkage 라이브러리와 같은 Android C Native Application 을 개발하기 위해서 해야 할 일들을 정리해 보았습니다.
다들 아시겠지만, Android 에서는 BSD 계열의 Bionic-C 의 라이브러리를 사용하고 있습니다. 그래서 GNU Toolchain 을 사용해서 작업하려면 Static 으로 빌드를 해야 하지만, 바이너리 사이즈가 커지는 단점이 있습니다. 여기에서는 Android NDK 에 포함된 bionic-C 라이브러리를 사용해서 Native 바이너리를 생성하는 방법을 설명합니다.
그리고, 여기에서는 Windows 에서 작업하는 것을 기준으로 설명합니다. 이유는 리눅스에서 작업하기 위해서는 별도의 PC나 Vmware 와 같은 프로그램이 필요하고, Windows 에서 개발하는 것이 더 편리하기 때문입니다. 또한, Windows 에서 작업하는 방법을 안다면, 리눅스에서 개발하시던 분은 리눅스에서도 동일하게 작업이 가능하실 것으로 생각됩니다.

1. Andorid NDK 설치

- 먼저 http://dl.google.com/android/ndk/android-ndk-r4b-windows.zip 에서 Android NDK 를 다운로드 받습니다.  
- 적당한 위치에 android-ndk-r4b-windows.zip 파일의 압축을 풀면 됩니다.
- 저는, “D:\android-ndk-r4b” 에 설치하였습니다.

2. MinGW, Msys 설치

- Android 개발 환경이 Linux 기반으로 되어 있기 때문에, Windows 에서 리눅스 개발 환경을 제공해 주는 것입니다. MinGW 와 Msys 에 대해서는 이전 포스트의 설치 방법을 참조하시면 될 것 같습니다(http://ohadev.tistory.com/6)
- Android NDK 에서는 Cygwin(MinGW 와 같이 Linux 개발 환경을 제공) 을 사용해서 컴파일 하도록 하고 있으나, 개인적으로 MinGW 를 더 선호하기 때문에 MinGW 를 기준으로 설명합니다. Cygwin 을 사용하시는 분들은 Cygwin 을 사용하셔서 진행하셔도 됩니다.

3. Arm Cross-compiler Toolchain 설치

- CodeSourcery 에서 Windows 설치용 Arm-Linux Toolchain  을 다운로드 해서 설치합니다.
(http://www.codesourcery.com/sgpp/lite/arm/portal/package6491/public/arm-none-linux-gnueabi/arm-2010q1-202-arm-none-linux-gnueabi.exe)
- 저는, “D:\Android\arm-2010q1” 에 설치하였습니다.
- CodeSourcery Toolchain 은 Cygwin 용 dll 을 사용하지 않기 때문에, Cygwin 을 설치하지 않으셔도 컴파일을 하실 수 있습니다. (제가 MinGW 를 사용하는 이유가 MinGW 로 Windows Application 을 만들면 Cygwin 과 같이 별도의 dll 을 포함 시키지 않아도 되기 때문입니다.)
- Cygwin 을 사용하면 Android NDK 에 포함되어 있는 Toolchain (android-ndk-r4b\build\prebuilt\windows\arm-eabi-4.4.0) 을 사용해서 컴파일할 수 있을 것 같은데 저는 잘 안되는군요.

4. Makefile 작성

예제파일 : 


- 본 문서를 작성하기 위해서 http://dustinlee.egloos.com/1973505 를 참고하였습니다.
- Makefile 에서 주의하실 점은, Android NDK 에 포함되어 있는 Bionic-C 라이브러리를 사용하기 위해서, GNU 에 포함된 라이브러리를 사용하지 않도록, “-nostdlib”  Link 옵션을 주셔야 합니다.
- 또한, LDFLAGS 에서 dynamic-linker 를 지정할 때 그냥 path 를 “/system/bin/linker” 를 지정하면 msys 에서 상대 Path로 인식해서 앞에 D:/MinGW/msys/ 를 자동으로 붙여버리기 때문에, 절대 경로를 지정하기 위해서 “//system/bin/linker” 로 지정하셔야 합니다.
- 예제에서 사용한 Makefile 은 다음과 같습니다.

TARGET = hello

CROSS  = /d/Android/arm-2010q1/bin/arm-none-linux-gnueabi-
INCDIR = /d/Android/android-ndk-r4b/build/platforms/android-8/arch-arm/usr/include
LIBDIR = /d/Android/android-ndk-r4b/build/platforms/android-8/arch-arm/usr/lib

CC  = $(CROSS)gcc
AR  = $(CROSS)ar
LD  = $(CROSS)ld
NM  = $(CROSS)nm
RANLIB  = $(CROSS)ranlib
STRIP = $(CROSS)strip

INCLUDE = -I. -I$(INCDIR)

CFLAGS = -Wall
LDFLAGS = -nostdlib -Wl,--dynamic-linker,"//system/bin/linker" -L$(LIBDIR) -lc -lm -lstdc++ -ldl

# crt
CRTOBJ = $(LIBDIR)/crtbegin_dynamic.o

# application file
APPSOURCES = main.c
APPOBJS = $(APPSOURCES:.c=.o)

# define the rule
.SUFFIXES:.c .o
.c.o:
@echo Compiling: $<
$(CC) -c $(CFLAGS)  $(INCLUDE) -o $@ $<

all: app

app: $(APPOBJS)
@echo Linking: $(TARGET)
$(CC) -o $(TARGET) $(APPOBJS) $(CRTOBJ) $(LDFLAGS)
$(STRIP) -s $(TARGET)

clean:
@rm -vf $(APPOBJS) $(TARGET)

5. 실행

- Android emulator 를 실행한 다음, adb 를 이용하여 컴파일된 파일을 실행하시면 다음과 같은 결과를 얻으실 수 있습니다.





안녕하세요?

이번 포스트에서는 Android Emulator 소스를 수정하여 Floating Point 연산 속도를 개선해 보도록 하겠습니다. Android OpenGL ES Issue Report 에 보시면 Android Emulator 에서 OpenGL 연산속도가 문제가 되고 있는것 같습니다. Android Emulator 에 포함된 OpenGL ES 는 소프트웨어 방식의 OpenGL ES 1.5 가 사용되고 있습니다.
그러므로, OpenGL 3D 를 구현하기 위해서는 Matrix 연산이 많이 사용되는데, Floating Point 연산속도가 개선되면 3D 의 연산 속도를 높일 수 있을 것입니다.

Floating Point 연산 속도 개선을 위해서는 몇가지 작업을 해주어야 합니다. 

첫째, Android Emulator 의 fpu 소스코드에서는, softfloat.c 를 사용하도록 되어 있습니다. 속도를 개선하기 위해서는 softfloat-native.c 를 사용하여야 합니다. 그러나, Android Emulator 에 포함되어 있는 softfloat-native.c 파일에는 몇가지 버그가 있습니다. 아래 파일은 Patch 된 파일입니다. 이 파일들을 받아서 android-emulator-1.0_r2\android-emulator-20081210\qemu\fpu 에 있는 파일들을 변경하십시오.

 
그리고, 몇몇 파일들을 수정해 주어야 합니다.

1) android-emulator-1.0_r2\android-emulator-20081210\qemu\android\config\config.h 파일에서 다음과 같이 수정하십시오(CONFIG_SOFTFLOAT 을 undefine 하십시오.) 

//#define CONFIG_SOFTFLOAT 1
#undef CONFIG_SOFTFLOAT

2) android-emulator-1.0_r2\android-emulator-20081210\qemu\Makefile.android 에서 softfloat.c 파일을 softfloat-native.c 로 수정합니다.

line 170:
FPU_SOURCES := softfloat-native.c

line 250:
FPU_SOURCES := softfloat-native.c

3) android-emulator-1.0_r2\android-emulator-20081210\qemu 에서 make 하시면, objs 디렉토리에 emulator.exe 가 생성됩니다. 컴파일한 실행파일은 아래에 있습니다.



둘째, linux kernel config(.config) 파일에서, CONFIG_VFP=y 로 설정되어 있어야 합니다. 다행이 Android 에서 사용하는 linux kernel 에서는 아래와 같이 VFP 를 사용하도록 설정되어 있습니다. 



세째, linux 어플리케이션 프로그램을 컴파일 할때 컴파일 옵션에,  "-mfpu=vfp -mfloat-abi=softfp"
를 포함해서 컴파일 해야 합니다. 즉, Dalvik VM 이나 OpenGL ES 를 사용하는 라이브러리들이 이 옵션으로 컴파일 되어야 합니다. 저는 아직 Dalvik VM 을 컴파일 해보지 않았기 때문에 이 부분은 다른분들께 맡기도록 하겠습니다.

대신 샘플 어플리케이션으로 테스트 결과를 보여드리도록 하겠습니다.

테스트에 사용한 샘플코드는 간단하게 float 변수 사칙연산을 각각 1,000,000 번 수행한 시간을 측정한 것입니다.
테스트 프로그램을 컴파일 하는데는 Codesourcery G++ Lite 208q1-126 for ARM GNU/Linux 를 사용하였습니다. 그리고, Android Emulator 는 libc 를 사용하지 않기 때문에, 라이브러리를 static link 하였습니다.
아래 첨부파일에 테스트에 사용한 소스코드와 실행파일이 포함되어 있습니다.  
 



float_vfp 는  "-mfpu=vfp -mfloat-abi=softfp" 옵션을 포함해서 컴파일한 실행파일입니다. float_nofp 는 옵션없이 컴파일한 파일입니다.   

테스트에 사용한 컴퓨터 사양은, 다음과 같습니다.

CPU: Intel Core2 6400 2.13GHz
RAM: 2G
OS: Windows XP SP3

1) 수정하지 않은 Android Emulator 에서 테스트한 결과

./float_nofp
add operation => elipse time: 0s, 135414us
sub operation => elipse time: 0s, 202468us
mul operation => elipse time: 0s, 116733us
div operation => elipse time: 0s, 272469us

./float_vfp
add operation => elipse time: 0s, 100574us
sub operation => elipse time: 0s, 115769us
mul operation => elipse time: 0s, 97731us
div operation => elipse time: 0s, 110618us

2) softfloat-native 를 적용한 Android Emulator 에서 테스트한 결과

./float_nofp
add operation => elipse time: 0s, 137863us
sub operation => elipse time: 0s, 201425us
mul operation => elipse time: 0s, 118687us
div operation => elipse time: 0s, 271949us

./float_vfp
add operation => elipse time: 0s, 68719us
sub operation => elipse time: 0s, 67290us
mul operation => elipse time: 0s, 66261us
div operation => elipse time: 0s, 78777us


그러므로, vfp 옵션을 주고 컴파일한 경우에는 거의 2배 정도 성능개선 효과가 있는 것으로 보입니다. 그리고, Android Emulator 에 softfloat-native 를 적용하면 약 30% 정도의 성능이 개선되는것 같군요 .. 

 




Android 1.0 SDK 에 포함된 Emulator(emulator.exe) 를 컴파일하는 방법입니다.
Android Emulator 소스코드는 Windows, Linux, OSX 에서 컴파일 할 수 있습니다. 
저는 Windows PC 용으로 컴파일 하는 방법을 보여 드리겠습니다.

그리고, RC2 소스를 받아서 바로 컴파일 하면 Compile Error 가 생깁니다. 이전 버전에서는 없던 Bug 인데, Android 개발자가 소스코드를 잘 못 올린듯 합니다.
일단, Makefile 에 버그가 있는데, 수정하는 방법을 알려드리겠습니다.

앞에 글에서도 소개했지만, MinGW 와 MSYS 도 설치가 되어 있어야 합니다. 그리고, MinGW\bin, MSYS\bin 디렉토리가 환경변수의 Path 에 등록되어 있어야 합니다.

1. 먼저 Emulator for Android 1.0 SDK, Release 2
 소스 코드를 다운 받습니다.

2. 도스창을 실행해서 소스코드를 적당한 위치에 풉니다. (MinGW\bin 과 MSYS\bin 디렉토리가 환경변수에 등록되어 있으면 도스창에서 실행할 수 있습니다.)

    tar jxvf android-emulator-1.0_r2.tar.bz2

3. 도스창에서 android-emulator-20081210 디렉토리에서 Confiure 및 빌드를 합니다.

    sh build-emulator.sh

정상적인 경우에는 다음과 같이 하면 빌드 과정이 끝납니다. 그러나, 앞에서도 언급했듯이 이번 버전에 약간의 버그가 있기 때문에 다음과 같이 Patch 를 해주셔야 합니다.

1. Copy qemu\android\config\windows\config-host.h file to qemu\config-host.h.

2. Remark the line 476 in qemu\Makefile.android
   
   #LOCAL_LDLIBS += -lm -lpthread

3. Add the Icon to execution file(emulator.exe). 
    Modify the qemu\android\build\host_executable.make

   
Add to line 32: 
       windres images/android_icon.rc -I images -o images/android_icon.o   
       $(hide) $(LD) $(PRIVATE_LDFLAGS) -o $@ $(PRIVATE_LIBRARY) $(PRIVATE_LDLIBS) images/android_icon.o

4. Rebuild in qemu Directory
    
    make
    
이상과 같이 하면 qemu\objs Directory 에 emulator.exe 가 생성될 것입니다.

이제, Android SDK 1.0, Release 2 를 다운로드(http://dl.google.com/android/android-sdk-windows-1.0_r2.zip) 받은 다음, emulator.exe 를 변경하시면 새로 컴파일한 emulator 로 실행하실 수 있습니다.

부족한 부분이 많지만 끝까지 읽어주셔서 감사합니다...



   
 




안녕하세요?

Android Emulator Source Code 를 Windows PC 에서 컴파일 하기 위해서는 먼저 MinGW(http://www.mingw.org/) 와 MSYS 를 설치하여야 합니다.

MinGW 는 Windows 용 GCC Compiler Toolchain 이고, MSYS(Minal SYStem) 으로 Windows 에서 Linux Shell 과 Binutils 환경을 제공해 줍니다.

1. MinGW 다운로드
- 자세한 설치 방법은 HOWTO Install the MinGW (GCC) Compiler 를 참조하세요..

- 자세한 설치 방법은 MSYS 를 참조하세요..

3. MinGW\bin, MSYS\bin 디렉토리를 환경변수의 Path 에 등록해 줍니다.




 

 
 



저는 android-emulator-m5-rc14 버전의 Android Emulator 를 가지고 처음 작업을 시작하였습니다.

그리고, Emulator for Android 1.0 SDK, Release 1 까지 나온것을 보았는데, 몇일전에 Release 2 가

발표되었군요...

그래서, 블로그 포스트에서는 Emulator for Android 1.0 SDK, Release 2 를 기준으로 한번 살펴 보겠습니다...

많이 기대해 주세요...



Android Emulator 관련 블로그를 시작합니다.

2008. 12. 15. 16:13 | Posted by HISONA
안녕하세요?

OHADEV 라는 Blog 로 Android 관련 포스트를 시작해 볼려고 했는데..
계속 시간이 없다는 이유(?)로  블로그가 놀고 있었네요 ..

저는 현재 Android Platform 을 가지고  Application 작업을 하는것은 아니고,
Android Emulator 와 Kernel 을 가지고 여러가지 작업을 해보고 있습니다.

다들 아시다시피 Android Emulator 는 QEMU 기반으로, Windows/OSX/Linux 같은 Host PC 에서
Arm Target 을 에뮬레이션하는 Machine Emulator 입니다.

그래서, Android Emulator(QEMU) 와 Kernel 만으로도 임베디드 시스템을
공부하시는 분들한테는 좋은 자료가 될것 같군요...

앞으로 제가 작업한 내용들을 가지고 블로그를 채워보려고 합니다..

많이 기대해 주세요...

이전 1 다음