2

我正在使用基于 qsp-client-core.simics 定义的目标的 Simics 6.0.83(公共发布预览版),并尝试将 coreboot 二进制文件作为旧版 BIOS 启动。

我正在尝试的配置:

# In order to run this, the QSP-x86 (2096), QSP-CPU (8112) and
# QSP-Clear-Linux (4094) packages should be installed.

decl {
! Script that runs the Quick Start Platform (QSP) with a client processor core.

 params from "%simics%/targets/qsp-x86/qsp-clear-linux.simics"
  default cpu_comp_class = "x86-coffee-lake"
  default num_cores = 4
  default enable_efi = FALSE
  default bios_image = "/home/debian/dasharo/coreboot/build/coreboot.rom"
}

run-command-file "%simics%/targets/qsp-x86/qsp-clear-linux.simics"

当尝试run-command-file从 simics CLI 我得到:

[board.mb.cpu0.core[0][0] unimpl] Warning: Cache flush without writeback (will not warn again for this CPU).                                                                                 
[board.mb.cpu0.core[0][0] info] CAR segment [0xfef00000: 0xfef40000] added to board.mb.cpu0.mem[0][0]                                                                                        
[board.mb.cpu0.core[0][0] info] 0xc91: Writing to unknown MSR. Signaling GP fault.
[board.mb.cpu0.core[0][0] info] Exception 13 while calling the double fault handler. Triple fault.                                                                                           
Breaking on triple fault. Break on triple fault is controlled by the break_on_triple_fault attribute.  

如何在 Simics 中尝试 coreboot?

4

3 回答 3

3

我很好奇,因此基于https://doc.coreboot.org/tutorial/part1.html使用 coreinfo 作为有效负载克隆、构建和引导 coreboot

Simics 使用 CoreBoot 运行 CoreInfo

也许你可以看看我的 defconfig 如下

核心引导定义

于 2021-08-20T15:06:50.393 回答
2

听起来您需要调试 CoreBoot 无法在模型上运行的原因。建议开启日志的时间戳(log-setup -time-stamp),看看MSR是否与三重故障有关。还可以在问题发生时尝试跟踪异常以查看涉及哪些异常。如果您自己构建了二进制文件,那么将调试器应用到它应该很简单。

关于日志:我如何获得 Simics 日志消息的时间戳?

请注意,CoreBoot 可能需要支持所使用的处理器内核变体。例如,指示的 MSR 在“咖啡湖”上不可用。但它可能只是 CoreBoot 探测可用功能。

如果您想使用小型引导加载程序,请查看开源 SlimBootLoader,网址为https://slimbootloader.github.io/supported-hardware/qsp.html

于 2021-06-28T06:09:26.800 回答
0

我不知道为什么 Coreboot 会触及 0xc91(它是 Intel Resource Director Technology (Intel RDT) 的一部分,并且显然具有与 cache-as-ram 无关的不同目的)。但是,试试这个:

  • 检查当前处理器

simics> pselect“board.mb.cpu0.core[0][0]

  • 定位映射 MSR 的地址空间:

simics> board.mb.cpu0.core[0][0]->cpu_msr_space board.mb.cpu0.cpu_msr[0][0]

  • 查找映射:

simics> board.mb.cpu0.cpu_msr[0][0].map

  • 在 0xc91 上找不到映射

  • 因为 Simics 有模型开发工具——创建简单的设备模型来实现缺失的寄存器

  • 使用以下方法将此类设备映射到 MSR 的空间:

board.mb.cpu0.cpu_msr[0][0].add-map

或者,您可以为 MSR 空间设置默认目标 - 在这种情况下,所有丢失的访问(读取和写入)都会命中它:

simics>@always_zeroes = SIM_create_object("set-memory", "zeroes", [["value", 0]])

simics>@conf.board.mb.cpu0.cpu_msr[0][0].default_target = [always_zeroes, 0, 0, None]

第一行实例化了“set-memory”类的模型,它是一个简单的设备,总是返回它的值(在这个例子中,值设置为零)并忽略写入。

第二行设置 MSR 地址空间的默认目标,以便所有丢失的访问都转到always_zeroes设备。

请注意,后一个选项不能像真实硬件那样确保缓存为内存的逻辑,但它会帮助您进一步通过。无论哪种方式,Simics 中的功能处理器模型都不会像在硬件中那样实现缓存。

于 2022-03-04T15:52:30.847 回答