ACPI _OSI和_REV方法

news/2025/3/10 17:44:36/文章来源:https://www.cnblogs.com/wanglouxiaozi/p/18763237

ACPI BIOS 可以使用“操作系统接口(Operating System Interfaces)”方法 (_OSI) 来查找操作系统支持的内容。例如,如果 BIOS AML(ACPI Machine Language) 代码包含 _OSI(“XYZ”),则内核的 AML 解释器可以评估该方法,查看它是否支持“XYZ”,并向 BIOS 回答 YES 或 NO。

ACPI _REV 方法返回“OSPM 支持的 ACPI 规范的修订版本”

本文解释了 BIOS 和 Linux 应如何以及为何使用这些方法。它还解释了它们被广泛滥用的原因和方式。

如何使用_OSI

Linux 运行在两组机器上 - 一组是由 OEM 测试过的与 Linux 兼容的机器,另一组从未经过 Linux 测试,但安装了 Linux 来替换原始操作系统(Windows 或 OSX)。

较大的一组是仅针对运行 Windows 进行测试的系统。不仅如此,许多系统还针对仅运行一个特定版本的 Windows 进行测试。因此,即使 BIOS 可以使用 _OSI 来查询正在运行哪个版本的 Windows,但实际上只测试了通过 BIOS 的一条路径。经验表明,通过未经测试的 BIOS 路径会使 Linux 暴露于整个类别的 BIOS 错误。因此,Linux _OSI 默认值必须继续声明与所有版本的 Windows 兼容。

但 Linux 实际上并不兼容 Windows,当 Linux 将最新版本的 Windows 添加到其 _OSI 字符串列表时,Linux 社区也受到了回归的影响。因此,将来在向上游发布之前,可能会对其他字符串进行更彻底的审查。但最终它们很可能都会被添加。

如果 OEM 想要使用相同的 BIOS 映像支持 Linux 和 Windows,他们应该怎么做?通常他们需要针对 Linux 做一些不同的事情,以处理 Linux 与 Windows 的不同之处。

在这种情况下,OEM 应该创建由 Linux 内核执行的自定义 ASL,并更改 Linux 内核驱动程序以执行此自定义 ASL。实现此目的的最简单方法是引入从 Linux 内核调用的设备特定方法 (_DSM)。

过去,内核支持类似这样的代码:_OSI(“Linux-OEM-my_interface_name”),其中如果这是 OEM 特定的钩子,则需要使用“OEM”,而“my_interface_name”则描述该钩子,这可能是一个怪癖、一个错误或一个错误修复。

然而,人们发现其他 BIOS 供应商会滥用此功能来更改完全不相关的系统上的完全不相关的代码。这促使对其所有用途进行评估。结果发现,出于任何原始原因,它们都不是必需的。因此,内核默认不会响应任何自定义的 Linux-* 字符串。

这很简单。请继续阅读,找出错误的原因。

在 _OSI 之前,有 _OS

ACPI 1.0 将“_OS”指定为“可计算为标识操作系统的字符串的对象”。

ACPI BIOS 流程将包括对 _OS 的计算,并且内核中的 AML 解释器将向其返回一个标识操作系统的字符串:

Windows 98,SE:“ Microsoft Windows”

Windows ME:“ Microsoft WindowsME:Millennium Edition”

Windows NT:“ Microsoft Windows NT”

这个想法是在一个运行多个操作系统的平台上,BIOS 可以使用 _OS 来启用操作系统可能支持的设备,或者启用必要的怪癖或错误解决方法,以使平台与预先存在的操作系统兼容。

但 _OS 存在根本问题。首先,BIOS 需要知道在其上运行的所有可能操作系统版本的名称,并且需要知道这些操作系统的所有怪癖。当然,BIOS 询问操作系统的具体信息(例如“您是否支持特定接口”)会更有意义,因此在 ACPI 3.0 中,_OSI 诞生以取代 _OS。

_OS 已被废弃,但即使在今天,许多 BIOS 仍会寻找 _OS“Microsoft Windows NT”,尽管有人会安装那些旧操作系统来取代机器自带的操作系统,这似乎有些牵强。

Linux 回答“Microsoft Windows NT”以迎合 BIOS 习语。这是唯一可行的策略,因为这就是现代 Windows 所做的,否则可能会让 BIOS 走上一条未经测试的道路。

_OSI 诞生后立即被滥用

使用 _OSI,BIOS 提供描述接口的字符串,并询问操作系统:“yes/no,您是否兼容此接口?”

