未处理信号中的代码编号意味着什么?

未处理信号中的代码编号意味着什么?

我在 RISC-V Ariane CVA6 处理器上运行自定义 GNU/Linux 发行版,该处理器在 FPGA 上的自定义设计上运行。

当我尝试从内存映射 I/O 寄存器读取数据时,出现总线错误。我已经验证映射和地址是正确的。

当我运行时,dmesg我看到弹出未处理的信号 7 代码 0x2 错误。我查了一下未处理的信号号这里但我找不到任何对代码 0x2 的引用。有任何想法吗?

答案1

该代码的含义是特定于体系结构的。对于 RISC-V,发出此消息的代码位于do_traparch/riscv/kernel/traps.c。信号 7 是SIGBUS(https://elixir.bootlin.com/linux/v5.15/source/include/uapi/asm-generic/signal.h#L18)(一些较旧的架构具有不同的信号编号)。对于 SIGBUS,代码是BUS_xxx常量。 2 是BUS_ADRERR:“不存在的物理地址”,由mm_fault_error

所以你的映射有问题。也许您错误地填充了 MMU,或者您没有为正确的上下文填充 MMU 表。这远远超出了 Unix.SE 的专业知识。如果问题是 Linux 内核中的 MMU 管理,您可以在 Stack Overflow 上找到帮助如果你发布完整的代码。如果问题是在 RISC-V 上配置外设,那么 RISC-V 专家的论坛可能是更好的地方。

相关内容