为什么 mmap 会失败?
why does mmap fail?
我得到了一个物理地址,特别是 0x000000368d76c0
。我正在尝试 mmap
它进入我的程序。我使用的代码是
void *mmap64;
off_t offset = 0x000000368d76c0;
int memFd = open("/dev/mem", O_RDWR);
if (-1 == memFd)
perror("Error ");
mmap64 = mmap(0, sizeof(uint64_t), PROT_WRITE | PROT_READ, MAP_SHARED, memFd, offset);
if (MAP_FAILED == mmap64) {
perror("Error ");
return -1;
}
出于某种原因,当我 运行 这段代码时,我在 mmap
上失败了。具体来说,它说 Error Invalid argument
。我很确定这是因为 offset
值,但我不知道它有什么问题。
如有任何帮助,我将不胜感激。
根据mmap(2) - Linux manual page,
offset
must be a multiple of the page size as
returned by sysconf(_SC_PAGE_SIZE)
.
当页面大小为4096(x86中使用的页面大小CPU)时,0x000000368d76c0
不是4096的倍数,将被视为无效。
因此,您必须调整偏移量。
我得到了一个物理地址,特别是 0x000000368d76c0
。我正在尝试 mmap
它进入我的程序。我使用的代码是
void *mmap64;
off_t offset = 0x000000368d76c0;
int memFd = open("/dev/mem", O_RDWR);
if (-1 == memFd)
perror("Error ");
mmap64 = mmap(0, sizeof(uint64_t), PROT_WRITE | PROT_READ, MAP_SHARED, memFd, offset);
if (MAP_FAILED == mmap64) {
perror("Error ");
return -1;
}
出于某种原因,当我 运行 这段代码时,我在 mmap
上失败了。具体来说,它说 Error Invalid argument
。我很确定这是因为 offset
值,但我不知道它有什么问题。
如有任何帮助,我将不胜感激。
根据mmap(2) - Linux manual page,
offset
must be a multiple of the page size as returned bysysconf(_SC_PAGE_SIZE)
.
当页面大小为4096(x86中使用的页面大小CPU)时,0x000000368d76c0
不是4096的倍数,将被视为无效。
因此,您必须调整偏移量。