LEDE/OpenWRT处理基于GPIO的Power键

在OpenWRT/LEDE中,自己 实现了一个gpio-button-hotplug驱动(也就是 package/kernel/gpio-button-hotplug 这个包, 这是在标准Linux内核中没有的),将button统一到hotplug处理流程中。

在dts中配置

 
gpio-keys-polled {
   compatible = "gpio-keys-polled";
   #address-cells = <1>;
   #size-cells = <0>;
   poll-interval = <20>;

   power {
     label = "power";
     gpios = <&gpio0 24 1>;
     linux,code = <KEY_POWER>;
   };
 };

当按下 power键时, 会调用 /etc/rc.button/power 这个脚本文件
这是因为 定义为 gpio-keys-polled兼容

再看看target/linux/ramips/dts/HG255D.dts (华为 给电信定制的 家庭路由 HG255D是一代神机)

 gpio-keys-polled {
     compatible = "gpio-keys-polled";
     #address-cells = <1>;
     #size-cells = <0>;
     poll-interval = <10>;

     reset {
        label = "reset";
        gpios = <&gpio0 4 1>;
        linux,code = <KEY_RESTART>;
     };

     wps {
        label = "wps";
        gpios = <&gpio0 10 1>;
        linux,code = <KEY_WPS_BUTTON>;
    };

    rfkill {
       label = "rfkill";
       gpios = <&gpio0 0 1>;
        linux,code = <KEY_RFKILL>;
    };
 };	

 

/etc/rc.button/rfkill
编写button脚本
BUTTON 按钮名称
ACTION 动作: pressed|released (按下或释放)
SEQNUM 事件的次数,会依次增加
SEEN 距离上次这个按钮按下时的秒数
SEEN参数用来决定 是否属于长按。
如果一个按钮本次的action是released, 并且SEEN=8, 说明刚才它已经被长按了8秒

本文章由作者:佐须之男 整理编辑,原文地址: LEDE/OpenWRT处理基于GPIO的Power键
本站的文章和资源来自互联网或者站长的原创,按照 CC BY -NC -SA 3.0 CN协议发布和共享,转载或引用本站文章应遵循相同协议。如果有侵犯版权的资 源请尽快联系站长,我们会在24h内删除有争议的资源。欢迎大家多多交流,期待共同学习进步。

相关推荐