所以,我看到了gem5中的一些模拟是如何实现的,更具体地说,我是在看PIMSim (https://github.com/vineodd/PIMSim)。我看到他们为x86架构实现了一些伪指令。我见过这些伪指令只在全系统模式下使用.为此,他们修改了以下文件:
我已经理解了实现自定义伪指令所必需的更改,但我不理解的是它们是什么以及它们是如何使用的。我在这些文件之外找不到任何地方,这个函数被调用。有什么帮助吗?提前感谢!
发布于 2020-08-19 06:39:03
伪操作是从客户内部进行魔术模拟操作的方法,这种技术通常称为来宾工具。
它们可以作为下列两种方式使用/实现:
System.py
包含:
m5ops_base = Param.Addr(如果buildEnv‘’TARGET_ISA‘== 'x86’x86 0,“用于内存映射的m5ops的64 64KiB范围的基。设置为”“禁用”)。其中一些最常用的m5ops是:
m5 exit
:退出模拟器m5 checkpoint
:带一个检查点m5 dumpstats
:转储统计数据m5 resetstats
:去掉统计量,重新开始计数下一个m5 dumpstats
m5 readfile
:读取主机fs.py --script
选项内容的值,对在Linux引导检查点之后运行不同的工作负载非常有用m5ops很有用,因为通常很难确定何时要以其他方式执行上述操作,例如:在Linux完成引导时执行一些操作。例如,要从模拟器中天真地做这件事,你需要事先知道会发生什么。您可能会在检查PC是否匹配某个地址(例如,Linux panic
检查)方面出现麻烦,但这有点困难。
还有一个树内m5工具,您可以交叉编译,并将其放在完整的系统客户机中,以公开来自可执行CLI接口的神奇指令。
但是,您也可以在二进制文件中对它们进行硬编码,以便在需要时获得更精确的结果,例如在X86中进行硬编码。
#define LKMC_M5OPS_CHECKPOINT __asm__ __volatile__ (".word 0x040F; .word 0x0043;" : : "D" (0), "S" (0) :)
#define LKMC_M5OPS_DUMPSTATS __asm__ __volatile__ (".word 0x040F; .word 0x0041;" : : "D" (0), "S" (0) :)
在:https://github.com/cirosantilli/linux-kernel-module-cheat/blob/4f82f79be7b0717c12924f4c9b7c4f46f8f18e2f/lkmc/m5ops.h中有更多的硬代码示例,或者您也可以从主线树中更好、更费力地使用它们,如
更多的信息也可以在:https://cirosantilli.com/linux-kernel-module-cheat/#m5ops上找到。
https://stackoverflow.com/questions/63488050
复制相似问题