【发布时间】:2020-12-02 14:24:24
【问题描述】:
首先:这个问题在这里有重复:
How does a modern operating system like Windows or Linux know the chipset specific memory map?
但是这个问题的答案是关于设备树和 ACPI(用于旧版 PC),没有详细信息我需要编写程序集或 c 代码来利用 ACPI 表中的信息,我现在正在尝试了解旧版 PC首先以及如何解码 ACPI 的表,我尝试进行一些搜索,发现最重要的表是 DSDT,现在我的问题如何解码表中的信息以获得详细的内存映射(范围) 以及获取哪些设备连接到 CPU 以及如何获取内存中 DSDT 的地址?,我尝试进行一些搜索,但我无法理解我认为与此相关的 AML 语言主题......想知道相同的操作系统版本如何在不同的芯片组上运行,有m必须是检测整个地图的动态方式,所以获取整个地图的建议过程也是我的另一个问题
请注意,这是我学习如何直接与裸机硬件设备单独通信的第一步(这是第二步)
谢谢
【问题讨论】:
-
@Joshua,并非所有物理地址空间都由 RAM 支持。其中一些映射到设备控制寄存器、视频内存等。基本上有内存映射类型,操作系统设置的虚拟内存映射将进程内存映射到物理内存(或交换)。以及将数据总线上的地址映射到 RAM 或设备的芯片组。
-
你会想要像操作系统一样依赖 bios 直到它接管,所以看看 linux 和 bsd 源代码,模仿一下。
-
x86 主板可以有一些半机密的硬件,只有 bios 知道。 BIOS [由主板制造商] 与板上的确切硬件匹配。这被认为是专有的。此外,PC 设备具有一种机制,通过这种机制,各种控制器可以对 bios 启动期间附加的 bios 代码进行扩展。它们允许设备通过 bios
int调用工作。所以,不要吹掉bios。如果没有它的帮助,可能直到启动链的很晚才发现和/或使用某些硬件:引导到操作系统的 bios。 -
虽然很多硬件可以通过探测 PciE 插槽发现,并通过 PnP 机制呈现出来,但一些硬件配置信息是硬连线到 bios 中的。 [仅] ACPI 接口可以发现该硬件。
-
如果您熟悉 U-Boot,您可以查看它的源代码,并且至少重新创建了几个 (x86) 平台以从头开始拥有 ACPI 表。最新的 ACPI 规范非常有用(请参阅 uefi.org)。
标签: c assembly osdev bare-metal acpi