如何使用mmap()映射物理内存

5

我正在尝试访问物理内存地址0x30000000,并且我正在使用mmap()来完成此操作。当我将此地址映射到虚拟地址指针时,我无法从内存中读取正确的值。当我使用调试器(TI Code Composer Studio w/ JTAG)查看内存时,我能够看到存储在内存中的值,但在我的代码中却没有得到相同的值? 我是否正确地使用了mmap()

off_t          dev_base = 0x30000000;
size_t         ldev = 0x3FFFFFF;
int offset = 0x00;


memfd = open("/dev/mem", O_RDWR | O_SYNC);
mapped_base = (int*)mmap(0, ldev, PROT_READ|PROT_WRITE, MAP_SHARED, memfd, dev_base);

if (mapped_base == MAP_FAILED)
{
    errx(1, "mmap failure");
}

printf("mapped_base = %08p\n", mapped_base);


printf("The value at address [%08p] = %08p\n", offset + ((int)mapped_base), mapped_base[offset/4]);

munmap(mapped_base, ldev);
close(memfd);

这只是导致mmap()失败的原因。 - whh4000
可能是从用户空间访问物理地址的重复问题。 - Ciro Santilli OurBigBook.com
请查看以下网址中提到的CONFIG_STRICT_DEVMEMnopat:https://dev59.com/-mct5IYBdhLWcg3wgNnR#45127890 - Ciro Santilli OurBigBook.com
1个回答

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接