免费下载歌曲的网站html网页上传到服务器
免费下载歌曲的网站,html网页上传到服务器,湖北做网站多少钱,班级网站建设组织机构ACPI休眠按钮触发S0切换到S3流程#xff08;附流程图#xff09;1 两种硬件实现路径2 完整软硬件流程#xff08;S0 → S3#xff09;第一阶段#xff1a;硬件触发#xff08;物理层 → 寄存器层#xff09;第二阶段#xff1a;OSPM中断处理#xff08;内核层#xf…ACPI休眠按钮触发S0切换到S3流程附流程图1 两种硬件实现路径2 完整软硬件流程S0 → S3第一阶段硬件触发物理层 → 寄存器层第二阶段OSPM中断处理内核层第三阶段软件准备用户层 → 内核层第四阶段ACPI控制方法执行AML层第五阶段最终硬件操作寄存器写入第六阶段唤醒路径简述3 完整流程图4 关键寄存器与控制方法速查本文属于《 ACPI规范基础系列教程》之一欢迎查看其它文章。从硬件休眠按钮触发一个电平变化到操作系统优雅地冻结用户空间、挂起设备驱动最后让CPU断电、内存进入自刷新——这一切都必须严格遵循ACPI高级配置与电源接口这个复杂的标准。本文将带你以初学者的视角从头梳理ACPI规范中从 S0工作状态 进入 S3Suspend to RAM挂起到内存 的完整流程。1 两种硬件实现路径在深入流程前需要明确休眠按钮在硬件层面有两种实现方式这会直接影响中断处理路径实现方式硬件信号路径中断类型状态寄存器固定硬件方案按钮 → EC → PWRBTN#引脚 → 芯片组固定事件PM1状态寄存器SLPBTN_STS位Control Method方案按钮 → EC → GPIO引脚变化 → 芯片组通用事件GPEGPE状态寄存器某GPIO位下面以常见的固定硬件方案为主线进行介绍。Control Method方案的差异点我会在流程中标注。2 完整软硬件流程S0 → S3第一阶段硬件触发物理层 → 寄存器层用户按下休眠按钮产生物理信号。嵌入式控制器捕获EC检测到按钮按下根据平台设计固定硬件方案EC向芯片组的PWRBTN#专用引脚发送一个低脉冲。Control Method方案EC改变某个GPIO引脚的电平状态。芯片组记录事件固定硬件方案芯片组将PM1状态寄存器中的SLPBTN_STS位置为1PM1x_STS.SLPBTN_STS。Control Method方案芯片组将GPE状态寄存器中对应GPIO的某位置为1GPEx_STS.yy。SCI中断触发固定硬件方案芯片组检查对应的PM1使能寄存器中SLPBTN_EN使能位PM1x_EN.SLPBTN_ENControl Method方案芯片组检查对应的GPE使能寄存器中GPE enable使能位GPEx_EN.yy如果使能位为1芯片组拉高SCI中断线通知CPU有电源管理事件需要处理。PM1控制寄存器中的SCI_EN0 时事件路由到 SMI中断固件处理SCI_EN1 时事件路由到 SCI中断操作系统处理。在ACPI/Legacy系统中如果操作系统尚未设置 SCI_EN 位你按下休眠按钮只会触发SMI系统可能根本不会进入你预期的S3状态。在仅支持ACPI的系统中由于 SCI_EN 始终为1你的按钮事件会直接通过SCI通知操作系统操作系统便会执行后续进入S3状态流程。第二阶段OSPM中断处理内核层CPU响应SCICPU执行中断向量进入ACPI驱动注册的中断处理程序。中断处理程序轮询首先读取PM1状态寄存器发现SLPBTN_STS位为1确认是固定事件中的休眠按钮。如果是Control Method方案则会在GPE状态寄存器中找到对应位然后执行AML中的_Lxx或_Exx方法该方法通常包含Notify(***, 0x80)来通知操作系统。执行固定事件处理逻辑调用内核中预定义的休眠按钮处理函数如Linux中的acpi_button_notify。向PM1状态寄存器的SLPBTN_STS位写入1清除该状态位表示事件已接收。生成输入事件内核通过输入子系统向用户空间报告KEY_SLEEP事件唤醒用户空间的电源管理服务如systemd-logind或acpid。第三阶段软件准备用户层 → 内核层用户空间策略决策电源管理服务根据系统配置决定进入哪个休眠状态通常是S3 mem。触发内核休眠用户空间将mem写入/sys/power/state文件。内核开始休眠流程调用state_store()→enter_state()→suspend_prepare()同步文件系统冻结用户空间进程调用设备驱动的suspend回调逐个挂起设备第四阶段ACPI控制方法执行AML层经过通用电源管理框架enter_state → suspend_prepare → suspend_devices_and_enter最终通过平台钩子进入ACPI驱动层由 acpi_sleep_prepare 调用BIOS提供的 _PTS 控制方法完成了从“用户层”到“内核通用框架”再到“AML层”的完整交接。调用_PTS方法ACPI驱动执行ACPI控制方法\_PTSPrepare To Sleep并将目标S状态如3作为参数传入。此方法由BIOS提供通常用于通知嵌入式控制器系统即将睡眠保存某些平台特定的硬件状态调用SMM代码进行底层配置调用_GTS方法可选如果存在执行\_GTSGoing To Sleep方法进一步进行平台特定的睡眠准备。禁用/使能GPE内核禁用所有非唤醒源的GPE仅保留标记为可唤醒设备的GPE。每个GPE对应两个寄存器状态STS在 GPE0_STS 或 GPE1_STS 中。当事件发生时硬件置1软件写1清除。使能EN在 GPE0_EN 或 GPE1_EN 中。软件写1允许该GPE触发中断写0则屏蔽。如果不加选择地使能所有GPE那么任何风吹草动比如电源噪声都可能唤醒系统。所以操作系统必须只使能那些被用户或策略允许唤醒的设备对应的GPE。软件需要提前告诉硬件哪些GPE是允许唤醒的并且确保它们被正确使能。第五阶段最终硬件操作寄存器写入获取SLP_TYP值内核从FADT表中获取PM1a/PM1b控制寄存器的地址并从\_S3对象中获取该S状态对应的SLP_TYP值。设置唤醒向量内核将唤醒时执行的代码地址写入Firmware Waking Vector位于FADT表中FIRMWARE_CTRL指向的FACS结构中供BIOS在唤醒后跳转。写入PM1控制寄存器先将SLP_TYP值写入PM1a和PM1b控制寄存器的对应位。刷新CPU缓存。最后将SLP_TYP和SLP_EN位同时写入PM1a和PM1b控制寄存器。硬件进入休眠芯片组检测到SLP_EN位被设置开始控制电源时序停止CPU时钟切断除内存外的多数设备电源内存进入自刷新模式保持数据系统进入S3状态第六阶段唤醒路径简述当用户再次按下电源按钮唤醒时芯片组恢复电源CPU从重置向量开始执行BIOS检测到是从S3唤醒跳转到Firmware Waking Vector指向的地址内核恢复代码执行调用\_WAK方法恢复设备驱动解冻进程返回用户空间3 完整流程图下面是根据上述流程绘制的完整流程图4 关键寄存器与控制方法速查为方便理解软硬件以下是流程中涉及的寄存器/方法及其作用名称类型作用所在位置SLPBTN_STSPM1状态寄存器位休眠按钮状态硬件置1软件写1清除FADT中PM1a_EVT_BLKSLPBTN_ENPM1使能寄存器位使能休眠按钮的SCI中断FADT中PM1a_EVT_BLKSLP_ENPM1控制寄存器位写入该位触发硬件进入休眠FADT中PM1a_CNT_BLKSLP_TYPPM1控制寄存器位指定要进入的S状态值从_Sx对象获取FADT中PM1a_CNT_BLK_PTS控制方法准备进入睡眠S状态作为参数传入DSDT_GTS控制方法Going To Sleep可选DSDT_S3控制方法返回S3状态对应的SLP_TYP值DSDT_WAK控制方法唤醒后执行DSDT_Lxx/_ExxGPE控制方法对应GPE位的处理程序Control Method方案中调用DSDT的_GPE作用域