我自己重新修正了一下源码,目前可以编译通过,跟官方的没有功能修改(实际上官方代码也是够烂的.),然后用tar可以解压源码.还有恶心的Java,哪怕是OpenJDK,也是严格跟Ubuntu一起绑定的,老一点都根本死光光了.所以,如果你想翻旧账,只有把做好的Ubuntu变成OVF,到时候再用,不然就悲剧了.(因为到时候哪怕是Old-release有包,PPA也是没药可救了.),而且推荐用Server版本,因为编译安卓之类的,很严格要求,如果只是Linux,是哪个版本的一点关系都没有.
源码包(我自己修正的):网盘链接(4.09GB)
源码包MD5校验:f34c60f151efb40bf74a7d48b8f0bed7
源码包SHA256校验:d000565e7be054163734b1f93f65a7981fbab3412bb8bc6df441fd04d13afcfe
配置参考:
- CPU:无最低要求,但是最好性能越高越好.我参考平台E5-2683v4,如果配置太低还是不建议虚拟机方式安装了.
- 硬盘:30G(内核编译下限) 50G(安卓编译下限) 80G(开启CCACHE下限) 推荐SSD,越大越好.有条件最好RAM内编译.
- 系统:Ubuntu 16.04 x64 Server (也可以安装桌面板,只是想多压榨性能.就不要被图形拖累了.)
- RAM:8GB(物理内存至少拥有8GB,否则SWAP都救不活),16G总内存(RAM + SWAP),最好全部是物理RAM.
- 虚拟化:KVM/VMWare 均可,OpenVZ/Docker/Hyper-V失败,物理机最好.
当然啦,要编译,当然要有好机器,只要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
整个过程就完结了~