“固件构建指南——环境搭建与编译步骤”的版本间的差异

来自弘迪在线
跳转至: 导航搜索
编译Android并打包
编译Android并打包
第99行: 第99行:
  
 
$ lunch
 
$ lunch
 +
 +
会显示若干选项,输入对应的数字按回车选择对应的选项,最终完成配置。
 +
 +
对于A33(Android 4.4):选
 +
 +
对于A64(Android 6.0):选
 +
 +
对于A40i(Android 7.1):选
 +
 +
对于A133(Android 10):选
  
 
$ extract-bsp
 
$ extract-bsp

2021年12月5日 (日) 20:33的版本

编译环境搭建

安装Ubuntu操作系统

建议装在本机(编译速度快),没有条件的可以装在虚拟机中。

推荐版本:16.04LTS(其他版本也可,但可能会存在软件包源依赖问题导致配置步骤和预期效果与本文不符,有能力的用户可以尝试!)

安装所需组件

在终端窗口内输入下列命令:

sudo apt-get install bison build-essential ccache curl flex gcc-multilib g++-multilib git gnupg gperf lib32ncurses5-dev

sudo apt-get install lib32z1-dev libc6-dev-i386 libgl1-mesa-dev libreadline6-dev:i386 libx11-dev:i386 libxml2-utils m4

sudo apt-get install python-markdown tofrodos unzip x11proto-core-dev xsltproc zip zlib1g-dev:i386 bc u-boot-tools

安装JDK

对于A33 Android 4.4系统:安装Oracle JDK 1.6

对于A33/A64 Android 6.0系统:安装OpenJDK 7

对于A40i Android 7.1/A133 Android 10系统:安装OpenJDK 8

降级make版本

编译步骤

解压源代码

解压Lichee(Linux BSP)部分到当前目录:

$ tar -zxvf lichee.tar.gz -C .

解压Android部分到当前目录:

$ tar -zxvf android.tar.gz -C .

(对于A133:Linux BSP更名为Longan,注意辨别!)

源码结构

对于A33/A64/A40i:

SPL(底层引导代码):lichee/brandy

U-Boot:lichee/brandy/uboot-xxxx.xx

Linux内核:lichee/linux-3.x

系统配置(env.txt和fex文件等):lichee/tools/pack/chips/sunxiwxpx/config

Android源码:android


对于A133:

SPL(底层引导代码):longan/brandy

U-Boot:longan/brandy/uboot-xxxx.xx

Linux内核:longan/kernel/linux-4.9

系统配置(env.txt和fex文件等):longan/device/config/chips/a100/config

Android源码:android

编译U-Boot

默认无需编译。若要修改U-Boot,编译方法如下:

在brandy/uboot-xxxx.xx目录下执行:

对于A33:make distclean & make sun8iw5p1 -j16

对于A64:make distclean & make sun50iw1p1_config & make -j16

对于A40i:make distclean & make sun8iw11p1_config & make -j16

对于A133:make distclean & make sun50iw10p1_config & make -j16

(编译生成的相关bin文件会自动拷贝到打包目录下)

编译Lichee/Longan

初次编译请先配置编译选项,在lichee/longan目录下执行:

$ ./build.sh config

会依次显示若干选项,输入对应的数字按回车选择对应的选项,最终完成配置。

对于A33:依次选

对于A64:依次选 0.sun50iw1p1 -> 0.android -> 0.linux-3.10 -> 2.p2

对于A64:依次选 0.sun8iw11p1 -> 1.androidm -> 0.linux-3.10 -> 0.a40-p1

对于A133:依次选 0.android -> 0.a100 -> 2.c3

编译Android并打包

在android目录下依次执行以下命令:

$ source build/envsetup.sh

$ lunch

会显示若干选项,输入对应的数字按回车选择对应的选项,最终完成配置。

对于A33(Android 4.4):选

对于A64(Android 6.0):选

对于A40i(Android 7.1):选

对于A133(Android 10):选

$ extract-bsp

$ make -j8

CPU有几线程-j后面的数字就是几。例如使用i5 8250U,是4核8线程的处理器,则这里参数为-j8。若make过程中出现内存不足的情况可尝试参数降为-j4或更低。编译过程大概持续数小时,视电脑配置不同而定。

$ pack

对于A33/A64/A40i:打包好的固件位于lichee/tools/pack下面。 对于A133:打包好的固件位于longan/out下面。

常见问题

A:Android 6.0部分make时遇到“unsupported reloc 42 (43) against global symbol art::Runtime::instance_”错误

Q:问题的原因在于AOSP中的预编译好的ld程序存在bug,我们使用Ubuntu系统默认的ld来替换它。具体步骤如下:

将aosp中的ld改名:

$ cd prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/x86_64-linux/bin

$ mv ld ld.old

使用soft link,链接到全局ld:

$ ln -s /usr/bin/ld.gold ld