电脑配置
CPU 64位 越强劲越好;
磁盘:最好500GB以上(SDK压缩包约81GB;一套代码编完之后 占225GB;还要预留一些空间备用)。
虚拟机内存要求16GB以上,多多益善,小于16GB编译会报错。详见后文:【常见问题1:内存不够16GB,编Android出错 】 一节。
编译耗时参考数据:
build.sh默认为16线程并行编译;
虚拟机配置 I5 4核 2.9GHZ、DDR4 24GB ; -J8 ,全编 耗时8.5H; -J16 ,全编 耗时8.5H;
由此可见4核8线程的PC,-J16 跟 -J8是一样的。
编译环境搭建
给虚拟机安装 ubuntu16.04 系统。
安装JDK8。
要求安装下列软件包:
sudo apt-get install
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 python-pyelftools python3-pyelftools device-tree-compiler libfdt-dev
libfdt1 libssl-dev liblz4-tool python-dev
笔者是在RK3288 RK3399 Android8.1 Android9.0的编译环境基础上搭建的,补充安装下列软件包即可。
$sudo apt-get update
$sudo apt-get install libc6-dev-i386 x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev unzip python-pyelftools python3-pyelftools device-tree-compiler libfdt-dev libfdt1 libssl-dev python-dev
先计算SDK压缩包的MD5值,跟给来的MD5值对比,确认压缩包没损坏再解压
$md5sum rk_android11.0_sdk_220215.tgz
$tar -xzvf rk_android11.0_sdk_220215.tgz
编译SDK自带的板型
到SDK根目录下 执行:
$ source build/envsetup.sh
$ lunch
选55. rk3568_r-userdebug
执行编译脚本前 至少要source lunch 一次,当想编另一个板型时,必须再执行一次source lunch 。其作用是选定一个板型对应的配置并初始化编译环境变量。
简单了解一下build.sh:
$ ./build.sh --help
./build.sh: 非法选项 -- -
USAGE: [-U] [-CK] [-A] [-p] [-o] [-u] [-v VERSION_NAME]
No ARGS means use default build option
WHERE: -U = build uboot
-C = build kernel with Clang
-K = build kernel
-A = build android
-p = will build packaging in IMAGE
-o = build OTA package
-u = build update.img
-v = build android with 'user' or 'userdebug'
-d = huild kernel dts name
-V = build version
-J = build jobs
所以,大多数情况下执行:
$ ./build.sh -UKApu
即可。
编译kernel时会弹出IO电压域确认提示框:
详情请看《Rockchip_Developer_Guide_Android11_SDK_V1.1.5_CN.pdf》 【RK356X IO-Domain GPIO电压配置确认,GPIO电压没配置对会导致芯片GPIO烧坏】 一节。
大意为:你首先要自己看原理图或者跟硬件同事确认各IO电压域选用的是1.8V还是3.3V;然后修改dts中pmu_io_domains节点的配置:
一般在kernel/arch/arm64/boot/dts/rockchip/rk3568-evb.dtsi中:
&pmu_io_domains {
status = "okay";
pmuio2-supply = <&vcc3v3_pmu>;
vccio1-supply = <&vccio_acodec>;
vccio3-supply = <&vccio_sd>;
vccio4-supply = <&vcc_1v8>;
vccio5-supply = <&vcc_3v3>;
vccio6-supply = <&vcc_1v8>;
vccio7-supply = <&vcc_3v3>;
};
然后在编译时 会弹出界面让你再确认一次,你按上面dts的配置选择并确认即可。
后续 如果dts中这部分不变 则不会再弹框;如果改变了 会让你再确认一次的。
一定要根据硬件实际情况来配置电压域,否则有烧器件的风险。
编译成功
经过漫长的等待,当看到这一段 即为已成功编译出固件:
#### build completed successfully (08:29:32 (hh:mm:ss)) ####
Build android ok!
make and copy android images
TARGET_PRODUCT=rk3568_r
TARGET_BASE_PARAMETER_IMAGE==device/rockchip/common/baseparameter/v2.0/baseparameter.img
HIGH_RELIABLE_RECOVERY_OTA=
BOARD_AVB_ENABLE=false
system filesysystem is ext4
create dtbo.img...
done.
create resource.img...
done.
create boot.img...
done.
create boot-debug.img...
done.
skip copy images: vendor_boot.img
skip copy images: vendor_boot-debug.img
create recovery.img...
done.
create super.img...
done.
create vbmeta.img...
BOARD_AVB_ENABLE is false, use default vbmeta.img
create misc.img.... done.
create uboot.img...
u-boot/trust.img not fount! Please make it from u-boot first!
create loader...
create config.cfg...
create baseparameter...done.
Make image ok!
Make update.img
start to make update.img...
Android Firmware Package Tool v2.0
------ PACKAGE ------
Add file: ./package-file
package-file,Add file: ./package-file done,offset=0x800,size=0x2ba,userspace=0x1
Add file: ./Image/MiniLoaderAll.bin
bootloader,Add file: ./Image/MiniLoaderAll.bin done,offset=0x1000,size=0x719c0,userspace=0xe4
Add file: ./Image/parameter.txt
parameter,Add file: ./Image/parameter.txt done,offset=0x73000,size=0x282,userspace=0x1
Add file: ./Image/uboot.img
uboot,Add file: ./Image/uboot.img done,offset=0x73800,size=0x400000,userspace=0x800
Add file: ./Image/misc.img
misc,Add file: ./Image/misc.img done,offset=0x473800,size=0xc000,userspace=0x18
Add file: ./Image/boot.img
boot,Add file: ./Image/boot.img done,offset=0x47f800,size=0x1f68800,userspace=0x3ed1
Add file: ./Image/dtbo.img
dtbo,Add file: ./Image/dtbo.img done,offset=0x23e8000,size=0x26f,userspace=0x1
Add file: ./Image/vbmeta.img
vbmeta,Add file: ./Image/vbmeta.img done,offset=0x23e8800,size=0x1000,userspace=0x2
Add file: ./Image/recovery.img
recovery,Add file: ./Image/recovery.img done,offset=0x23e9800,size=0x435c800,userspace=0x86b9
Add file: ./Image/baseparameter.img
baseparameter,Add file: ./Image/baseparameter.img done,offset=0x6746000,size=0x100000,userspace=0x200
Add file: ./Image/super.img
super,Add file: ./Image/super.img done,offset=0x6846000,size=0x60410e00,userspace=0xc0822
Add CRC...
Make firmware OK!
------ OK ------
********rkImageMaker ver 2.0********
Generating new image, please wait...
Writing head info...
Writing boot file...
Writing firmware...
Generating MD5 data...
MD5 data generated successfully!
New image generated successfully!
Making update.img OK.
Make update image ok!
/home/ubuntu/work/rk_android11.0_sdk_220215
make and copy packaging in IMAGE
Generate patch for hardware/rockchip/libhwjpeg done
Generate patch for kernel done
Saved manifest to out/commit_id.xml
编译好的固件在rockdev/Image-rk3568_r目录下:
rockdev/Image-rk3568_r$ ls -al
总用量 3400364
drwxrwxr-x 2 ubuntu ubuntu 4096 4月 11 07:11 .
drwxrwxr-x 3 ubuntu ubuntu 4096 4月 11 07:10 ..
-rwxrwxr-x 1 ubuntu ubuntu 1048576 9月 7 2021 baseparameter.img
-rw-rw-r-- 1 ubuntu ubuntu 33081344 4月 11 04:22 boot-debug.img
-rw-rw-r-- 1 ubuntu ubuntu 32933888 4月 11 04:22 boot.img
-rwxrwxr-x 1 ubuntu ubuntu 6129 5月 14 2021 config.cfg
-rw-rw-r-- 1 ubuntu ubuntu 623 4月 11 02:35 dtbo.img
-rw-rw-r-- 1 ubuntu ubuntu 465344 4月 10 22:26 MiniLoaderAll.bin
-rw-rw-r-- 1 ubuntu ubuntu 49152 2月 19 2021 misc.img
-rw-rw-r-- 1 ubuntu ubuntu 630 4月 11 03:06 parameter.txt
-rw-rw-r-- 1 ubuntu ubuntu 49152 2月 19 2021 pcba_small_misc.img
-rw-rw-r-- 1 ubuntu ubuntu 49153 2月 19 2021 pcba_whole_misc.img
-rw-rw-r-- 1 ubuntu ubuntu 70633472 4月 11 05:59 recovery.img
-rw-rw-r-- 1 ubuntu ubuntu 224256 4月 10 22:39 resource.img
-rw-r--r-- 1 ubuntu ubuntu 1614876160 4月 11 07:08 super.img
-rw-rw-r-- 1 ubuntu ubuntu 4194304 4月 10 22:26 uboot.img
-rw-rw-r-- 1 ubuntu ubuntu 1724680778 4月 11 07:11 update.img
-rwxrwxr-x 1 ubuntu ubuntu 4096 2月 19 2021 vbmeta.img
常见问题1:内存不够16GB,编Android出错
编Android,才编几分钟就失败,看log 缓存,又看不到有error。
启动编译后,守着看或者将编译log写到文件中,会看到有提示:
start build android
21:10:55 ************************************************************
21:10:55 You are building on a machine with 9.76GB of RAM
21:10:55
21:10:55 The minimum required amount of free memory is around 16GB,
21:10:55 and even with that, some configurations may not work.
21:10:55
21:10:55 If you run into segfaults or other errors, try reducing your
21:10:55 -j value.
21:10:55 ************************************************************
============================================
原因是:虚拟机内存不够大,编Android11 内存需要16GB以上。
解决办法:增大内存。