例如,如果操作系统知道如何处理对 ACPI 3.0 规范所做的热扩展,则 _OSI(“3.0 Thermal Model”) 将返回 TRUE。不了解这些扩展的旧操作系统将回答 FALSE,而新操作系统可能会返回 TRUE。

对于特定于操作系统的接口,ACPI 规范规定 BIOS 和操作系统应就“Windows-interface_name”等形式的字符串达成一致。

但发生了两件坏事。首先,Windows 生态系统使用 _OSI 并非按照设计,而是将其作为 _OS 的直接替代品——用于标识操作系统版本,而不是操作系统支持的接口。事实上,从一开始,ACPI 3.0 规范本身就使用 _OSI(“Windows 2001”)在示例代码中编纂了这种滥用。

这种滥用被采纳并持续至今。

Linux 别无选择,只能将 TRUE 返回给 _OSI(“Windows 2001”) 及其后续版本。否则,几乎可以保证破坏仅使用 _OSI 返回 TRUE 进行测试的 BIOS。

这种策略是有问题的,因为 Linux 永远不会与最新版本的 Windows 完全兼容,有时需要一年多的时间才能解决不兼容问题。

Linux 社区不甘示弱,将 _OSI(“Linux”) 返回 TRUE,这让事情变得更糟。这样做甚至比 Windows 滥用 _OSI 更糟糕,因为“Linux”甚至不包含任何版本信息。_OSI(“Linux”) 导致某些 BIOS 出现故障,因为 BIOS 编写者在未经测试的 BIOS 流程中使用它。但一些 OEM 在经过测试的流程中使用 _OSI(“Linux”) 来支持真正的 Linux 功能。2009 年,Linux 删除了 _OSI(“Linux”),并添加了一个命令行参数来为仍需要它的旧系统恢复它。此外,所有调用它的 BIOS 都会打印 BIOS_BUG 警告。

任何 BIOS 都不应使用 _OSI(“Linux”)。

结果是 Linux 的策略是最大限度地提高与在 Windows 机器上测试过的 ACPI BIOS 的兼容性。夸大兼容性确实存在风险;但另一种选择往往是灾难性的故障,因为 BIOS 采取了从未在任何操作系统下验证过的路径。

不要使用 _REV

由于 _OSI(“Linux”)消失,一些 BIOS 编写者使用 _REV 在同一 BIOS 中支持 Linux 和 Windows 的差异。

_REV 在 ACPI 1.0 中定义,用于返回操作系统和操作系统 AML 解释器支持的 ACPI 版本。

现代 Windows 返回 _REV = 2。Linux 使用 ACPI_CA_SUPPORT_LEVEL,它会根据支持的规范版本递增。

不幸的是,_REV 也被误用了。例如,某些 BIOS 会检查 _REV = 3,并对 Linux 执行某些操作,但当 Linux 返回 _REV = 4 时,该支持就中断了。

为了解决这个问题,从 2015 年中期开始,Linux 始终返回 _REV = 2。ACPI 规范也将更新,以反映 _REV 已被弃用,并且始终返回 2。

Apple Mac 和 _OSI(“Darwin”)

在 Apple 的 Mac 平台上,ACPI BIOS 调用 _OSI(“Darwin”) 来确定机器是否正在运行 Apple OSX。

与 Linux 的 _OSI(“Windows”) 策略一样,Linux 默认对 _OSI(“Darwin”) 回答 YES,以启用对 OSX 看到的硬件和经过验证的 BIOS 路径的完全访问。就像在经过 Windows 测试的平台上一样,这种策略存在风险。

从 Linux-3.18 开始,内核对 _OSI(“Darwin”) 的回答为 YES,目的是启用 Mac Thunderbolt 支持。此外,如果内核注意到 _OSI(“Darwin”) 被调用,它还会禁用所有 _OSI(”Windows”),以防止编写不当的 Mac BIOS 进入未经测试的路径组合。

Linux-3.18 的默认更改导致 Mac 笔记本电脑的功率下降,并且 3.18 实现不允许通过命令行“acpi_osi=!Darwin”更改默认值。Linux-4.7 修复了使用 acpi_osi=!Darwin 作为解决方法的能力,我们希望在 Linux-4.11 中看到 Mac Thunderbolt 电源管理支持。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/896890.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度测评国产 AI 程序员,在 QwQ 和满血版 DeepSeek 助力下,哪些能力让你眼前一亮?

