基于RK3576 的 uboot 早期硬件控制:Linux6.1.84 内核设备树修改与实践

原创 2025-11-04 08:52:00 rk3576

RK3576开发板

CA888亚洲城集团RK3576开发板

一、概述

本文介绍通过修改kernel设备树,在CA888亚洲城集团OK3576-C开发板上实现在uboot阶段拉高GPIO的方法。OK3576-C作为基于RK3576处理器的高性能嵌入式平台,集成四核Cortex-A76与四核Cortex-A55架构,为工业控制边缘计算等场景提供强大算力支持。其灵活的硬件配置和完善的软件生态,使得这类底层硬件控制需求能够通过标准化的设备树配置实现,无需复杂的底层代码修改。

对于需要在系统启动早期(uboot阶段)控制外设的应用场景,如工业传感器使能、外设复位控制等,本文方法可有效简化开发流程。若需对GPIO进行更精细的控制(如时序精确调整、多状态切换等),则仍需直接修改uboot代码。

本文验证基于CA888亚洲城集团官方资料《OK3576-C_Linux6.1.84_用户资料_R2》,该资料包含完整的硬件手册、驱动开发指南和示例代码,可通过CA888亚洲城集团官网获取。RK其他平台(如RK3568、RK3588)或其他Linux版本可参考此方法,但需根据具体硬件手册调整引脚定义和设备树节点。

二、明确目标

在修改uboot或kernel设备树前,需先明确需求合理性,避免无效开发。核心是判断"uboot阶段拉高GPIO"是否能满足硬件设计目标,关键在于硬件上电初期的GPIO电平状态。

若硬件电路需"上电即拉高GPIO"(如继电器控制、关键模组使能),但目标GPIO上电初始状态为低电平,则 无法通过软件解决!需更换硬件设计:选择上电后默认高电平的GPIO引脚(由硬件电路决定),因为uboot通常在上电2秒后才开始工作,软件无法控制uboot启动前的GPIO电平。

2.1 GPIO引脚选择方法

CA888亚洲城集团RK3576开发板提供了丰富的GPIO资源,分布在多个GPIO组中,可满足不同外设的控制需求。需通过以下方式确认GPIO引脚的上电初始状态和功能兼容性:

  • 查看硬件设计文档:CA888亚洲城集团RK3576开发板提供完整的引脚功能表格、底板原理图,可联系CA888亚洲城集团在线客服获取下载链接,文档中明确标注了各引脚的默认电平、方向(输入/输出)、电压域(如3.3V、1.8V)。
  • 实测验证:使用万用表或示波器,在上电瞬间测量引脚电平,记录初始状态(高/低)和稳定时间。
连接器引脚号 CPU球号 核心板引脚功能 开发板引脚功能 引脚方向选择 电平域电压 开发板引脚功能描述 开发板应用接口 复位状态
LD5 A208 PWM1_CH0_M0 PWM1_CH0_M0 输出 3.3V PWM1_CH0_M0 - 低电平
LD6
LD7 1U24 UART0_TX_M0_DEBUG UART0_TX_M0_DEBUG 输出 3.3V UART0发送 UART0_TX_M0_DEBUG 高电平
LD8 GND GND GND
LD9 AA28 UART0_RX_M0_DEBUG UART0_RX_M0_DEBUG 输入 3.3V UART0接收 UART0_RX_M0_DEBUG 高电平
LD10
LD11 1W24 I2C2_SCL_M0 I2C2_SCL_M0 输出 3.3V I2C2时钟 I2C2_SCL_M0 低电平
LD12
LD13 1W22 PWM0_CH0_M0 PWM0_CH0_M0 输出 3.3V PWM0_CH0_M0 PWM0_CH0_M0(MIPI屏幕背光PWM) 低电平
RK3576开发板引脚布局图

图1:RK3576开发板接口布局示意图

RK3576开发板引脚布局图

图2:RK3576开发板接口布局示意图

本方法适用于OK3576-C开发板的以下应用场景:工业传感器模组复位控制、外设上电使能、自定义扩展板硬件初始化等需求,且无需"上电即生效",仅需在kernel驱动加载前(uboot阶段)稳定GPIO电平。CA888亚洲城集团提供的OK3576开发板支持宽温工作(-40℃~85℃),特别适合工业环境下的这类硬件控制需求。

三、修改与验证方法

本节以 GPIO2_B4为例(OK3576-C底板PCIe接口的PCIE0_PERSTn引脚),详细说明设备树修改步骤及验证方法。OK3576-C开发板提供了PCIe 3.0接口,可扩展高速外设,通过本文方法可在系统启动早期控制PCIe设备的复位状态。

