Linux 在消费电子领域的应用已经铺天盖地,而对于消费电子产品而言,省电是一个重要的议题。
本章将介绍Linux设备树(Device Tree)的起源、结构和因为设备树而引起的驱动和BSP变更。
19.1 节阐述了Linux电源管理的总体架构。
19.2~19.8节分别论述了CPUFreq、 CPUIdle、 CPU热插拔以及底层的基础设施Regulator、OPP以及电源管理的调试工具 PowerTop。
19.9 节讲解了系统Suspend to RAM 的过程以及设备驱动如何提供对Suspend to RAM 的支持。
19.10 节讲解了设备驱动的 Runtime suspend。
本章是相对《Linux 设备驱动开发详解(第 2 版)》全新的一章内容,也是 Linux 设备驱动工程师必备的知识体系。
1. Linux 电源管理全局架构
Linux 电源管理非常复杂,牵扯到系统级的待机、频率电压变换、系统空闲时的处理以及每个设备驱动对于系统待机的支持和每个设备的运行时电源管理,可以说和系统中的每个设备驱动都息息相关。
对于消费电子产品来说,电源管理相当重要。因此,这部分工作往往在开发周期中占据相当大的比重,图19.1呈现了 Linux内核电源管理的整体架构。大体可以归纳为如下几类:
1. CPU在运行时根据系统负载进行动态电压和频率变换的 CPUFreq
2. CPU在系统空闲时根据空闲的情况进行低功耗模式的 CPUIdle
3. 多核系统下CPU的热插拔支持
4. 系统和设备对于延迟的特别需求而提出申请的 PM QoS,它会作用于CPUIdle的具体策略
5. 设备驱动针对系统 Suspend to RAM/Disk的一系列入口函数
6. SoC 进入 suspend状态、SDRAM自刷新的入口
7. 设备的runtime(运行时)动态电源管理,根据使用情况动态开关设备
8. 底层的时钟、稳压器、频率/电压表(OPP模块完成)支撑,各驱动子系统都可能用到 |