通义灵码上新模型选择功能,不仅引入了 DeepSeek 满血版 V3 和 R1 这两大 “新星”,Qwen2.5-Max 和 QWQ 也强势登场,正式加入通义灵码的 “豪华阵容”。开发者只需在通义灵码智能问答窗口的输入框中,单击模型选择的下拉菜单,便能轻松开启不同模型,畅享个性化服务。通义灵码…

AI Station使用笔记

一、安装maui (1)在104上,终端操作(必须有sudo权限):sudo apt install cifs-utilspip install maui==0.0.32 -i http://10.9.54.102:8888/simple --trusted-host 10.9.54.102 maui login (fang.wang03,密码为开机密码) maui project init RC_Collaboratives (前…

mysql索引浅谈

一. 索引: 索引是数据库中重要的数据结构,主要作用是提高查询的效率。索引相当于书本的目录,即可以快速定位所需数据的位置,而不用逐页查找。 二. 索引底层结构:索引底层主要采用B+树来实现索引的管理。B+树内部分为叶子节点和非叶子节点;非叶子节点主要用来存储索引和指…

java 常用注解记录汇总

1.@Transactional 可放在类或者方法上 2.@JsonFormat 一般用于格式化时间字段属性 3.@JsonProperty 和 @JSONField 前者是Jackson框架后者是阿里的 用法都是属性名之间的映射,场景多用于接口对接 说明: 比如和对方系统进行接口对接时,可能对方的字段名叫做 chinese_name和…

数据库索引简单介绍

数据库索引 基本概念索引本质是一种可以提升数据查询效率的数据结构主要分类 主要分为两类:聚簇(集)索引:一个叶子节点上存储的是索引(主键值)和数据为对应的行数据 非聚簇(集)索引:一个叶子节点上存储的是索引(某一个字段的值)和数据为对应的主键值B+树索引采用的数…

雅马哈机器人E17故障排除案例参考

雅马哈机器人E17故障是一个与电机控制相关的报警,它包含许多特定的故障代码,例如E17.410、E17.411、E17.802、E17.902、E17.905、E17.915等。 故障排除步骤数据备份:出现故障时,尽快备份数据。 诊断工具:使用教学设备或计算机软件进行诊断,浏览系统的所有故障类型和信息,…

记录---前端实现水印功能

🧑‍💻 写在开头 点赞 + 收藏 === 学会🤣🤣🤣前段时间突然接到一个需求,项目中要实现特定水印功能,不同的用户查看时展示用户特有的水印,这样可以在资源外流的时候追究到责任人。 查找搜集了很多方法,有通过CSS伪元素添加水印的、还可以使用CSS重复背景图片、还有…

IDEA2024破解方法

一、下载链接 IDEA2024.2.3: https://www.jetbrains.com/idea/download/other.html 破解脚本和激活码:https://wwpf.lanzouv.com/iZtCB2q6xmwh 二、运行破解脚本 运行 三、输入激活码 激活码位置:

关于举办2024年全国青少年 人工智能创新实践交流展示活动的通知

首页课程项目工具数据集AI 体验读本活动 注册登录“与AI共创未来” 2024年全国青少年人工智能创新实践活动【主办单位】中国科协青少年科技中心、中国青少年科技教育工作者协会、上海人工智能实验室、江苏省科协 【支持单位】中国公众科学素质促进联合体 【承办单位】各省级科…

SRA数据下载丢失质量值信息

001、SRA数据下载丢失质量值信息 使用的转换命令如下: fastq-dump --gzip --split-files -A sample_name sample_name.lite.1zcat SRR17344673_1.fastq.gz | head -n 4 002、解决方法: a、改用EBI数据库:https://www.ebi.ac.uk/ena/browser/viewb、使用 pfastq-dump 进行转…

浏览器插件使用

具体下载——插件小屋 https://www.chajianxw.com/developer/83894.html 在对应的地方填上指定的 header,可以在请求头查看当前的header是否有 新加坡的地址查看当前头部 有 灰度环境 声明 欢迎转载,但请保留文章原始出处:) 博客园:https://www.cnblogs.com/chenxiaomeng/ 如出…

FastAPI 参数别名与自动文档生成完全指南:从基础到高级实战

title: FastAPI 参数别名与自动文档生成完全指南:从基础到高级实战 🚀 date: 2025/3/10 updated: 2025/3/10 author: cmdragon excerpt: 本教程深入探讨 FastAPI 中参数别名与自动文档生成的核心机制,涵盖从基础操作到高级用法。通过详细的代码示例、课后测验和常见错误解…