当前位置: 首页 > java >正文

Linux基础 -- 设备树引脚复用之`/omit-if-no-ref/` 用法解析

RK3588 设备树中 UART 引脚复用定义与 /omit-if-no-ref/ 用法解析

在进行 RK3588 嵌入式平台开发时,串口(UART)调试是 Bring-up 阶段的核心手段。而 RK3588 SoC 支持多个引脚复用配置(pinmux),通过设备树灵活选择,合理配置对于调试成功至关重要。

本文以 UART2 为例,讲解其设备树引脚配置方式、复用模式选择机制、以及 /omit-if-no-ref/ 的作用与使用方法。


一、设备树引脚复用定义示例

设备树(通常为 rk3588s-pinctrl.dtsi)中,对 UART2 的多个引脚复用模式进行预定义:

uart2 {/omit-if-no-ref/uart2m0_xfer: uart2m0-xfer {rockchip,pins =/* uart2_rx_m0 */<0 RK_PB6 10 &pcfg_pull_up>,/* uart2_tx_m0 */<0 RK_PB5 10 &pcfg_pull_up>;};/omit-if-no-ref/uart2m1_xfer: uart2m1-xfer {rockchip,pins =/* uart2_rx_m1 */<4 RK_PD1 10 &pcfg_pull_up>,/* uart2_tx_m1 */<4 RK_PD0 10 &pcfg_pull_up>;};/omit-if-no-ref/uart2m2_xfer: uart2m2-xfer {rockchip,pins =/* uart2_rx_m2 */<3 RK_PB2 10 &pcfg_pull_up>,/* uart2_tx_m2 */<3 RK_PB1 10 &pcfg_pull_up>;};/omit-if-no-ref/uart2_ctsn: uart2-ctsn {rockchip,pins =/* uart2_ctsn */<3 RK_PB4 10 &pcfg_pull_none>;};/omit-if-no-ref/uart2_rtsn: uart2-rtsn {rockchip,pins =/* uart2_rtsn */<3 RK_PB3 10 &pcfg_pull_none>;};
};

二、关键概念解释

1. 多个复用模式(如 uart2m0、m1、m2)

RK3588 中每个 UART 支持多个 引脚复用配置(不同 GPIO 管脚连接),例如:

名称GPIO BankGPIO Pin模式编号对应功能
uart2m0_xferGPIO0_B6PB610uart2_rx_m0
uart2m0_xferGPIO0_B5PB510uart2_tx_m0
uart2m1_xferGPIO4_D1PD110uart2_rx_m1
uart2m1_xferGPIO4_D0PD010uart2_tx_m1
uart2m2_xferGPIO3_B2PB210uart2_rx_m2
uart2m2_xferGPIO3_B1PB110uart2_tx_m2

这些 uart2mX_xfer 节点是为不同硬件连线方案预先定义的 pinmux 配置,供开发者按实际布线选择使用。


2. /omit-if-no-ref/ 的含义

设备树编译器(DTC)的指令,含义如下:

如果该节点没有被设备树的其它部分引用,在编译 .dtb 时将自动省略该节点。

它的作用是:

  • 提高设备树精简度;
  • 避免生成不必要的 pinctrl 配置;
  • 防止未使用的 pinmux 造成冲突。

三、如何在设备树中选择 UART2 引脚

要启用 UART2 并绑定某一组引脚,需要在设备树主文件中这样写:

&uart2 {status = "okay";pinctrl-names = "default";pinctrl-0 = <&uart2m1_xfer>;  // 选择 uart2 使用 mode1 对应的引脚
};

注意:

  • 如果不写 pinctrl-0 或引用了不存在的节点,UART2 将无法工作;
  • 仅被引用的 uart2mX_xfer 才会在最终 .dtb 中生成;
  • 没被引用的节点因 /omit-if-no-ref/ 会自动剔除。

四、常见问题与排查建议

问题原因解决方法
UART 无法打印调试信息未配置 pinctrl-0,或引用错误的 uart2mX_xfer检查是否引用了实际布线所用引脚定义
编译后的 dtb 文件缺少 uart2mX_xfer 节点未被引用 + 使用了 /omit-if-no-ref/添加有效引用(如 pinctrl-0 = <&uart2m1_xfer>
引脚功能冲突多个设备使用相同 GPIO确保 pinctrl 定义中引脚唯一性

五、小结

  • RK3588 支持多种引脚复用方案;
  • uart2mX_xfer 定义了不同 pinmux 模式;
  • /omit-if-no-ref/ 是设备树中用来精简未使用节点的常用指令;
  • 开发者应根据实际硬件选择一组引脚,并通过 pinctrl-0 显式指定;
  • 正确的引脚选择是串口调试输出的关键保障。
http://www.xdnf.cn/news/9545.html

相关文章:

  • 8.7 基于EAP-AKA的订阅转移
  • Springboot 集成 TDengine3.0版本
  • git stash 的使用
  • qt ubuntu 20.04 交叉编译
  • python实战:在Linux服务器上使用LibreOffice命令行批量接受Word文档的所有修订
  • MCP 与 AI 模型的用户隐私保护——如何让人工智能更懂“界限感”?
  • Python-114:字符串字符类型排序问题
  • HBO Max 中国大陆订阅与使用终极指南(2025 最新)
  • LangChain4j(17)——MCP客户端
  • 在PHP编程中包(Package)和库(Library)怎么区分?
  • 企业级AI开启落地战,得场景者得天下
  • LeeCode 94. 二叉树的中序遍历
  • YARN架构解析:大数据资源管理核心
  • 【MYSQL】mysql单表亿级数据查询优化处理
  • 2021年认证杯SPSSPRO杯数学建模D题(第二阶段)停车的策略全过程文档及程序
  • 探寻黄金奶源带,悠纯乳业打造西北乳业新标杆
  • Spring AI框架快速入门
  • day12 leetcode-hot100-20(矩阵3)
  • 【Linux】网络(上)
  • Vue开发系列——如何使用Vue
  • 图像卷积OpenCV C/C++ 核心操作
  • 【DB2】ERRORCODE=-4499, SQLSTATE=08001
  • 【C++基础知识】匿名命名空间
  • mysql prepare statement
  • 如何查询服务器的端口号
  • 数据结构 -- 树相关面试题
  • SFTP工具类实现文件上传下载_
  • 关于ios点击分享自动复制到粘贴板的问题
  • CEH Practical 实战考试真题与答案
  • C++异步通信-future学习