为什么地址读取在第二次读取时不返回任何内容? 使用 mmap

问题描述

我正在使用 buildroot 作为 linux 发行版在 RPi3 上构建程序,我需要写入给定的物理地址。我读过最好的方法是首先使用 mmap,然后获取您通常写入的虚拟地址。就我而言,测试程序必须在给定地址写入一个字符。

奇怪的是,当我从映射后的虚拟地址读取值时,第一时间有效,但第二时间,相同的地址指向什么。这是我的程序的一个片段:

    ...

    int mem_fd = open("/dev/mem",O_RDWR | O_SYNC);
    if (0 > mem_fd) {
        fprintf(stderr,"Could not open memory!\n");
        return -1;
    }

    map_base = mmap(NULL,page_size,PROT_READ | PROT_WRITE,MAP_SHARED,mem_fd,ATTEST_START & ~map_mask);
    map_target = map_base + (ATTEST_START & map_mask);

    *((unsigned char *) map_target) = (char) ((rand() % 25) + 65);
    printf("After assignment %p,val is %c\n",map_target,*((unsigned char *) map_target)); // here I can read the value
    printf("After assignment %p,*((unsigned char *) map_target)); // here it is empty!!!

    ...

ATTEST_START注册的物理地址(在 OP-TEE 可信操作系统中使用 register_phys_mem)。如果您能告诉我为什么第二次阅读不起作用以及我可以采取哪些不同的方式使其起作用,我将不胜感激。谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)