我正在尝试启动Linux内核2.6.22.9的gem5 FullSystem(FS)模拟(因为二进制文件由gem5提供),并在TimemingSimpleCPU上使用自定义Linux内核3.4.112。虽然这两种方法都在单核 x86 FS 模拟计算机中工作,但它们无法在多核模拟计算机中启动。
我甚至不知道如何开始调试。我尝试连接到 gem5 TimingSimpleCPU 为端口 7000、7001 等上的每个处理器提供的远程 gdb 端口。我看到在双核启动时,在一点之后,核心 0 卡在 schedule() 调用上,核心 1 始终保持在 idle() 上并且从不调度 () 任何东西,直到核心 0 也卡在 schedule() 调用上。
调试gem5及其与Linux内核的兼容性以便在TimingSimpleCPU X86架构上启动多核完整系统的正确方法是什么?我认为可能存在与自旋锁支持或 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,其中没有定义足够多的问题。此学习过程与启用正确的日志选项/专注于代码的正确部分密切相关。这种设置恰好是出于"运气"而起作用。