RK3568系列3——初次编译及刷写固件

  初次编译固件按照机器的性能不同,需要4~12小时不等,二次编译需要5~30分钟不等,因此有一台高性能的多核服务器,能够显著提高开发效率。

认识SDK的关键目录

  我们以代号alpha的产品为例,整个SDK目录下有以下几个关键目录:

  • device/rockchip/rk356x/alpha:产品配置文件目录
  • kernel/arch/arm64/boot/dts/rockchip/alpha.dts:关键文件,存放硬件配置信息
  • kernel/kernel/configs/alpha.config:额外的内核配置文件
  • IMAGE:历次编译产生的固件
  • rockdev:存放编译后最新的固件
  • RKDocs:所有文档都在此目录下
  • RKTools:相关工具包,例如烧写工具

新建产品lunch

1
2
3
# 直接复制rk3568的模板
cd device/rockchip/rk356x/
cp -r rk3568_r/ alpha/
1
2
3
4
5
6
7
8
9
10
11
diff AndroidProducts.mk
PRODUCT_MAKEFILES := \
$(LOCAL_DIR)/rk3568_r/rk3568_r.mk
+ $(LOCAL_DIR)/alpha/alpha.mk
$(LOCAL_DIR)/rk3566_eink/rk3568_eink.mk

COMMON_LUNCH_CHOICES := \
rk3568_r-user \
+ alpha-userdebug \
+ alpha-user \
rk3566_eink-userdebug \
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
cd alpha/
mv rk3568_r.mk alpha.mk

vim BoardConfig.mk
PRODUCT_UBOOT_CONFIG := rk3568
PRODUCT_KERNEL_CONFIG := rockchip_defconfig rk356x_evb.config android-11.config alpha.config
PRODUCT_KERNEL_DTS := alpha
BOARD_GSENSOR_MXC6655XA_SUPPORT := false
BOARD_CAMERA_SUPPORT_EXT := true
BOARD_HS_ETHERNET := true

vim alpha.mk
PRODUCT_NAME := ALPHA
PRODUCT_DEVICE := ALPHA
PRODUCT_BRAND := KURETRU
PRODUCT_MODEL := KT-ALPHA
PRODUCT_MANUFACTURER := KURETRU

新建产品DTS

1
2
3
4
5
touch kernel/kernel/configs/alpha.config

cd kernel/arch/arm64/boot/dts/rockchip/
# 以RK的一号开发版为模板
cp rk3568-evb1-ddr4-v10.dtsi alpha.dtsi
1
2
3
4
5
6
7
8
9
10
vim alpha.dts
/dts-v1/;

#include "alpha.dtsi"
#include "rk3568-android.dtsi"

/ {
model = "ALPHA";
compatible = "KURETRU,ALPHA", "rockchip,rk3568";
};

开始编译

  编译版本的区别:

  • eng:工程版本,adb默认打开,root权限
  • userdebug:调试版本,adb默认打开,可提升至root权限
  • user:发布版本,编译优化,adb默认关闭,无法root
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 切换到SDK的根目录
source build/envsetup.sh
lunch alpha-userdebug
./build.sh -UCApu
# 其他有用的参数:
./build.sh -UCApuo # 一并打包OTA升级包
# 不建议这么使用,应该直接修改BoardConfig.mk,否则会导致PRODUCT_KERNEL_DTS宏定义无法传递
./build.sh -UCApu -d beta # 一键编译时采用别的DTS
./build.sh -UCApu -J 32 # 同时进行32个任务(和CPU核心数相同)
./build.sh -UCApu -V 1.0.0 # 版本号

# 单独编译U-Boot
cd u-boot/
./make.sh rk3568

# 单独编译kernel
cd kernel/
make ARCH=arm64 rockchip_defconfig rk356x_evb.conf android-11.config alpha.config
make ARCH=arm64 alpha.img # 这里xxx.img即是编译xxx.dts

# 单独编译Android
make installclean
make

烧写固件

  • 烧写固件时,开发版需要进入MASKROM模式或Loader模式
  • 板子从工厂出厂时flash中没有任何内容,因此会直接进入MASKROM模式
  • 二次烧写时,需要再上电的过程中按住RECOVER按钮进入Loader模式
  • 二次烧写时,也可以在adb中执行reboot loader进入Loader模式,使用此方法不需要按住RECOVER按钮
  • 如果一键编译时加上了-p参数,则会直接生成update.img统一固件,此时使用RKDevTool升级固件页即可一键完成烧写。
  • 如果没有生成update.img,则需要使用RKDevTool下载镜像页,根据RKDevTool_manual_v1.2_cn.pdf的教程,先载入分区表,再分别设置各个分区的内容,然后进行烧写,好处是可以仅烧写部分分区。

参考文档

  • RKDocs/android/Rockchip_Developer_Guide_Android11_SDK_V1.1.6_CN.pdf