概述
本文描述了在RK3568 Android中创建新的产品配置文件和设备树选择。
添加新产品配置选项
当我们使用RK3568 Android 11开启一个新的项目编译Android系统时,我们需要选择编译系统的产品名字和编译的版本类型。为了编译新项目的管理和维护,我们通常做法时创建一个自己产品的配置选项。下面我们讲述创建自己产品配置选项的步骤;
1)为了快速创建自己产品的配置选项,我们可以复制RK3568 官方 EVK板子的产品目录。在RK3568 Android11源码目录中,假设我们创建rk3568_taurus的产品名字,可以执行如下的shell命令
cd device/rockchip/rk356x
cp -r rk3568_r/ rk3568_taurus
2)进入到device/rockchip/rk356x/rk3568_taurus目录下,将rk3568_r.mk文件重新命名为rk3568_taurus.mk,然后修改如下信息

3)修改device/rockchip/rk356x/rk3568_taurus/目录下的BoardConfig.mk配置文件,修改如下

这里主要是选择编译系统时,我们选择的内核设备树文件和uboot配置文件。我们从Android系统的源码kernel/arch/arm64/boot/dts/rockchip目录下,可以看到很多关于3568相关的设备树文件

我们如何正确选择我们构建系统时的设备树文件呢?我们从如下的几个关注点选择设备树:
a、镜像存储类型emmc, 比如我项目用到的是emmc存储,可以选择包含如下的设备节点设备树作为候选;
&sdhci {
bus-width = <8>;
supports-emmc;
non-removable;
max-frequency = <200000000>;
status = "okay";
};
b、使用的内存ddr类型;
根据项目中用到ddr类型,选择带有相同ddr字样的设备树最为候选,比如我的项目是使用ddr4, 我们可以选择rk3568 evk中带有ddr4字样的设备树作为候选;
c、使用的电源管理芯片;
如果你使用的是rk809电源管理芯片,则可以选择有如下节点的设备树作为候选:
&i2c0 {
status = "okay";
vdd_cpu_b: syr827@40 {
compatible = "silergy,syr827";
reg = <0x40>;
vin-supply = <&vcc5v0_sys>;
regulator-compatible = "fan53555-reg";
regulator-name = "vdd_cpu_b";
pinctrl-0 = <&vsel1_gpio>;
vsel1-gpios = <&gpio0 2 0>;
regulator-min-microvolt = <712500>;
regulator-max-microvolt = <1500000>;
regulator-ramp-delay = <1000>;
fcs,suspend-voltage-selector = <1>;
regulator-always-on;
regulator-boot-on;
regulator-initial-state = <3>;
regulator-state-mem {
regulator-off-in-suspend;
};
};
rk809: pmic@20 {
compatible = "rockchip,rk809";
reg = <0x20>;
interrupt-parent = <&gpio0>;
interrupts = <3 IRQ_TYPE_LEVEL_LOW>;
pinctrl-names = "default", "pmic-sleep",
"pmic-power-off", "pmic-reset";
pinctrl-0 = <&pmic_int>;
pinctrl-1 = <&soc_slppin_slp>, <&rk817_slppin_slp>;
pinctrl-2 = <&soc_slppin_gpio>, <&rk817_slppin_pwrdn>;
pinctrl-3 = <&soc_slppin_gpio>, <&rk817_slppin_rst>;
通过这个三个方面的评估,我们可以选择出来让系统可以运行的最小系统的设备树文件。这里我最终选择rk3568-evb5-ddr4-v10.dts作为候选;
4)添加产品编译选项
修改device/rockchip/rk356x目录下的AndroidProducts.mk文件,添加如下的修改 +号为新增的项
--- a/device/rockchip/rk356x/AndroidProducts.mk
+++ b/device/rockchip/rk356x/AndroidProducts.mk
@@ -19,6 +19,7 @@ PRODUCT_MAKEFILES := \
$(LOCAL_DIR)/rk3566_32bit/rk3566_32bit.mk \
$(LOCAL_DIR)/rk3566_r/rk3566_r.mk \
$(LOCAL_DIR)/rk3568_r/rk3568_r.mk \
+ $(LOCAL_DIR)/rk3568_taurus/rk3568_taurus.mk \
$(LOCAL_DIR)/rk3566_eink/rk3566_eink.mk \
$(LOCAL_DIR)/rk3566_einkw6/rk3566_einkw6.mk
@@ -31,6 +32,8 @@ COMMON_LUNCH_CHOICES := \
rk3566_r-user \
rk3568_r-userdebug \
rk3568_r-user \
+ rk3568_taurus-userdebug \
+ rk3568_taurus-user \
rk3566_eink-userdebug \
rk3566_eink-user \
rk3566_einkw6-userdebug \
5)验证
添加完产品配置后,在Android源码目录下执行如下的命令
a、source build/envsetup.sh
b、lunch,出现如下的taurus配置信息

设备树组成
RK3568 Android 11的内核设备树由如下的部分构成

其中:
a、rk3568.dtsi: RK3568 SOC Controller设备树文件,在驱动开发过程中,不需要修改;
b、rk3568-android.dtsi: Android 系统平台的设备树配置文件,如果是开发linux系统的话,则是rk3568-linux.dtsi。Android系统驱动开发中,基本上也不需要修改该文件;
c、rk3568-evb5-ddr4-v10.dtsi: 这是Rockchip官方参考板子的设备树配置文件,我们在正式项目中,由于硬件资源的配置与官方参考板子的差异很多,这个文件基本上作为一个参考文件。
d、rk3568-evb.dtsi 也是Rockchip开发板子的设备树配置文件;
e、rk3568-evb5-ddr4-v10.dts:产品最终的板卡设备树配置文件。
正式项目中,我们可能会用同一个硬件板子去开发不同的产品,如下的举例中,我们用boardxxx板子去开发了两个产品,设备树文件文件示意图如下所示:

g、设备树文件中dtsi和dts的区别
在日常的项目开发中,我们大多数情况下都会使用同一款硬件板卡去开发不同的产品,如果我们为每一个产品都编写一个独立的设备树文件,这样就会导致我们每一个独立的产品设备树文件都会包含大量的重复相同的内容,如果有一天,我们需要硬件进行BOM升级和改版,则我们就需要根据硬件板卡的改动点去修改每一个独立编写的设备树文件,不便于项目的维护。这时候,我们就可以把每个产品设备树相同的部分都抽取出来,放入一个单独的文件,文件的后缀我们修改为dtsi(当然修改为dts也没有影响,为了规范,我们一般都修改为dtsi),这样每个产品的设备树配置文件,只需要包含这个公共部分就可以。大大简化了创建新的产品配置文件和项目维护的效率。
工程连接
工程连接中,我存放了文章描述中涉及到修改的文件,文件都是按照RK3568 Android11的源码位置的完整路径存放,感兴趣的同学,可以参考如下工程:
https://gitee.com/yanl1229/Rockchip_Android11.git
总结
本文描述了在RK3568 Android中创建新的产品配置文件和设备树选择。