我正在尝试启动 Linux 内核 2.6.22.9 的 gem5 FullSystem (FS) 模拟(因为二进制文件由 gem5 提供)以及 TimingSimpleCPU 上的自定义 Linux 内核 3.4.112。虽然它们都在单核 x86 FS 模拟机中工作,但它们无法在多核模拟机中启动。
我什至不知道如何开始调试。我已经尝试连接到 gem5 TimingSimpleCPU 为端口 7000、7001 等上的每个处理器提供的远程 gdb 端口。我看到在双核启动时,在某个点之后,核心 0 卡在 schedule() 调用上,而核心 1 始终保持空闲状态()并且从不调度()任何东西,直到核心 0 也卡在 schedule() 调用上.
调试 gem5 及其与 Linux 内核的兼容性以在 TimingSimpleCPU X86 arch 上启动多核完整系统的正确方法是什么?我认为可能存在与自旋锁支持或 APIC 相关的问题。
最佳答案
X86 2 核心 Linux 内核 5.1、TimingSimpleCPU、gem5 08c79a194d1a3430801c04f37d13216cc9ec1da3 恰好适用于此设置:https://github.com/cirosantilli/linux-kernel-module-cheat/tree/6aa2f783a8a18589ae66e85f781f86b08abb3397#gem5-buildroot-setup-getting-started启动完成,cat/proc/cpuinfo
显示 2 个 CPU。
最后的运行命令是:
./run --cpus 2 --emulator gem5 -- --cpu-type TimingSimpleCPU
该存储库中指定了所有内容,包括如何构建 gem5、Linux 内核以及如何运行它们。
然后,只需轻按一下开关,如果您好奇的话,同样适用于 aarch64:
./run --arch aarch64 --cpus 2 --emulator gem5 -- --cpu-type TimingSimpleCPU
然后我根据 OP 的评论添加了选项 --caches --l2cache
,现在我重现了失败,我没有解决方案:
./run --cpus 2 --emulator gem5 -- --cpu-type TimingSimpleCPU --caches --l2cache
开机挂起,最后的终端信息是:
pci 0000:00:04.0: legacy IDE quirk: reg 0x1c: [io 0x0376]
在上方一点我们可以看到可疑消息:
[Firmware Bug]: CPU1: APIC id mismatch. Firmware: 1 APIC: 0
但是,带有额外选项的 ARM 启动仍然有效:
./run --arch aarch64 --cpus 2 --emulator gem5 -- --cpu-type TimingSimpleCPU --caches --l2cache
不过,我后来尝试了更多的缓存选项:
/run --arch aarch64 --emulator gem5 --cpu 2 --run-id 2 -- --cpu-type=HPI --caches --l2cache --l1d_size=64kB --l1i_size=64kB --l2_size=256kB
它也失败了,如在:https://github.com/cirosantilli/linux-kernel-module-cheat/tree/99180e6616331b7385b09147f11f67962f9facc4#gem5-arm-multicore-hpi-boot-fails 中所解释的那样...
如何调试此类问题以使其正常运行是一个极其困难的问题,需要对 Linux 内核 + X86 ISA + gem5 有足够的了解,其中 enough 是未定义的。这个学习过程与启用正确的日志选项/关注代码的正确部分密切相关。该设置恰好出于“运气”。
关于linux - 用于 FS 在 x86 SMP 中启动的工作 linux 内核 + gem5 配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56642695/