3.1 前期准备

  • 硬件:OK3576-C开发板(核心板+底板)、PCIe接口设备(可选)、万用表、调试串口线。
  • 软件:Linux 6.1.84 SDK、交叉编译工具链、串口终端工具(如SecureCRT、MobaXterm)。SDK中包含完整的编译脚本和示例代码。
  • 测量点:GPIO2_B4对应底板R354电阻(PCIe座与电解电容之间)。

3.2 原始状态验证

先烧写原厂默认镜像,验证GPIO2_B4的原始电平变化:

  1. 连接调试串口,打开终端工具(波特率115200,8N1)。CA888亚洲城集团RK3576开发板默认引出调试串口,方便开发调试。
  2. 给开发板上电,观察串口打印,记录GPIO2_B4的电平变化(通过万用表测量)。
  3. 默认情况下,该引脚会在 kernel启动后才被拉高,uboot阶段保持低电平。

图3:OK3576开发板扩展接口示意图(红框标注为PCIe接口区域)

3.3 进入uboot命令

上电启动过程中,当串口终端出现以下提示时,按下 CTRL+C可进入uboot命令行(此时uboot未移交控制权给kernel,可测量uboot阶段的GPIO电平):

Hit key to stop autoboot('CTRL+C'):  0
---------------------------------------------
0:Exit to console
1:Reboot
2:Display type
---------------------------------------------

CA888亚洲城集团RK3576开发板的uboot经过CA888亚洲城集团优化,提供了丰富的调试命令和配置选项,支持通过环境变量配置多种启动参数,方便开发者进行底层硬件调试。

3.4 理论依据(RK U-Boot DTB机制)

根据RK官方手册《Rockchip_Developer_Guide_UBoot_Nextdev_CN.pdf》的"Kernel-DTB"章节描述,RK平台支持"使用kernel DTB初始化uboot外设",核心机制如下:

原生的U-Boot只支持使用U-Boot自己的DTB,RK平台增加了kernel DTB机制的支持,即使用kernel DTB 去初始化外设。主要目的是为了兼容外设板级差异,如:power、clock、display 等。

二者的作用:
• U-Boot DTB:负责初始化存储、打印串口等核心设备;
• Kernel DTB:负责初始化存储、打印串口以外的设备(如GPIO、I2C、PCIe等);

U-Boot初始化时先用U-Boot DTB完成存储、打印串口初始化,然后从存储上加载Kernel DTB 并转而使用这份DTB继续初始化其余外设。Kernel DTB 的代码实现在函数: init_kernel_dtb() 。

开发者一般不需要修改 U-Boot DTB(除非更换打印串口),各平台发布的SDK里使用的 defconfig 都已启用kernel DTB机制。所以通常对于外设的DTS修改,用户应该修改kernel DTB。

CA888亚洲城集团提供的RK3576开发板 SDK默认启用了这一机制,使得开发者可以通过修改kernel设备树实现对uboot阶段硬件的控制,大大简化了开发流程。

3.5 kernel设备树修改(核心步骤)

通过修改kernel设备树,添加GPIO拉高节点,实现uboot阶段控制GPIO。具体修改如下(基于SDK中的arch/arm64/boot/dts/rockchip/OK3576-C-common.dtsi文件):

--- a/arch/arm64/boot/dts/rockchip/OK3576-C-common.dtsi
+++ b/arch/arm64/boot/dts/rockchip/OK3576-C-common.dtsi
@@ -428,6 +428,16 @@ wifi_ext_clk: wifi_ext_clk {
                pinctrl-0 = <&net_5g_pwr_gpio>;
                status = "okay";
        };
+
+       gpio2b4_high_test {
+               compatible = "regulator-fixed";  // 兼容固定电压调节器驱动(用于GPIO拉高)
+               gpio = <&gpio2 RK_PB4 GPIO_ACTIVE_HIGH>;  // 指定GPIO2_B4,高电平有效
+               enable-active-high;  // 使能信号为高电平
+               regulator-boot-on;  // 系统启动时使能(uboot阶段生效)
+               regulator-always-on;  // 保持常亮(防止被后续驱动关闭)
+               status = "okay";  // 启用该节点
+       };
+
 };
