我尝试使用gem5 FullSystem (FS)模拟Linux kernel 2.6.22.9 (因为该二进制文件是由gem5提供的),并在TimingSimpleCPU上使用定制的Linux kernel 3.4.112。虽然这两种方法都可以在单核x86 FS模拟计算机上运行,但它们无法在多核模拟计算机上启动。
我甚至不知道如何开始调试。我尝试连接到gem5 TimingSimpleCPU为端口7000、7001等上的每个处理器提供的远程gdb端口。我看到在双核启动时,在某一时刻之后,核0被阻塞在schedule()调用上,而核1总是停留在idle()上,并且从不调度()任何东西,直到核0也被阻塞在schedule()调用上。
在TimingSimpleCPU X86上调试gem5及其与Linux内核的兼容性以实现多核全系统启动的正确方法是什么?我在想,可能会有与自旋锁支持或APIC相关的问题。
发布于 2019-06-18 15:58:45
Linux2core Linux kernel 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,其中足够多是未定义的。此学习过程与启用正确的日志选项/关注代码的正确部分紧密相关。这个设置只是碰巧是出于“运气”。
https://stackoverflow.com/questions/56642695
复制相似问题