NanoPi K2 编译 @ Ubuntu 16.04

/ 0评 / 0

我自己重新修正了一下源码,目前可以编译通过,跟官方的没有功能修改(实际上官方代码也是够烂的.),然后用tar可以解压源码.还有恶心的Java,哪怕是OpenJDK,也是严格跟Ubuntu一起绑定的,老一点都根本死光光了.所以,如果你想翻旧账,只有把做好的Ubuntu变成OVF,到时候再用,不然就悲剧了.(因为到时候哪怕是Old-release有包,PPA也是没药可救了.),而且推荐用Server版本,因为编译安卓之类的,很严格要求,如果只是Linux,是哪个版本的一点关系都没有.
源码包(我自己修正的):网盘链接(4.09GB)
源码包MD5校验:f34c60f151efb40bf74a7d48b8f0bed7
源码包SHA256校验:d000565e7be054163734b1f93f65a7981fbab3412bb8bc6df441fd04d13afcfe
配置参考:

当然啦,要编译,当然要有好机器,只要Linux编译就容易很多,但是如果要涉及Android编译,还是配置高点好.最重要是CPU了.我目前工作目录是/root/android,如果你的工作目录跟我不一样,那么你需要修改工作目录,推荐用全新服务器系统,然后执行下面这句,进行基础软件安装(用Ubuntu 18.04的最小化安装就可以.)

apt-get update
apt-get -y install pixz bison bc nload htop u-boot-tools device-tree-compiler iotop libssl-dev u-boot-tools g++-multilib git gperf libxml2-utils make python-networkx zip flex libncurses5-dev zlib1g-dev gawk minicom git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip make

先说Linux部分的编译,需要先把编译工具加入到PATH常量里面.比如我是这么运行的.

export PATH=/root/android/prebuilts/gcc/linux-x64/arm-cortexa9-linux-gnueabihf-4.9.3/bin
:/root/android/prebuilts/gcc/linux-x64/gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu/bin
:$PATH

然后检查下是否生效OK.

arm-linux-gcc -v
aarch64-linux-gnu-gcc -v

切换到U-Boot目录,如下,然后执行默认配置,然后make就可以.(酌情选择多线程编译)

make nanopi-k2_defconfig
make

编译成功结束后您将获得fip/gxb/u-boot.bin,可使用以下命令直接更新SD卡:

./fusing.sh /dev/sdX

至于Fastboot模式,参考官方吧,我觉得不如这样干脆.

切换到linux目录,开始编译内核.这里有两个分支.按照下面执行命令.(我编译安卓内核,依然可以酌情增加为多线程编译.)

make ARCH=arm64 nanopi-k2_ubuntu_defconfig <= 要编译Linux内核选这个.
make ARCH=arm64 nanopi-k2_android_defconfig <= 要编译安卓内核选这个.
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image nanopi-k2.dtb

内核就比较省事了,更新TF卡上对应的两个文件就可以了.

cp arch/arm64/boot/Image /mnt_boot
cp arch/arm64/boot/dts/amlogic/nanopi-k2.dtb /mnt_boot

如果想镜像生成时候就完成这些(安卓编译),就替换到如下目录.

编译安卓需要先放弃目前的临时环境变量,所以,最好就是退出screen重新来.
编译安卓还要JDK.(如果是Ubuntu 18.04,那么JDK7就装不了,他会自动给你替换JDK8或者报告失败,其他版本还没验证过,目测也是不可以的.)

add-apt-repository -y ppa:openjdk-r/ppa
apt-get -y update
apt-get -y install openjdk-7-jdk

如果想使用CCACHE,还需要增加一些配置(这个可以写到bashrc里面)

export CCACHE_DIR=/data <= 目录你说了算.

然后配置CCACHE.(如果你不用,也可以忽略他,只是加速二次编译的,节约大约30%时间.)

export USE_CCACHE=1
/root/android/prebuilts/misc/linux-x86/ccache/ccache -M 150G

接着安卓编译需要导出两个环境变量,主要是不要使用clang(否则编译出现无法reloc),使用自带JDK辅助(避免JDK版本出现差异.),最后make可以适当增加线程数.(性能允许下,增加这个可以减少编译时间,一般来说,设置为线程数翻倍.)

export ANDROID_SET_JAVA_HOME=true
export WITHOUT_HOST_CLANG=false
source build/envsetup.sh
lunch nanopi_k2-userdebug
make

安卓编译所需时间比其他要长,一般来说,我都是先去干别的,等下再过来看他.(总共花费4分钟24秒.)

切换到生成目录,这里只有一部分文件有用的.

文件名 目标分区 描述
u-boot.bin bootloader 引导文件
boot.img boot 内核文件
cache.img cache Cache
userdata.img userdata 用户数据分区
system.img system 系统分区
partmap.txt - 分区描述文件

把他们挪动到sd-fuse_amlogic/android/ (需要创建目录)下,然后用下面命令烧写,就可以了.

./fusing.sh /dev/sdx android

整个过程就完结了~

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注