RK3568 Android12 RK628编译报错问题

Platform: RK3568
OS: Android 12
Kernel: v4.19.206
SDK Version:android-12.0-mid-rkr1


问题

在dts中配置rk628时遇到编译报错,提示找不到rk628的label:

scripts/kconfig/conf --syncconfig Kconfig
DTC arch/arm64/boot/dts/rockchip/rk3568-evb1-ddr4-v10.dtb
CALL scripts/checksyscalls.sh
Error: ./scripts/dtc/include-prefixes/arm/rk628.dtsi:25.1-7 Label or path rk628 not found
Error: arch/arm64/boot/dts/rockchip/rk3568-evb1-ddr4-v10.dtsi:393.7-17 syntax error

FATAL ERROR: Unable to parse input tree
scripts/Makefile.lib:307: recipe for target ‘arch/arm64/boot/dts/rockchip/rk3568-evb1-ddr4-v10.dtb’ failed
make[1]: *** [arch/arm64/boot/dts/rockchip/rk3568-evb1-ddr4-v10.dtb] Error 1
arch/arm64/Makefile:145: recipe for target ‘rockchip/rk3568-evb1-ddr4-v10.dtb’ failed
make: *** [rockchip/rk3568-evb1-ddr4-v10.dtb] Error 2

解决方法

#include <arm/rk628.dtsi> 必须要放在rk628的定义之后

&i2c3 {
        clock-frequency = <400000>;
        status = "okay";

        rk628: rk628@50 {
                reg = <0x50>;
                interrupt-parent = <&gpio0>;
                interrupts = <RK_PA0 IRQ_TYPE_LEVEL_HIGH>;
                enable-gpios = <&gpio0 RK_PC5 GPIO_ACTIVE_HIGH>;
                reset-gpios = <&gpio0 RK_PB7 GPIO_ACTIVE_LOW>;
                status = "okay";
        };  
};

#include <arm/rk628.dtsi>

&rk628_hdmi {
        status = "okay";

        ports {
                #address-cells = <1>;
                #size-cells = <0>;

                port@0 {
                        reg = <0>;

简单分析

这个小问题却困扰了挺久,后来还是靠这篇文章1才解惑。
报错的主要原因是我把#include <arm/rk628.dtsi>放在dts头部位置了。
打开arch/arm/boot/dts/rk628.dtsi,可以看到这里是引用了&rk628节点,而该节点的定义是在我们dts的&i2c节点中实现的,根据dts的规范,节点要先定义后引用,是有顺序要求的,否则就会出现编译报错。

&rk628 {
        compatible = "rockchip,rk628";

        rk628_cru: cru {
                compatible = "rockchip,rk628-cru";
                #clock-cells = <1>;
                #reset-cells = <1>;
                status = "okay";
        };

        rk628_efuse: efuse {
                compatible = "rockchip,rk628-efuse";
                clocks = <&rk628_cru CGU_PCLK_EFUSE>;
                clock-names = "pclk";
                resets = <&rk628_cru RGU_EFUSE>;
                #phy-cells = <0>;
                status = "disabled";
        };

其实在rk 的参考dts中(如: rk3568-evb6-ddr3-v10-rk628-rgb2hdmi.dts)就是这么配置的,如果老老实实参考该配置就没有问题。但是我却自作主张,为了格式整洁把include写在了文件头部,自己造出了bug。还以为已经对dts的配置已经很熟悉了,看来还是要多修炼啊。

关于dts设备树的详细说明我找到了这些资料234,多看看还是很有收获的!


如有谬误欢迎指正,感谢阅读~

参考资料


  1. [RK3568 Android11] 开发之RK628D HDMI IN 显示一 ↩︎

  2. [RK3568 Android11] 教程之设备树DTS讲解 ↩︎

  3. Device Tree Usage ↩︎

  4. devicetree-specification-v0.4-rc1.pdf ↩︎

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值