为什么mmap会失败?

时间:2016-08-19 23:53:41

标签: c linux-kernel linux-device-driver mmap

我给了一个实际地址,特别是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值,但我不知道它有什么问题。

我很感激任何帮助。

1 个答案:

答案 0 :(得分:3)

根据mmap(2) - Linux manual page

  

offset必须是页面大小的倍数   由sysconf(_SC_PAGE_SIZE)返回。

当页面大小为4096(x86 CPU中使用的页面大小)时,0x000000368d76c0不是4096的倍数,将被视为无效。

因此,您必须调整偏移量。