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