OrangePi-PC开发板GPIO按键DTS编译警告问题求助
解决OrangePi-PC GPIO按键DTS overlay编译警告问题
问题分析
你遇到的编译警告源于DTS结构不符合Allwinner H3设备树规范,核心问题有两个:
- 错误将
gpio-keys节点挂载到pio节点下——gpio-keys是独立的输入子系统设备,应挂在根节点下。 - 引用了未定义的
gpio_button_0引脚控制节点,且单独编译overlay时缺少必要的设备树上下文信息。
修正后的DTS代码
/dts-v1/; /plugin/; / { compatible = "allwinner,sun8i-h3"; fragment@0 { target-path = "/"; overlay { gpio_keys_user: gpio-keys { compatible = "gpio-keys"; pinctrl-names = "default"; pinctrl-0 = <&gpio_button_pins>; #address-cells = <1>; #size-cells = <0>; play_pause@0 { reg = <0>; label = "Play/Pause"; linux,code = <164>; /* KEY_PLAYPAUSE */ gpios = <&pio 0 7 0>; /* PA7,低电平触发 */ }; next@1 { reg = <1>; label = "Next"; linux,code = <163>; /* KEY_NEXTSONG */ gpios = <&pio 0 8 0>; /* PA8,低电平触发 */ }; previous@2 { reg = <2>; label = "Previous"; linux,code = <165>; /* KEY_PREVIOUSSONG */ gpios = <&pio 0 9 0>; /* PA9,低电平触发 */ }; }; }; }; fragment@1 { target = <&pio>; overlay { gpio_button_pins: gpio-button-pins { pins = "PA7", "PA8", "PA9"; function = "gpio_in"; bias-pull-up; /* 启用内部上拉电阻,按键接地时触发 */ }; }; }; };
编译命令调整
如果使用GPIO_ACTIVE_LOW这类宏,编译时需指定内核设备树绑定头文件路径;直接用数字替代宏则可简化命令:
# 带宏引用的编译(假设内核头文件在/usr/src/linux/include) dtc -I dts -O dtb -o gpio-keys.dtbo -i /usr/src/linux/include/dt-bindings/ gpio-keys.dts # 不带宏的简化编译 dtc -I dts -O dtb -o gpio-keys.dtbo gpio-keys.dts
关键修改说明
- 拆分两个
fragment:一个在根节点添加gpio-keys设备节点,另一个在pio节点下配置引脚控制规则。 - 新增
gpio_button_pins节点,明确引脚为输入模式并配置上拉电阻,匹配按键硬件连接逻辑。 - 给每个按键子节点添加
reg属性,符合gpio-keys设备树绑定规范。 - 修正
gpios属性格式,确保&pio引用在overlay编译时能被正确解析。
内容的提问来源于stack exchange,提问作者Savoo
相关产品推荐
相关产品推荐

