You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Yocto中为TI AM64XX设备树添加GPIO定义?

解决TI AM64XX设备树中“gpio1 not found”的问题

错误原因分析

你遇到的“label or path gpio1 not found”错误有两个核心原因:

  1. 基础设备树中未定义gpio1别名,也未直接引用GPIO1控制器的正确节点路径
  2. 引脚配置节点直接放在根节点下,未挂载到AM64XX主域对应的引脚复用控制器(main_pmx0)上

具体解决步骤

1. 确认GPIO1控制器的节点路径

打开项目依赖的TI官方设备树文件(如k3-am64-main.dtsi),找到GPIO1对应的标准节点定义:

gpio@6001000 {
    compatible = "ti,am64-gpio", "ti,keystone-gpio";
    reg = <0x00 0x6001000 0x00 0x100>;
    interrupts = <GIC_SPI 166 IRQ_TYPE_LEVEL_HIGH>,
                 <GIC_SPI 167 IRQ_TYPE_LEVEL_HIGH>;
    gpio-controller;
    #gpio-cells = <2>;
    interrupt-controller;
    #interrupt-cells = <2>;
    ti,ngpio = <32>;
    ti,davinci-gpio-unbanked = <0>;
    status = "disabled";
};

2. 添加GPIO1别名(可选,简化引用)

在你的板级设备树的aliases节点中添加gpio1别名,方便后续代码引用:

aliases {
    // 保留原有别名,新增以下配置
    gpio1 = &gpio@6001000;
};

3. 启用GPIO1控制器并绑定引脚配置

在板级设备树中添加GPIO1的启用配置:

// 若已添加别名,用&gpio1;否则直接用&gpio@6001000
&gpio1 {
    status = "okay";
    pinctrl-names = "default";
    pinctrl-0 = <&main_gpio1_pins_default>;
    // 若官方dtsi已定义#gpio-cells,可省略此行
    #gpio-cells = <2>;
};

4. 将引脚配置挂载到pinctrl控制器下

找到板级设备树中的&main_pmx0节点(AM64XX主域引脚复用控制器),将你的引脚配置作为子节点添加:

&main_pmx0 {
    main_gpio1_pins_default: main-gpio1-pins-default {
        pinctrl-single,pins = <
            AM64X_IOPAD(0x01C8, PIN_OUTPUT, 7) /* GPIO1_26 */
            AM64X_IOPAD(0x01C4, PIN_OUTPUT, 7) /* GPIO1_25 */
            AM64X_IOPAD(0x01C0, PIN_OUTPUT, 7) /* GPIO1_24 */
        >;
    };
};

验证

重新编译设备树,“gpio1 not found”的错误会消失,配置的引脚会被设置为输出模式,后续C/C++代码可通过GPIO编号(如GPIO1_25对应编号25)控制这些引脚。

内容的提问来源于stack exchange,提问作者AnswerAndGetaCandy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 09:25:37