在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内删除有争议的资源。欢迎大家多多交流,期待共同学习进步。