保姆级教程:基于RK3588 EVB1参考板,手把手教你创建自定义板级DTS文件

📅 2026/7/3 17:17:06 👁️ 阅读次数 📝 编程学习
保姆级教程:基于RK3588 EVB1参考板,手把手教你创建自定义板级DTS文件

从零构建RK3588自定义硬件描述:DTS文件实战指南

当开发者拿到一块基于RK3588的自研开发板时,第一道门槛往往是如何让系统正确识别硬件配置。本文将带你深入Linux内核的设备树(Device Tree)机制,以EVB1参考板为基础,逐步构建适配自定义硬件的DTS文件。

1. 设备树基础与Rockchip平台特性

设备树(DTS)作为ARM架构下硬件描述的标准化方案,已取代传统的硬编码方式。Rockchip平台的DTS文件通常采用分层结构:

  • SoC级DTSI:描述RK3588芯片内部资源(如rk3588.dtsi
  • 板级DTSI:定义参考板通用配置(如rk3588-evb1-lp4.dtsi
  • 产品级DTS:最终板卡的具体实现(如rk3588-evb1-lp4-v10.dts

典型文件结构示例:

/dts-v1/; #include "rk3588.dtsi" // SoC级定义 #include "rk3588-evb1-lp4.dtsi" // 板级通用配置 #include "rk3588-android.dtsi" // 系统级配置 / { model = "My Custom Board"; compatible = "rockchip,rk3588-myboard", "rockchip,rk3588"; };

2. 参考板选择与差异分析

选择参考板时需重点对比以下硬件模块:

硬件模块EVB1配置自定义板差异点
电源管理双RK806 PMIC单RK806+分立电源
内存LPDDR4 200Ball封装同封装但厂商不同
显示接口双HDMI2.1+1xVGA仅保留单HDMI
外设接口6xUSB3.0+2xRJ454xUSB3.0+1xRJ45
扩展槽PCIe3.0 x4PCIe2.0 x1

实操建议:使用diff工具对比不同参考板的DTS文件:

diff -u rk3588-evb1-lp4-v10.dts rk3588-evb7-lp4-v10.dts

3. 自定义DTS文件创建实战

3.1 基础文件搭建

  1. 在内核源码目录创建新文件:
cd arch/arm64/boot/dts/rockchip cp rk3588-evb1-lp4-v10.dts rk3588-myboard-v1.dts
  1. 修改文件头信息:
// SPDX-License-Identifier: (GPL-2.0+ OR MIT) /* * Copyright (c) 2023 [Your Company] */ /dts-v1/; #include "rk3588-evb1-lp4.dtsi" #include "rk3588-linux.dtsi" / { model = "My Custom RK3588 Board V1"; compatible = "rockchip,rk3588-myboard-v1", "rockchip,rk3588"; };

3.2 关键硬件适配修改

案例1:GPIO背光控制修改

&backlight { enable-gpios = <&gpio2 RK_PB7 GPIO_ACTIVE_HIGH>; // 修改为实际GPIO pwm-duty-cycle = <500>; // 调整PWM占空比 };

案例2:禁用未使用的外设

/* 禁用未使用的触摸控制器 */ &gt1x { status = "disabled"; }; /* 关闭第二个以太网接口 */ &gmac1 { status = "disabled"; };

案例3:内存参数调整

&dmc { memory-timings = < /* 根据实际内存芯片修改时序参数 */ 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 >; };

4. 编译验证与调试技巧

4.1 编译流程

make ARCH=arm64 rk3588-myboard-v1.dtb

4.2 调试方法

  1. 查看设备树展开结果
fdtdump rk3588-myboard-v1.dtb
  1. 运行时调试
# 查看已加载的设备树节点 ls /proc/device-tree/ # 获取特定属性值 hexdump -C /proc/device-tree/gpio@fec20000/reg
  1. 常见问题处理
  • GPIO冲突:检查pinctrl配置
  • 时钟缺失:验证assigned-clocks属性
  • 驱动加载失败:确认status属性为"okay"

提示:Rockchip平台提供专用调试工具:

rkdeveloptool dbg rk3588-myboard-v1.dtb

5. 高级定制与优化策略

5.1 电源管理优化

&rk806_dvs1 { regulator-init-microvolt = <900000>; regulator-always-on; };

5.2 性能调优参数

&cpu_l0 { operating-points-v2 = <&cluster0_opp_table>; cpu-supply = <&vdd_cpu_lit>; dynamic-power-coefficient = <100>; };

5.3 设备树覆盖机制

// 在uboot环境设置覆盖文件 env set fdt_overlays my_overlay.dtbo

在实际项目中,我曾遇到一个显示接口配置问题:由于疏忽了port@0的phy-mode设置,导致HDMI输出异常。经过示波器抓取信号和逐行核对DTS配置,最终发现需要明确指定:

&hdmi0 { ports { port@0 { hdmi0_out: endpoint { remote-endpoint = <&hdmi_con_in>; phy-mode = "tmds"; }; }; }; };