You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

基于Lineage OS 14.1的树莓派3 GPIO-Keys中断唤醒屏幕问题

解决树莓派3 LineageOS 14.1 中 gpio-keys 无法唤醒休眠屏幕的问题

看起来你已经搞定了gpio-keys的输入事件注册,就差唤醒这最后一步了!这种情况通常是因为gpio-keys设备没被标记为唤醒源,或者系统电源管理的配置没跟上。下面是具体的排查和修复步骤:

1. 修改设备树覆盖文件,添加唤醒属性

你的设备树片段里必须给gpio-keys节点加上wakeup-source属性,同时要确保按键对应的GPIO配置了正确的中断触发方式(比如上升沿/下降沿)。给你一个完整的设备树覆盖示例参考:

/dts-v1/;
/plugin/;

/ {
    compatible = "brcm,bcm2835", "brcm,bcm2708", "brcm,bcm2709";

    fragment@0 {
        target = <&gpio>;
        __overlay__ {
            my_key_pins: my_key_pins {
                brcm,pins = <4>;  // 替换成你实际用的GPIO引脚号
                brcm,function = <0>;  // 0代表GPIO输入模式
                brcm,pull = <2>;  // 2代表上拉电阻,根据你的按键电路调整
            };
        };
    };

    fragment@1 {
        target-path = "/";
        __overlay__ {
            gpio_keys: gpio_keys {
                compatible = "gpio-keys";
                pinctrl-names = "default";
                pinctrl-0 = <&my_key_pins>;
                status = "okay";

                power_key {
                    label = "Power Key";
                    linux,code = <116>;  // KEY_POWER对应的输入事件码,也可换成其他按键码
                    gpios = <&gpio 4 1>;  // 最后一位1表示低电平触发,根据你的电路调整
                    wakeup-source;  // 关键!添加这个属性标记为系统唤醒源
                };
            };
        };
    };
};

注意点:

  • <4>替换成你实际使用的GPIO引脚
  • gpios字段最后一位的触发方式要和按键电路匹配(1=低电平触发,0=高电平触发)
  • 如果你想用其他按键码,比如KEY_HOME(102)也可以,但KEY_POWER是系统默认优先支持唤醒的按键码

2. 验证设备树是否正确加载

编译并加载修改后的设备树覆盖后,用这条命令检查唤醒属性是否生效:

cat /proc/device-tree/gpio_keys/power_key/wakeup-source

如果能正常输出内容,说明wakeup-source属性已经成功加载。

3. 开启输入设备的唤醒权限

就算设备树加了属性,有时候系统还需要明确允许这个输入设备唤醒。按以下步骤操作:

# 先找到gpio-keys对应的输入设备,比如/dev/input/eventX
cat /proc/bus/input/devices | grep -A 5 "gpio-keys"
# 假设找到的是event2,执行这条命令开启唤醒权限
echo enabled > /sys/class/input/event2/power/wakeup

可以把这条命令加到开机自启动脚本里(比如/system/etc/init.d/目录下的脚本),确保每次开机都自动启用唤醒权限。

4. 检查LineageOS的电源管理设置

进入LineageOS的设置 -> 显示 -> 休眠,确认休眠时间已经正常设置,并且没有第三方应用或系统设置阻止唤醒。另外,有些ROM可能需要在开发者选项里开启“允许唤醒锁定”相关选项。

5. 测试与日志排查

让设备进入休眠状态,按下你的GPIO按键,看看屏幕是否能唤醒。如果还是不行,用这条命令查看内核日志找问题:

dmesg | grep -i wake

日志里会提示具体的失败原因,比如中断没触发、唤醒源没注册等,方便你进一步排查。


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

火山引擎 最新活动