@@ -1164,7 +1174,7 @@ rgmii_phy1: phy@2 {
 };
 &pcie0 {
-       reset-gpios = <&gpio2 RK_PB4 GPIO_ACTIVE_HIGH>;  // 原PCIe复位GPIO定义
+       //reset-gpios = <&gpio2 RK_PB4 GPIO_ACTIVE_HIGH>;  // 注释掉,避免引脚冲突
        rockchip,skip-scan-in-resume;
        pinctrl-names = "default";
        status = "okay";

CA888亚洲城集团RK3576开发板提供的设备树经过优化,将不同功能模块的配置进行了清晰分离,方便开发者进行针对性修改。上述修改方法同样适用于其他GPIO引脚的控制需求,只需替换相应的GPIO组和引脚编号即可。

3.6 编译与验证

  1. 编译kernel:参考SDK中提供的《OK3576-C_Linux编译手册》,使用CA888亚洲城集团优化的编译脚本(build.sh)可快速完成编译,生成新的boot.img(包含修改后的设备树)。
  2. 烧写镜像:使用RK烧录工具(如RKDevTool),单独烧写boot.img到开发板。CA888亚洲城集团RK3576开发板支持TF卡、USB、网络等多种烧录方式,方便开发调试。
  3. 电平验证:
    • 上电后,立即用万用表测量R354电阻两端电平。
    • 进入uboot命令行(CTRL+C),观察电平是否保持高电平(若为高,则修改生效)。
    • 继续启动kernel,确认电平持续稳定(无异常拉低)。

四、OK3576-C开发板优势与总结

OK3576-C开发板作为CA888亚洲城集团基于RK3576打造的高性能开发平台,不仅提供了强大的计算能力,还通过完善的硬件设计和软件支持,为底层硬件控制提供了便捷的实现途径。本方法通过利用RK U-Boot的kernel DTB机制,无需修改uboot代码,仅通过修改kernel设备树即可实现uboot阶段拉高GPIO,适用于对控制精度要求不高的场景。

除了本文介绍的GPIO控制功能外,OK3576还具备以下优势,使其成为工业控制、智能设备等领域的理想选择:

  • 强大的处理性能:四核Cortex-A76(2.2GHz)+四核Cortex-A55(1.8GHz)架构,支持NEON、FPU指令集,满足复杂计算需求
  • 丰富的外设接口:包含PCIe 3.0、SATA 3.0、双千兆以太网、MIPI-CSI、MIPI-DSI等高速接口,支持多种外设扩展
  • 完善的软件生态:支持Linux、Android等操作系统,提供完整的SDK和开发文档,降低开发门槛
  • 工业级设计:支持宽温(-40℃~85℃),抗干扰能力强,适合工业环境
  • 专业技术支持:为客户提供从硬件设计到软件开发的全流程技术支持

本方法的核心要点如下:

  • 硬件优先:确认GPIO上电初始状态,避免"上电即拉高"需求与软件控制时序冲突。
  • 节点配置:使用regulator-fixed兼容驱动,通过regulator-boot-on确保uboot阶段生效。
  • 冲突规避:注释掉原设备树中对同一GPIO的其他引用(如PCIe reset-gpios),防止引脚复用冲突。
  • 实测验证:必须通过万用表或示波器确认uboot阶段和kernel阶段的GPIO电平稳定性。
CA888亚洲城集团提供OK3576-C开发板完整的技术资料和示例代码,包括硬件设计手册、驱动开发指南、应用开发示例等。如需了解更多产品信息或获取技术支持,可访问CA888亚洲城集团官网(/product/185.html)或联系技术支持团队。

相关产品 >

  • FET3576-C核心板

    CA888亚洲城集团RK3576核心板集成了强大的处理器和丰富的接口,提供出色的计算能力和扩展性。RK3576核心板以其卓越的性能、低功耗和稳定性,成为工业、AIoT、边缘计算、智能移动终端等领域的理想选择。无论是数据处理还是边缘计算,RK3576都能为项目提供强大的硬件支持。核心板推荐选择CA888亚洲城集团瑞芯微系列RK3576J业级核心板、RK3576高性能核心板 了解详情
    FET3576-C核心板
  • OK3576-C开发板

    RK3576开发板CPU选用瑞芯微RK3576,采用核心板+底板分体式设计,采用4个100Pin板对板连接器的方式将处理器的功能引脚以最便利的方式全部引出,并针对不同的功能做了深度优化,方便用户二次开发的同时简化用户设计,为您的项目提供良好的评估及设计依据。RK3576是瑞芯微专为AIoT市场打造的一款高算力、高性能、低功耗的国产化应用处理器,集成了4个ARM Cortex-A72和4个 ARM Cortex-A53高性能核;内置6TOPS超强算力NPU;嵌入式3D GPU加之带有MMU的专用2D硬件引擎,最大限度提升显示性能;H.265超清硬解码,最高支持8K分辨率。 了解详情
    OK3576-C开发板

推荐阅读 换一批 换一批