Ошибка сегментации при отображении / dev / mem - PullRequest
0 голосов
/ 12 ноября 2018

Я пытаюсь отобразить память из моей FPGA на linux, работающем на моем Zedboard SoC.Я могу правильно прочитать содержимое, используя devmem в командной строке, но при попытке прочитать его с помощью CI возникает ошибка сегментации.

Приведенный ниже код barebones выдает ошибку сегментации при попыткераспечатайте содержимое памяти.Я стараюсь использовать кратный размер страницы, чтобы избежать проблем:

#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;
}

Почему я не могу прочитать память?

1 Ответ

0 голосов
/ 13 ноября 2018

Мне кажется, проблема в том, что флаги открыты это должно выглядеть так

fd = open("/dev/mem", O_RDWR|O_SYNC);

...