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