Linux 在访问 Xilinx ARM SoC 上的 io 内存时冻结

Linux 在访问 Xilinx ARM SoC 上的 io 内存时冻结

我正在尝试读取 FPGA 内存Xilinx Zynq 板(zc702) 作为将 RTEMS 驱动程序移植到 Linux 的一部分。我正在使用开发内存2mmap_测试我使用 Yocto 交叉编译器为开发板交叉编译的程序。该板有 1 GB 普通内存。这意味着 0x0 到 0x40000000 之间的任何读取都会返回有效内存。然而,问题是,当从 0x7AA00000 读取时,内核立即崩溃,甚至没有将内核恐慌消息打印到终端(带有 minicom 和 ssh 的串行端口)。我什至编写了小样本内核模块来从该地址读取并使用 kprint,但它会导致相同的崩溃。由于该驱动程序与 RTEMS 配合使用,因此物理内存地址已被验证是正确的。

必须采取哪些步骤才能从 FPGA 内存/寄存器中读取数据而不致 Linux 崩溃?

答案1

我终于知道为什么总是崩溃了。这是两个因素的结合(就像棘手问题的情况一样)。

  1. 通过它访问内存时/dev/mem必须与页面对齐
  2. 访问FPGA内存时,必须先加载比特流

最初,我一直在加载 FPGA 比特流(使用cat stream.bit > /dev/xdevcfg),然后尝试通过直接取消引用物理地址(无映射)来访问寄存器。后来,我考虑/dev/mem使用 devmem2 进行阅读,但没有加载比特流。两者都导致了类似的错误,程序崩溃和内核冻结,花了一段时间才发现有两个错误。

相关内容