在消费类电子中,功耗是很重要的,甚至项目后期一直在调功耗,看看哪里还可以再省电。由此就有了 linux电源管理子系统,该子系统包含很多方面:什么时候可以降帧、什么时候可以关掉其他 cpu core、系统运行时如果某外设很少用需要让它运行时休眠、系统休眠时要保证哪些外设可以唤醒系统。
博主今天要讨论的,就是一个按键如何唤醒系统,类似于手机的电源键。
这个功能并不是新功能,所以 linux 内部有一个 demo 可以使用,先教大家如何使用该demo,然后较大家如何撰写中断唤醒系统驱动。
官方 demo
demo 目录:/kernel4.14/drivers/input/keyboard/gpio_keys.c
该驱动是专门为按键准备的,是一个身经百战的驱动,任何时候测试按键中断或者中断唤醒系统都可以用它,很多时候比自己写的驱动靠谱。
要想使用该驱动,首先在该目录的 makefile 中增加:
obj-y += gpio_keys.o设备树中增加:
gpio-keys { compatible = gpio-keys; #address-cells = ; #size-cells = ; autorepeat; key0 { label = gpio key enter; linux,code = ; gpios = ; gpio-key,wakeup; };};compatible 属性是 “gpio-keys”,gpio_keys.c文件的674行会匹配这个属性,匹配到了该驱动就会运行。
linux,code 属性是按键值,linux 对所有按键事件都有编号,所以key_enter实际是一个数字,是驱动向上层报告的一个按键值。
gpios 属性是标明哪一个 gpio 口,低电平触发,大家可以自己选一个 gpio。
gpio-key,wakeup是代表此gpio支持中断唤醒,你也可以写成:wakeup-source。新老版本而已。
修改就是这么简单,不过语法要符合各位手中的开发板平台。然后编译出内核和设备树文件,下载到板子中。(linux内核根目录会有 .config 文件,确保 config_pm_sleep=y 有打开)
如果驱动加载成功,在 /proc/interrupts 中可以看到:
从左往右第一列是软件中断号(唯一)。
第二列是 cpu,表示该中断在该cpu上触发了多少次,多核会有多列。
第三列是中断控制器,imx6ull开发板根中断控制器是gpc,外部中断控制器是gpio-mxc,两者是级联关系。
第四列是硬件中断号,也就是gpio口编号。
第五列表示该中断是边沿触发还是电平触发。
第六列是中断名称,可以找到一个 gpio key enter,如果驱动加载成功就能看到,如果失败就看不到。
影像测量仪的工作流程是什么
5G时代 云端机器人将迎来怎样的发展机遇期
惠普薄锐ENVY13笔记本怎么样 用性价比谈品位
如何更改“KukaUser”的初始密码
如何延长储能插头插座的使用寿命
按键如何唤醒系统官方demo
智造未来,与你同行丨2020数字中 国创 新大 赛机器人赛道邀您来战!
苹果在 iOS14.3悄然加入新 Siri 功能,可模仿动物、乐器声音
苹果将开发显示屏_自主设计MicroLED显示屏_摆脱三星
MMIC芯片技术:毫米波雷达前段收发射频组件
如何提供安全稳定的网络连接服务是5G时代不可忽视的问题
Life360免费为美国用户提供碰撞探测功能
忆联与龙蜥(Anolis OS)8完成产品兼容互认证
品友人工智能引擎“福尔摩斯”这样实现智能决策
国产主动降噪耳机排行 三款国产千元级高性能耳机推荐
详细讲讲霍尔效应传感器
面向未来铁路应用的安全解决方案
将非法无人机无缝地纳入其空域系统管理中
教您快速区分导热硅脂与导热硅胶片
预测:苹果电源管理芯片不足的现象将持续6个月