'2017/04/08'에 해당되는 글 1건

  1. 2017.04.08 Raspberry Pi 에 Android AOSP 빌드하기 1
반응형

 Raspberry Pi의 공식 이미지로는 android 가 존재하지 않는다. 따라서 Raspberry Pi에서 Android 를 이용하기 위해서는 AOSP를 직접 빌드하거나, 아니면 이미 빌드 된 Android 버전을 이용하면 된다. 


 이미 빌드된 android 중 다음의 RTAndroid 를 이용할 수 있다. (raspberry pi 3 버전만 사용 가능하다)


https://rtandroid.embedded.rwth-aachen.de/downloads/raspberry-pi/


위 버전은 Google Play Store까지 이용 가능한데, 설치에 대한 부분은 다음의 블로그를 참고하면 된다.


http://blog.seabow.pe.kr/?p=7278


 AOSP 빌드를 위해서는 android 버전의 Raspberry PI Linux Kernel 과 device driver등이 필요하다. 다음은 관련 글들이 올라오는 구글 그룹스이다.


https://groups.google.com/forum/#!forum/android-rpi


 그리고 android의 AOSP 버전을 빌드 할 수 있는 방법과 소스는 다음의 github 를 참고하면 된다.


https://github.com/android-rpi

https://github.com/peyo-hd


 https://github.com/peyo-hd 는 https://github.com/android-rpi 멤버중 한 사람의 운영하는 github 인데, android 7.0 버전 이전 안드로이드를 aosp 빌드하기 위한 소스/방법이 있다. 


참고로 android-rpi 는 현재(2017.04.09) android 7.1.2_r4 소스를 빌드할 수 있다.


 peyo-hd 에 있는 android 7.0 이전 버전의 경우 broadcom 의 VideoCore(VC4) Graphic Driver를 이용하지 않으며 Raspberry Pi 2만 지원되는듯 하다. (Mesa 및 DRM 가속이 안되어 Display 속도가 느리고, OpenGL ES 이용시 제약이 있는것 같다. Chromium 실행시 EGL 관련 오류 발생) 본 포스팅에서는 android-rpi 를 기준으로 ubuntu 16.04에서 빌드하는 것을 설명한다.


 * 안드로이드 소스 다운로드

https://source.android.com/source/downloading 에서 설명하는 방법으로 repo tool 을 설치한다.


 1. PATH 가 설정된 폴더를 생성한다. (예를 들어 ~/bin)

 2. Repo 를 상기 1.에 설정된 폴더에 다운로드 하고 실행 옵션을 준다

- curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo

- chmod a+x ~/bin/repo

3. git 을 설정한다. (google account 와 연계된 이메일로 설정해야 한다)

- git config --global user.name "Your Name"

- git config --global user.email "you@example.com"


https://github.com/android-rpi/local_manifests 에서 설명하는 방법으로 소스를 다운로드하고 local_manifests를 설정하고 소스를 다운로드 한다.


  1. repo init -u https://android.googlesource.com/platform/manifest -b android-7.1.2_r4

  2. git clone https://github.com/android-rpi/local_manifests .repo/local_manifests

  3. repo sync


* 소스 빌드

https://github.com/android-rpi/device_brcm_rpi3 에서 설명하는 방법으로 소스를 빌드한다.


  1. 커널 빌드

- gcc-arm-linux-gnueabihf설치: sudo apt-get install gcc-arm-linux-gnueabihf

- cd kernel/rpi

- ARCH=arm scripts/kconfig/merge_config.sh arch/arm/configs/bcm2709_defconfig android/configs/android-base.cfg android/configs/android-recommended.cfg

- ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make zImage

- ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make dtbs

- make 시 -j[n] 옵션에서 core 개수를 지정해 주면 멀티코어의 장점을 이용할 수 있다.


  2. 안드로이드 프레임웍 빌드

- python mako module 설치 : sudo apt-get install python-mako

- framework source 패치 : https://github.com/android-rpi/device_brcm_rpi3/wiki#use-hal_pixel_format_bgra_8888 을 참고하여 패치한다. 소스 위치가 조금 다른데, Keyword로 찾아서 바꿔주면 된다.

- 세팅 앱 패치 : 세팅 앱을 패치해 주지 않으면 세팅 앱 실행시 crash 가 발생한다.  https://github.com/android-rpi/device_brcm_rpi3/wiki/Runtime-Errors 의 방법으로 패치한다.

- source build/envsetup.sh

- lunch rpi3-eng

- make

- make 시 -j[n] 옵션에서 core 개수를 지정해 주면 멀티코어의 장점을 이용할 수 있다.


* sd card 설치

  1. sd card partition 설정

- 다음과 같이 partition 을 설정한다. (ubuntu의 gparted 를 이용하거나 fdisk/mk.ext4/mk.vfat 을 이용해도 된다. 레이블과 플래그 설정에 주의해야 한다.)



 2. System partition Write

- 빌드한 소스 루트의 out/target/product/rpi3 로 이동해서 다음의 명령으로 System partition을 write 한다

- sudo dd if=system.img of={system lable의 파티션, 위 예에서는 /dev/sdf2} bs=1M


 3. BOOT partition Write

- mkdir ~/temp

- sudo mount {BOOT partition} ~/temp

- sudo cp device/brcm/rpi3/boot/* ~/temp

- sudo cp kernel/rpi/arch/arm/boot/zImage ~/temp

- sudo cp kernel/rpi/arch/arm/boot/dts/bcm2710-rpi-3-b.dtb ~/temp

- sudo mkdir ~/temp/overlays

- sudo cp kernel/rpi/arch/arm/boot/dts/overlays/vc4-kms-v3d.dtbo ~/temp/overlays

- sudo cp out/target/product/rpi3/ramdisk.img ~/temp

- raspberry pi2에서 실행시키기 위해서는 https://github.com/android-rpi/device_brcm_rpi3/wiki/Running-on-Raspberry-Pi-2 에 나온 대로 하면 된다. 

. bcm2710-rpi-3-b.btb 대신 bcm2709-rpi-2-b.btb 를 복사한다.

. ~/temp/config.txt 의 device_tree=bcm2710-rpi-3-b.dtb 를 bcm2709-rpi-2-b.dtb로 바꿔준다.


* 실행

 sd card를 꼽고, 전원을 연결하면 android 로고 화면이 나타나면서 부팅된다. 처음에는 시간이 조금 걸린다. 정보 보기 화면은 다음과 같다.



설정에서 WiFi 를 활성화 하고 네트워크를 연결한다. IP를 확인하고 호스트 컴퓨터에서 해당 ip로 adb connect 가 가능하다. (예: adb connect 192.168.0.XX) adb logcat 을 호스트에서 실행하면 로그를 볼 수 있다. 


 PC 키보드는 다음으로 매핑된다.

- F1: Home

- F2: Back

- F3: Menu

- F11: Volume Down

- F12: Volume Up

반응형
Posted by alias
,