樹莓派3 Android 7.0 編譯

ubuntu16.04

以前編譯Android, 只能在ubuntu 14.04之前的版本. 如今, 樹莓派終於改善了, 需使用ubuntu 16.04的版本. 值的慶賀啊~~~

前言

RaspBerry 3 Mode B的SoC使用 Broadcom BCM2837, 時脈為1.2G, 四核心, GPU支援Open GL ES 2.0, 畫素為1080p, Ram為1G byte, 配有10/100 RJ45, Wireless 802.11n, Bluetooth 4.1

RaspBerry 3 可以安裝Android 7.0系統.  在編譯Android時, 需使用ubuntu 16.04的版本.

設定編譯環境

RaspBerry 3 在編譯Android 7.0 時, 需使用openjdk-8-jdk. 而 RaspBerry 2 是使用openjdk-7-jdk, 二者不一樣, 請注意.

下面的環境安裝, 己包含了openjdk-8-jdk了

sudo apt-get install -y git gnupg flex bison gperf zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 tofrodos libgl1-mesa-dev python-markdown libxml2-utils xsltproc zlib1g-dev:i386 gawk xsltproc flex bison gperf build-essential curl zlib1g-dev g++-multilib libc6-dev-i386 lib32ncurses5-dev  x11proto-core-dev libx11-dev lib32z1-dev wine tofrodos libgl1-mesa-dev xrdp git-core libxml2-utils lib32z1 lib32ncurses5 xsltproc git gnupg flex bison gperf build-essential zip curl libc6-dev  x11proto-core-dev g++-multilib tofrodos libgl1-mesa-dev python-markdown libxml2-utils xsltproc gawk openjdk-8-jdk

安裝repo

Android 使用repo進行版本管控, 所以需先安裝repo

curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

下載Android 7.0原始碼

原始碼一直有更新版本, 可以如下網站查得
https://android.googlesource.com/platform/manifest/+refs

repo init -u https://android.googlesource.com/platform/manifest -b android-7.1.2_r19
git clone https://github.com/android-rpi/local_manifests .repo/local_manifests
repo sync

備份原始碼

原始碼下載, 總需花上二三個小時, 所以最好先備份起來. 待日後改亂了回不去, 可以使用備份檔解壓重來.

而原始檔又超大, 約有48G. 所以可以只備份 .repo這個目錄, 待解壓後, 進入 .repo目錄後, 再下達~/bin/repo sync即可

備份方法 : tar zcvf  /data/android7.tar.gz .repo

Build Kernel

編譯kernel時, 需使用Cross Compiler, 所以需先安裝 arm 的gcc編譯器
sudo apt-get install gcc-arm-linux-gnueabihf

編譯過程如下

core=$(cat /proc/cpuinfo | grep processor | wc -l)
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 -j$core
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make dtbs -j$core

*-j$(core) : 全速使用所有的cpu資源

編譯原始碼

編譯原始碼時, 會使用到python, 所以需先安裝一下
sudo apt-get install python-mako

編譯方式如下

source build/envsetup.sh
lunch rpi3-eng
make -j$core

在lunch 後面, 可以選擇三種模式 :
rpi3-eng : 工程模式, 工程師研發用
rpi3-debug : QA人員測試模式
rpi3-user : End user 發行版本

# Prepare sd card
 Partitions of the card should be set-up like followings.
  p1 512MB for BOOT : Do fdisk : W95 FAT32(LBA) & Bootable, mkfs.vfat
  p2 512MB for /system : Do fdisk, new primary partition
  p3 512MB for /cache  : Do fdisk, mkfs.ext4
  p4 remainings for /data : Do fdisk, mkfs.ext4
 Set volume label for each partition - system, cache, userdata
  : use -L option of mkfs.ext4, e2label command, or -n option of mkfs.vfat
 
# Write system partition
  $ cd out/target/product/rpi3
  $ sudo dd if=system.img of=/dev/<p2> bs=1M
  
# Copy kernel & ramdisk to BOOT partition
  device/brcm/rpi3/boot/* to p1:/
  kernel/rpi/arch/arm/boot/zImage to p1:/
  kernel/rpi/arch/arm/boot/dts/bcm2710-rpi-3-b.dtb to p1:/
  kernel/rpi/arch/arm/boot/dts/overlays/vc4-kms-v3d.dtbo to p1:/overlays/vc4-kms-v3d.dtbo
  out/target/product/rpi3/ramdisk.img to p1:/

# HDMI_MODE : If DVI monitor does not work, try followings for p1:/config.txt
  hdmi_group=2
  hdmi_mode=85

 目前測試

repo init -u https://android.googlesource.com/platform/manifest -b android-7.1.1_r6
cd .repo
git clone https://github.com/peyo-hd/local_manifests -b nougat
repo sync


			

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *