【发布时间】:2018-08-13 17:50:09
【问题描述】:
我正在开发一个自定义版本的 Rocket Chip,其中包含一些我希望 Linux 正确处理的额外指令。尽管使用这些指令的裸机程序运行良好,但 Linux 使相同的基准测试崩溃并显示“非法指令”消息。
有谁知道 Linux 的哪个软件元素(加载程序、反汇编程序、其他东西)负责检测非法指令?
我的目标是修改那个软件,让 Linux 不再抱怨我的指令。如果有人知道抑制这种错误的更简单方法,那也将非常有用。
【问题讨论】:
-
这些指令是否被处理器视为特权?如果是这样,问题可能不在于 Linux,而在于您在操作系统中运行应用程序时是在用户模式而不是内核模式下运行。
-
处理器生成陷阱。操作系统会处理陷阱并通常会杀死您的应用程序。 ARM 具有异常级别 (EL)。用户土地为 EL0。 EL1 及以上的指令你必须有特权。
-
我刚刚发现我应该设置某个 CSR (
mstatus) 的位 0x8000 以启用自定义指令的执行。确实是处理器产生了非法指令陷阱。现在一切正常。感谢@merlin2011 和@jww 的帮助。
标签: linux riscv binutils rocket-chip