我正在尝试读取Xilinx Zynq板 (zc702)上的FPGA内存,作为将RTEMS驱动程序移植到Linux的一部分。我使用的devmem2和mmap_测试程序,我交叉编译为董事会使用Yocto交叉编译器。该板有1GB的正常内存。这意味着0x0和0x40000000之间的任何读取都会返回有效内存。然而,问题是,当从0x7AA00000读取时,内核会立即崩溃,甚至不会将内核恐慌消息打印到终端(带有minicom和ssh的串口)。我甚至编写了一些小的示例内核模块,以便从这个地址读取并使用kprint,但是它会导致同样的崩溃。由于驱动程序与RTEMS一起工作,物理内存地址已被证实是正确的。
为了能够在没有Linux崩溃的情况下从FPGA内存/寄存器中读取数据,需要采取哪些步骤?
发布于 2018-01-12 07:30:31
我终于明白了为什么它总是崩溃。这是两个因素的结合(就像棘手的问题一样)。
/dev/mem访问内存时,必须与页面对齐。最初,我加载了FPGA比特流(使用cat stream.bit > /dev/xdevcfg),然后尝试使用直接去引用物理地址(没有映射)访问寄存器。稍后,我查看了使用/dev/mem读取devmem2,但没有加载比特流。两者都导致了类似的错误,程序崩溃和内核冻结,并且花了一段时间才发现有两个错误。
https://unix.stackexchange.com/questions/416003
复制相似问题