我正试图在我的Zedboard SoC上运行的linux上从我的FPGA中获取内存。我可以在命令行上使用devmem正确地读取内容,但是当试图通过C读取内容时,会出现分段错误。
下面显示的代码在试图打印内存内容时抛出分段错误。我很小心地使用页面大小的倍数来避免出现以下问题:

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>

typedef unsigned int u32;

int main()
{
    int page_size = sysconf(_SC_PAGESIZE);
    printf("PAGESIZE = %d\n\r", page_size);

    off_t bram_pbase = 0x42000000; // physical base address

    u32 *bram32_vptr;

    int fd = open("/dev/mem", O_SYNC);
    printf("FD opened\n\r");

    bram32_vptr = (u32 *)mmap(NULL, 2*page_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, bram_pbase);

    printf("%d \n\r", bram32_vptr[0]);

    close(fd);
    return 0;
}

为什么我不能读懂记忆?

最佳答案

我觉得问题是旗子被传开了
应该是这样的
fd = open("/dev/mem", O_RDWR|O_SYNC);

关于linux - 映射/dev/mem时出现段错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53266622/

10-12 04:16