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

BeagleBone Black设备树配置GPIO按键中断及自定义节点疑问

针对BeagleBone Black GPIO驱动设备树配置的解答

1. 自定义节点的放置位置

你看不到gpio1节点是因为它定义在am335x.dtsi(AM335x基础设备树头文件)中,am335x-boneblack.dts会通过#include引入这个文件,所以反编译dtb时不会直接显示该节点。

你的自定义myled节点有两个推荐放置位置:

  • 根节点下:直接添加到am335x-boneblack.dts的根节点范围内,示例如下:
/dts-v1/;
#include "am335x-boneblack.dtsi"

/ {
    model = "TI AM335x BeagleBone Black";
    compatible = "ti,am335x-bone-black", "ti,am335x-bone", "ti,am33xx";

    myled {
        compatible = "ga2,myled";
        led-gpios = <&gpio1 16 GPIO_ACTIVE_HIGH>;
        button-gpios = <&gpio1 17 GPIO_ACTIVE_HIGH GPIO_PULL_DOWN>;
        interrupt-parent = <&gpio1>;
        interrupts = <17 IRQ_TYPE_EDGE_RISING>;
    };
};
  • &ocp节点内部:AM335x的外设通常挂载在On-Chip Peripherals(ocp)节点下,写法如下:
&ocp {
    myled {
        compatible = "ga2,myled";
        led-gpios = <&gpio1 16 GPIO_ACTIVE_HIGH>;
        button-gpios = <&gpio1 17 GPIO_ACTIVE_HIGH GPIO_PULL_DOWN>;
        interrupt-parent = <&gpio1>;
        interrupts = <17 IRQ_TYPE_EDGE_RISING>;
    };
};

2. 按键中断的额外配置

你的基础中断配置框架是对的,但需要补充以下关键项:

  • 明确中断触发类型:AM335x GPIO中断必须指定触发边沿,根据你的硬件连接(按键接GPIO+3V3),建议配置为上升沿触发(IRQ_TYPE_EDGE_RISING)——前提是GPIO配置为下拉,按键未按下时为低电平,按下时跳转为高电平。
  • 配置GPIO上下拉:在button-gpios中添加GPIO_PULL_DOWN标志,让内核自动配置GPIO下拉电阻,避免按键未按下时GPIO处于浮空状态。
  • 唤醒功能可选配置:如果需要按键在系统休眠时唤醒设备,可在myled节点中添加wakeup-source属性。

另外,驱动中需要使用gpiod_to_irq(button)来获取对应中断号,才能和设备树的中断配置正确关联。

补充验证说明

你驱动中gpiod_get(dev, "led", GPIOD_OUT_LOW)和gpiod_get(dev, "button", GPIOD_IN)的写法是正确的,gpiod_get会自动匹配设备树中led-gpios和button-gpios属性(默认后缀为-gpios)。修改完dts后,需重新编译为dtb并替换原有文件,或通过U-Boot指定新dtb启动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 19:53:17