映射/ dev / mem时出现分段错误

时间:2018-11-12 16:47:38

标签: linux arm embedded embedded-linux mmap

我正在尝试在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;
}

为什么我不能读取内存?

1 个答案:

答案 0 :(得分:2)

我认为问题是传递给打开的标志 它应该看起来像这样

<div id="app"> <textarea cols="10" rows="10" disabled>{{ qComputed }}</textarea> <input type="text" v-model="editText"> </div> new Vue({ el: "#app", data: { q: "My name is $John Doe$ from NYC", editText: null, disabled: true }, computed: { qComputed(){ let splittedText = this.q.split('$') splittedText[1] = this.editText return splittedText.join` ` } } })