- 博客(377)
- 资源 (30)
- 收藏
- 关注
原创 ACPI电源按钮唤醒S3切换到S0流程(附流程图)
本文详细介绍了ACPI电源按钮唤醒S3切换到S0的完整流程。当系统处于S3状态时,按下电源按钮触发硬件唤醒信号,芯片组通过设置PM1状态寄存器标志位启动唤醒过程。BIOS/UEFI检测唤醒源并跳转到操作系统唤醒代码,OS内核恢复执行上下文后调用_WAK方法执行平台特定操作,最终恢复设备驱动和用户空间。文章还提供了完整的流程图和关键寄存器/控制方法的速查表,包括SLP_S3#信号、FACS表、PM1状态寄存器等关键组件的作用机制。该流程展现了从硬件触发到软件恢复的完整ACPI唤醒机制。
2026-03-11 16:09:04
428
原创 ACPI休眠按钮触发S0切换到S3流程(附流程图)
本文详细解析了ACPI规范中从S0工作状态切换到S3休眠状态的完整流程。文章首先介绍了休眠按钮的两种硬件实现方案(固定硬件和Control Method),然后分六个阶段详细阐述了软硬件协同工作过程:从硬件触发、OSPM中断处理、软件准备、ACPI控制方法执行,到最终硬件操作和唤醒路径。关键环节包括SCI中断触发、内核处理休眠事件、执行BIOS提供的_PTS方法,以及写入PM1控制寄存器触发硬件休眠。文章还提供了流程图和关键寄存器/控制方法速查表,帮助读者全面理解这一复杂的电源管理过程。
2026-03-11 15:09:03
441
原创 ACPI软件编程模型之七:ACPI事件编程模型
本文摘要: ACPI事件编程模型详解 本文深入解析了ACPI规范中的事件编程模型,该系统基于SCI中断和通用事件寄存器(GPE)构建。主要内容包括: 模型组件 包含电源管理、寄存器块、SCI中断等核心要素 通过硬件寄存器与AML代码协同工作 事件分类 固定事件:预定义在PM1x_STS寄存器中的专用位 通用事件:通过GPE块实现,支持多级处理架构 处理机制 固定事件由OS直接处理 通用事件通过匹配控制方法(_Exx/_Lxx/_Qxx)处理 支持设备唤醒等关键功能 特殊应用 嵌入式控制器和SMBus的专用处
2026-03-10 17:59:10
407
原创 ACPI软件编程模型之十三:使用ACPI控制方法源语言
本文介绍了ACPI控制方法源语言(ASL)的编程模型。主要内容包括:1) ASL是一种声明性语言,通过ObjectType、FixedList和VariableList三部分定义对象;2) 控制方法的执行机制,包括参数传递规则、引用-常量调用约定以及局部变量的使用;3) 操作区域的访问方式,详细说明了8种预定义操作区域类型及其访问协议,特别对CMOS和PCI设备总线目标的访问进行了重点阐述。文章还强调了ASL程序员需要充分理解调用约定及其潜在影响,并提供了相关技术规范的参考章节。
2026-03-10 11:35:51
367
原创 ACPI软件编程模型之十二:ACPI命名空间与定义块编码
本文详细解析了ACPI规范中的命名空间机制与定义块编码规则。在命名空间部分,阐述了其层级化结构、命名规范(32位固定长度、字符范围限制)、搜索规则(相对/绝对路径)及典型应用场景,特别强调命名冲突的严重后果。同时介绍了预定义根命名空间(如_GPE、_PR等)和对象作用域特性。在定义块编码部分,说明了AML编码的流式处理方式、程序包与对象声明的层级结构、PkgLength的编码格式(1-4字节)以及加载过程的命名空间填充机制。通过典型代码示例,揭示了控制方法执行时创建命名对象可能引发的错误场景。全文为深入理解
2026-03-09 20:40:52
368
原创 ACPI软件编程模型之七:ACPI系统描述表 - MADT&全局系统中断
本文介绍了ACPI规范中的多APIC描述表(MADT)及其相关结构。MADT为操作系统提供APIC、SAPIC或GIC中断模型所需的信息,包括处理器本地APIC、I/O APIC、中断源覆盖等结构定义。文章详细说明了各种结构格式,如处理器本地APIC结构包含处理器ID和APIC ID,I/O APIC结构定义全局系统中断映射,中断源覆盖结构描述8259与APIC中断的差异等。同时强调了平台设计需遵循的处理器初始化顺序规范,确保多处理器系统正确运行。通过MADT,ACPI实现了统一的中断管理模型,支持现代多处
2026-03-09 17:24:58
406
原创 ACPI软件编程模型之六:ACPI系统描述表 - 定义块&DSDT&SSDT&PSDT
本文介绍了ACPI规范中的定义块及系统描述表类型。定义块采用AML格式编码,包含硬件实现细节信息,通过分层命名空间组织数据。系统初始化时,OSPM通过FADT加载DSDT创建ACPI命名空间,DSDT作为核心定义块不可卸载。SSDT作为DSDT的补充扩展,可动态添加系统选项但不可覆盖已有定义。此外,文章提及ACPI 1.0中的PSDT已被废弃,其功能由SSDT替代实现。规范还强调了从ACPI 2.0开始支持64位整数寻址,通过表头修订字段确保向后兼容性。
2026-03-09 16:03:51
424
原创 ACPI软件编程模型之四:ACPI系统描述表 - 固定ACPI描述表(FADT)
本文介绍了ACPI规范中的固定ACPI描述表(FADT)的结构与功能。FADT定义了ACPI兼容系统所需的固定硬件信息,包括多个硬件寄存器块的基地址,并包含指向DSDT的指针。文章详细说明了FADT表格式、固定特性标志位、电源管理配置文件类型(如桌面、笔记本、服务器等),以及系统类型属性和IA-PC启动架构标志位的用途。这些信息帮助操作系统在启动时确定硬件配置和电源管理策略,特别指出当HW_REDUCED_ACPI标志置位时,OSPM将忽略相关硬件寄存器字段。本文基于ACPI 5.0规范翻译整理。
2026-03-05 15:08:18
325
原创 ACPI软件编程模型之三:ACPI系统描述表 - RSDP&RSDT&XSDT
本文介绍了ACPI规范中的关键数据结构与查找机制。主要内容包括:1)通用唯一标识符(UUID)的定义与应用场景;2)根系统描述指针(RSDP)的查找方法,包括传统BIOS和UEFI系统下的不同实现;3)系统描述表头的标准结构及预定义签名表;4)根系统描述表(RSDT)和扩展系统描述表(XSDT)的结构与功能,其中XSDT支持64位地址并逐步取代RSDT。这些数据结构构成了ACPI规范的编程模型基础,为操作系统提供硬件配置信息的标准访问接口。
2026-03-05 11:34:17
345
原创 ACPI软件编程模型之二:ACPI系统描述表 - 保留位和保留字段&兼容性&地址格式
本文介绍了ACPI系统描述表的结构与编程规范,重点解析了保留位处理、兼容性维护和地址格式等关键内容。保留字段必须遵循严格定义,所有版本需保持向后兼容性。ACPI支持64位地址机制,通过通用地址结构(GAS)实现寄存器地址描述,并引入"功能固定硬件"概念以适配不同CPU架构。规范要求软件正确处理保留位,OEM和OSPM需遵循特定读写规则,确保系统配置与电源管理的稳定实现。这些标准为ACPI兼容操作系统的开发提供了统一的技术框架。
2026-03-05 10:59:46
370
原创 ACPI软件编程模型之一:系统描述表体系结构概述
本文摘要: ACPI规范定义了系统描述表的层次化架构,包括根系统描述指针(RSDP)、扩展系统描述表(XSDT)和差异化系统描述表(DSDT)等核心组件。RSDP作为入口点,指向XSDT表,而XSDT首先引用固定ACPI描述表(FADT),FADT又包含指向DSDT的指针。这些表格采用统一表头格式,通过特征码标识不同类型。DSDT采用AML编码的"定义块"形式,构建出代表硬件配置的ACPI命名空间,支持动态评估和电源管理功能。系统还支持地址空间转换机制,允许处理器相对地址与总线相对地址之
2026-03-05 10:39:46
414
原创 ACPI硬件规范之二:ACPI寄存器模型
本文摘要: ACPI硬件规范定义了6种地址空间和两类寄存器:固定硬件寄存器(实现ACPI标准接口)和通用硬件寄存器(处理增值硬件事件)。规范详细阐述了寄存器模型,包括状态/使能寄存器的交互机制,以及通过分组方式将寄存器分布在多个物理块中的设计。重点介绍了PM1事件/控制寄存器、PM2控制寄存器、PM定时器寄存器、处理器控制寄存器和通用事件寄存器的功能特点与访问规则。所有寄存器地址通过FADT表静态分配,操作系统无法重新映射,且不同寄存器块有严格的访问规范,包括保留位处理、读写顺序要求等。文章还提供了完整的A
2026-03-04 15:24:29
408
原创 ACPI硬件规范之一
ACPI硬件规范概述 本文基于ACPI 5.0规范,介绍了ACPI硬件层面的定义和要求。ACPI将硬件分为固定类和通用类:固定类需符合特定编程模型,通用类则具有灵活性。对于某些新型系统,可采用硬件简化ACPI模式,该模式不实现固定硬件接口,而是通过软件方案替代功能。 硬件简化平台通过GPIO信号和中断机制实现事件处理与唤醒功能。固定硬件编程模型针对性能敏感和关键恢复功能,定义了标准寄存器接口。通用硬件模型则允许OEM通过AML代码灵活实现功能,为不同操作系统提供统一的硬件抽象层。 文章还详细说明了ACPI的
2026-03-02 17:38:38
818
原创 ACPI 概述
ACPI规范摘要 ACPI(高级配置与电源接口)规范为操作系统提供了对计算机电源管理和设备配置的专属控制权。该规范主要涵盖以下功能领域: 电源管理:包括系统休眠/唤醒、设备电源状态控制、处理器低功耗模式等 配置管理:提供设备枚举和配置的分层信息结构 事件处理:通用机制处理热事件、设备插拔等系统事件 电池管理:将电池管理策略从BIOS迁移至操作系统 热管理:定义热区、热指标及冷却方法的标准模型 ACPI规范适用于多种计算设备,包括移动PC、台式机、服务器等,通过标准化接口实现最优的电源、性能和热管理。操作系统
2026-03-02 15:46:51
795
原创 ACPI术语定义
本文概述了ACPI(高级配置与电源接口)规范中的核心术语与概念。主要内容包括: 通用术语:定义ACPI硬件、命名空间、AML/ASL编程语言、控制方法、设备等基础概念,以及APIC、GIC等控制器架构。 系统状态:描述全局系统状态(G0-G3),包括工作、睡眠、软关机等用户可见状态。 设备电源管理:说明设备电源状态与系统状态的独立性(如设备可在系统运行时关闭)。 关键表格:介绍DSDT(差异系统描述表)、FADT(固定ACPI描述表)等核心数据结构的作用,以及固件接口(如FACS)的功能。 扩展支持:涵盖插
2026-02-28 17:44:46
701
原创 ACPI介绍
ACPI(高级配置和电源接口)规范旨在建立通用接口,支持操作系统导向的设备配置和电源管理。其核心优势是将电源管理功能移至操作系统,通过抽象接口实现硬件与操作系统的独立发展。ACPI定义了软电源和休眠按钮的两种实现模式(一键或两键),并提供了强制关闭的覆盖功能。其架构包含三个关键组件:ACPI系统描述表(含AML伪代码语言)、ACPI寄存器接口和平台固件,其中描述表是核心,通过操作系统解释器执行硬件操作指令。ACPI通过标准化接口减少了行业冗余,提升了跨平台兼容性。
2026-02-11 20:25:37
863
原创 ACPI规范基础系列教程
ACPI(高级配置与电源管理接口)是操作系统与硬件固件交互的核心标准。本教程系统介绍ACPI规范的基础概念、关键组件与工作机制,包含21个章节内容,涵盖电源管理、硬件配置、热插拔等核心功能模块。教程基于ACPI 5.0规范编写,为理解操作系统底层硬件交互提供完整知识框架。目前教程持续更新中,配套提供规范文档下载链接。
2026-02-10 17:01:18
318
原创 编译玄铁处理器RISC-V指令测试用例
解压Xuantie-900-gcc-elf-newlib-x86_64-V2.0.3-20210806.tar.gz后,编译器位于Xuantie-900-gcc-elf-newlib-x86_64-V2.0.3\bin\riscv64-unknown-elf-gcc路径。执行此命令,就会使用riscv64-unknown-elf-gcc来编译RISC-V测试用例源码,若没有报错,则表示编译成功。由于配置文件和make时,默认使用csh,而不是bash,因此需要安装这个csh。编译ISA_THEAD用例。
2025-04-01 21:57:32
2178
原创 riscv架构下linux6.12.7实现early打印
在linux 6.12.7源码中,early console注册的函数调用栈:```cppstart_kernel =>setup_arch =>parse_early_param =>parse_early_options =>do_early_param =>param_setup_earlycon =>setup_earlycon =>register_earlycon =>register_console```
2025-01-14 17:25:35
589
原创 riscv架构下linux4.15实现early打印
适配内核到新的平台,基本环境搭建好之后,首要的就是要调通串口,方便后面的信息打印。正常流程 init/main.c 中 start_kernel 入口,要到 console_init 之后才能真正打印,前面的打印,都是缓存在 printk 的 ringbuffer 中的。
2025-01-14 17:17:06
1309
原创 X86(Local APIC+I/O APIC)与RISC-V(IMSIC+APLIC)对比
将X86(Local APIC+I/O APIC)与RISC-V(IMSIC+APLIC)进行对比。
2025-01-06 20:38:30
936
原创 AIA - APLIC之三(附APLIC处理流程图)
在MSI投递模式(domaincfg.DM = 1)下,中断域通过MSI将中断转发到目标hart。仅当中断源对应的pending位和enable位都为1,并且寄存器domaincfg的IE字段也为1时,才会为特定中断源发送MSI。如果发送MSI,则源的中断pending位将被清除。4.1 MSI的地址和数据MSI的数据,取自target[i]的EIID字段,0扩展到32位。无论域的domaincfg寄存器BE字段如何,MSI的32位数据,始终以小端字节顺序写入。要通过MSI转发中断,APLI
2025-01-05 21:27:42
2260
原创 AIA - APLIC之一
在RISC-V系统中,PLIC 处理外部中断是通过线中断,而非MSI(message signal interrupt) 的方式。(APLIC),不向下兼容,也就是说,不与RISCV PLIC兼容。完整的AIA架构,是需要APLIC这个组件的。只要向 hart 发送 interrupt 是使用 wire interrupt 而不是 MSI,就可以使用 PLIC 建立一个可行的系统。不过,假设系统中不需要支持MSI,使用原有的PLIC也是可行的。在的系统中,
2024-12-31 15:13:12
1276
原创 AIA - APLIC之二
该控制区域大小是由4KB的倍数,并与4KB地址边界对齐,最小的有效控制区域是16KB。接下来,本文将详细讲解,APLIC中断域的内存映射空间。
2024-12-31 15:09:02
1720
原创 AIA - IMSIC之二(附IMSIC处理流程图)
软件通过描述的CSR来访问IMSIC。machine level 相关的CSR有以下:miselect、mireg、mtopei。supervisor level 相关的 CSR 有以下:siselect、sireg、stopei。当 hypervisor extension 实现时,与 VS CSR 相关的有以下:vsiselect、vsireg、vstopei。miselect 和 mireg通过间接的方式,访问machine level的附带寄存器。
2024-12-25 17:23:14
1765
原创 AIA - IMSIC之一
Incoming MSI Controller(IMSIC)是一个可选的RISC-V硬件组件,它与hart紧密耦合:- 每个hart有一个IMSIC。- 每个IMSIC包含M/S/VS-level的interrupt file,对应hart内的不同特权等级的csr pending寄存器:mip、sip、vsip。- IMSIC会接收target为该hart的MSI中断,一旦该MSI中断的pending和enable bit置位时,就会将其发送到该hart的对应特权等级中。- IMSIC中包含一到多个
2024-12-20 17:46:20
1465
原创 AIA - 新增的CSR
AIA框架,新增的M模式CSR寄存器,如下:mtopei,仅在实现IMSIC时才存在,用于记录当前最高优先级的外部中断号(即外部中断的minor identity),由IMSIC负责维护。mtopi,用于记录当前最高优先级的pending和enable位都置位的中断号。
2024-12-19 20:54:10
1186
原创 AIA - 介绍
Advanced Interrupt Architecture for RISC-V(AIA),RISC-V的高级中断架构。该AIA规范相对于原有的PLIC规范,增加了MSI消息中断的支持,可以更好的应用于多核NoC的网络中。APLICIMSICRISC-V 特权架构为每个 hart 上的 interrupt cause 定义了不同的 ID number ,这是当 trap 发生时自动写入 mcause 或是 scause 的。
2024-12-19 17:17:36
2486
原创 开源浮点运算库SoftFloat
SoftFloat是一个开源的、跨平台的、高效实现IEEE 754单精度和双精度浮点数运算的C代码库。该项目由John L. Hennessy教授领导的斯坦福大学计算机系统实验室开发。它提供了完整的API接口,可以方便地集成到各种应用中。目前最新版是,2018.1月发布的softfloat 3e。1rfz。
2024-09-18 17:55:19
1150
1
原创 QEMU中GDB远程串行协议
GDB(GNU Debugger)是一个强大的代码调试工具,它提供了一种使用串行通信协议进行远程调试的方法。在GDB中,可以通过GDB服务器和GDB客户端进行远程调试。其中,GDB远程串行协议允许GDB客户端通过串行连接(如USB或TCP/IP)与GDB服务器通信。GDB远程串行协议的主要作用是:允许开发者在一个系统(通常是开发主机)上,调试另一个系统(通常是目标设备)上运行的程序。这在调试嵌入式系统或需要物理访问硬件的情况下特别有用。
2024-08-23 14:39:58
1460
原创 RISC-V特权架构 - 时钟中断处理
经过对MTI和STI中断的处理分析,发现两者的查询处理逻辑,其实是一样的。其处理流程,总结为以下几个步骤(以XXI:检查确保XXI中断使能,且该中断被触发根据运行模式,检查全局中断开关检查mstatus.mie:禁用M全局中断,不处理:使能M全局中断,继续检查委托:不委托,陷入M:委托到S,陷入S检查mstatus.sie:禁用S全局中断,继续检查委托:不委托,陷入M:委托到S,不处理:使能S全局中断,继续检查委托:不委托,陷入M:委托到S,陷入S。
2024-08-12 21:31:40
3071
原创 解决QEMU无法从非0x80000000处开始执行
将benos_payload.bin,放置在NEMU中内存0x80000000处,NEMU通过Socket发送放置到QEMU中内存0x31e00000处。计划让QEMU直接从0x31e00000开始执行,而不是常规的0x80000000。对NEMU源码,做了如下修改。...// 将benos_payload.bin发送到QEMU的0x31e00000内存处// pc寄存器设置为0x31e00000// 将NEMU的x0 ~ x31和pc寄存器值,发送到QEMU中,覆盖QEMU原有寄存器。
2024-07-24 20:57:37
1076
原创 解决QEMU执行mret指令无法跳转到0x80200000
将benos_payload.bin,分别放置在NEMU与QEMU中的内存0x80000000处,并计划两者同时从0x80000000开始运行,期间运行到0x800000a8处(mret指令)时,下一条指令,预期均会跳转到0x80200000处,继续取指执行。而QEMU执行mret指令后,却无法跳转到0x80200000处,QEMU直接跳转到了0x80200100处(对于高版本QEMU(我用的7.1.0),会检查PMP配置,因此需要在SBI中初始化PMP才能运行。
2024-07-23 20:15:31
798
原创 NEMU与QEMU的DiffTest联调经验
当我们搭建NEMU与QEMU的DiffTest环境时,修改了很多代码,免不了需要两边一起调试,解决一些问题。这里,对这些调试经验做下小结。
2024-07-13 21:25:00
1409
原创 QEMU模拟器源码编译与使用
那么,如果我们知道与gdb server的数据包协议,是不是就可以编写一个程序,去控制QEMU的单步执行,以及获取CPU寄存器、内存等,是的,这是可行的。上述步骤,编译的QEMU,直接就可以gdb调试,只是有一些还是有所优化,如果要完全无优化,可能还需要自己配置再重新编译。将mysbi.bin、benos.bin、benos.elf,拷贝到qemu-7.1.0/build/目录下。需要在QEMU中运行的文件有:mysbi.bin、benos.bin、benos.elf。运行,即可在该断点处停住。
2024-07-13 14:44:04
1921
原创 RISC-V在线反汇编工具
RISC-V在线反汇编工具:https://luplab.gitlab.io/rvcodecjs/#q=34179073&abi=false&isa=AUTO似乎,只支持RV32I、RV64I、RV128I指令集:
2024-07-13 13:20:25
4455
1
原创 搭建NEMU与QEMU的DiffTest环境(Socket方式)
NEMU可以调用gdb_getregs函数,从QEMU获取到寄存器数据,一共528字节,每个字节为"0" ~ "9"或"a" ~ "f"之间的任一字符,每16个字节表示一个寄存器值,共表示33个寄存器。比如:数据包中"1234567823456789...",那么"1234567823456789",低位在前,高位在后,即表示寄存器值为0x8967452378563412,相当于数据包中用2字节表示1字节的实际数据。528字节的数据包中,从前往后依次,表示32个gpr与pc寄
2024-07-12 22:49:18
1968
原创 NEMU DiffTest基本原理
DiffTest核心思想: 对于根据同一规范的两种实现, 给定相同的有定义的输入, 它们的行为应当一致。NEMU作DUT时,可以选择5种方式的模拟器,作为参考模拟器REF。当然,如果需要测试处理器硬件,那处理器也可以作为DUT。对于后面三种,楼主没有具体研究,因此本文也不作介绍。/,编译为动态库riscv64-qemu-so。/,编译为动态库riscv64-qemu-so。可以将NEMU/tools/可以将NEMU/tools/
2024-07-12 13:03:39
2114
AMD_block_prefetch_paper.pdf
2020-09-13
Win64OpenSSL-1_0_2u.rar
2020-09-13
qt-vsaddin-msvc2017-2.4.3-rev.07.vsix
2020-09-13
2020最新个税计算器打包脚本
2020-10-19
rttr-0.9.5-win64-vs2015.7z
2020-09-13
processhacker-2.39-bin.rar
2020-09-13
processhacker-2.39-src.rar
2020-09-13
processhacker-2.39-sdk.zip
2020-09-23
ResourceHacker.rar
2020-09-13
Flops-master.zip
2020-09-13
2020最新个税计算器免安装版
2020-10-19
2020最新个税计算器安装包
2020-10-19
cachesize-master.zip
2020-09-23
boost_reflect-master.rar
2020-09-13
ACPI spec 5.0.rar
2026-02-10
NEMU模拟器源码(DiffTest)
2024-07-15
DOSBox-MASM.rar
2023-10-12
AMD处理器编程指导手册
2023-02-18
CodeEditor源码文件
2022-12-07
CXL1.1协议规范文档-中文版
2022-10-27
CXL2.0协议规范文档-中文版
2022-10-27
SourceInsight4.0仿VS2013代码风格主题
2022-02-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