在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秒
本站的文章和资源来自互联网或者站长的原创,按照 CC BY -NC -SA 3.0 CN协议发布和共享,转载或引用本站文章应遵循相同协议。如果有侵犯版权的资 源请尽快联系站长,我们会在24h内删除有争议的资源。欢迎大家多多交流,期待共同学习进步。








