我想在RISC-V模拟器(Spike)上运行虚拟内存设置。当我试图模拟嵌入式/实时设备时,我不想要大型页表,因此希望将代码放在非常低的虚拟内存地址中。
我目前使用的链接描述文件.text
位于VMA / LMA 0x80000000
。我想将初始化代码保留在这个(高)物理地址,并确实将剩余的代码也放在高地址,但在我设置系统后,我想跳转到低虚拟内存地址的main(0, 0)
如何构建这样的链接描述文件?我是否将VMA分配给所有符号?这似乎很难管理。
进一步解释 - 我有一个crt.S
文件,它有启动代码,然后将控制转移到C文件--syscalls.c(这提供了一些非常基本的'系统调用'){{1在我正在构建的任何程序中调用_init
的函数(即crt.S和syscalls.c在每种情况下都与'有趣'代码链接。我希望syscalls.c的东西在外面处理VM模式和要在VM中处理的有趣代码。
如果你想看到它所在的代码:https://github.com/mcmenaminadrian/taclebench-riscv-baremetal(riscv branch)