立即注册
查看: 526|回复: 0

[资料] 全志D1-H Linux Standby开发指南

已绑定手机
发表于 2022-12-1 09:38:37 | 显示全部楼层 |阅读模式 来自 广东省深圳市
介绍Standby 模块配置和调试方法。
• 休眠唤醒指系统进入低功耗和退出低功耗模式,一般称之为Standby。standby 分为superstandby 和normal standby,区别是cpu 是否掉电。
• 假关机是类似standby 的一种低功耗模式。进入假关机,系统会先复位,再进入低功耗模式,等待唤醒源;检测到唤醒源,系统退出假关机,直接从低功耗模式复位重启。适用于OTT 类产品代替常规的关机,实现红外/蓝牙开机功能,D1-H 目前不支持假关机功能。

1.3 适用范围
产品名称:D1-H
内核版本:Linux-5.4
驱动文件:kernel/power/*

2.2 相关术语介绍
Super standby: Vdd_cpu 掉电或Core 掉电,dram 进入self refresh 状态
Normal standby: CPUX WFI,dram 进入self refresh 状态
Fake Poweroff: 假关机,类似standby,主要区别是系统退出假关机会重启,而不是唤醒
SCP/CPUS: 全志平台辅助进行电源管理的协处理器



2.3 模块配置介绍
• 唤醒源配置
以RTC 模块为例,RTC 驱动支持通过“wakeup-source” 配置是否作为唤醒源;在RTC 模块节点下添加“wakeup-source” 属性,则可以设置为唤醒源。

  1. rtc: rtc@07000000 {
  2. compatible = "Allwinner,sunxi-rtc";
  3. device_type = "rtc";
  4. wakeup-source;
  5. ...
  6. };
复制代码
平台支持唤醒源列表.png

2.3.1 kernel menuconfig 配置说明
进入配置主界面(Linux-5.4 内核版本执行:./build.sh menuconfig),并按以下步骤操作。
• 内核POWER 相关选项
  1. Power management options --->
  2. [*] Suspend to RAM and standby
  3. [ ] OPPOrtunistic sleep
  4. [*] User space wakeup sources interface
  5. (100) Maximum number of user space wakeup sources (0 = no limit)
  6. -*- Device power management core functionality
  7. [*] Power Management Debug Support
  8. [*] Extra PM attributes in sysfs for low-level debugging/testing
复制代码
  1. Symbol: SUNXI_RISCV_SUSPEND [=y]
  2. -> Device Drivers
  3. -> SOC (System On Chip) specific Drivers
  4. <*> Allwinner sunxi riscv suspend support
复制代码

2.4 源码结构介绍
Standby 的源代码位于内核kernel/power/目录下:
  1. kernel/power/
  2. ├── autosleep.c
  3. ├── console.c
  4. ├── hibernate.c
  5. ├── Kconfig
  6. ├── main.c
  7. ├── Makefile
  8. ├── modules.builtin
  9. ├── modules.order
  10. ├── power.h
  11. ├── poweroff.c
  12. ├── process.c
  13. ├── qos.c
  14. ├── snapshot.c
  15. ├── suspend.c
  16. ├── suspend_test.c
  17. ├── swap.c
  18. ├── user.c
  19. ├── wakelock.c
  20. └── wakeup_reason.c
复制代码

2.5 驱动框架介绍
休眠唤醒指系统进入低功耗和退出低功耗模式,一般称之为Standby。休眠过程由应用发起,经由内核的电源管理框架来进行休眠唤醒管理工作,如果存在CPUS(一颗集成在IC 内部的对电源进行管理的openrisc 核,是SoC 内置的超低功耗硬件管理模块),最终会传递到到CPUS。因此休眠唤醒类出现问题的可能为应用层、内核层、CPUS 层,如果不存在CPUS,则CPU 进入WFI。休眠唤醒流程图如下,虚线部分为部分内核实现。

图2-1: standby 驱动总体结构 版

图2-1: standby 驱动总体结构 版

图2-1: standby 驱动总体结构

图2-2: linux standby 流程 版

图2-2: linux standby 流程 版

图2-2: linux standby 流程

3 FAQ
3.1 调试方法
3.1.1 调试节点
• pm_test 节点
该节点可用于测试linux 部分休眠唤醒功能。Eg:echo x > /sys/power/pm_test。
Freezer:表明,任务冻结后,等待5s,即返回,执行唤醒动作。
Devices: 表明,设备冻结后,等待5s, 即返回,执行唤醒动作。
Platform:在a1x, a2x, a3x 上,与devices 相同;
Processors: 冻结non-boot cpu 后,等待5s, 即返回,执行唤醒动作。
Core: 冻结timer 等系统资源后,等待5s, 即返回,执行唤醒动作。
None: 表明,整个休眠流程全部走完,等待唤醒源唤醒;
• wakeup_sources 节点
该节点可查看系统唤醒源的情况。Eg:cat /sys/kernel/debug/wakeup_sources。

游客,如果您要查看本帖隐藏内容请回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

合作/建议

TEL: 19168984579

工作时间:
周一到周五 9:00-11:30 13:30-19:30
  • 扫一扫关注公众号
  • 扫一扫打开小程序
Copyright © 2013-2024 一牛网 版权所有 All Rights Reserved. 帮助中心|隐私声明|联系我们|手机版|粤ICP备13053961号|营业执照|EDI证
在本版发帖搜索
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表