Linux内核:如何使用/dev/mem从用户空间遍历mem_map中的物理页面?

3

我需要通过/dev/mem在用户空间遍历mem_map中包含的所有物理页面。不能使用mmap。唯一的希望是使用open/read调用。我知道内核中mem_map的物理地址。以下是用户空间中的代码:

 /* open /dev/mem file*/
 if((fd = open("/dev/mem", O_RDONLY)) == -1) {
    printf("/dev/mem could not be opened.\n");
perror("open");
    exit(1);
  } else {
  printf("/dev/mem opened.\n");

 /* seek to the mem_map at mem_map_phy_addr */
 if(lseek(fd, mem_map_phy_addr, SEEK_SET) == -1) {
   perror("lseek");
 }
 else {
   printf("lseek ok\n");
 }

现在的问题是如何开始遍历mem_map?哪个用户空间包含文件有“struct page”?
谢谢。

用户空间包含文件没有 struct page。您必须使用内核头文件。 - Dietrich Epp
你能具体说明一下吗?我该如何使用内核头文件?将头文件复制到我的用户程序中进行编译? - user899159
1个回答

0

首先,您需要获取'mem_map'的偏移量,即该符号的物理地址。由于'mem_map'已经被导出,因此您可以编写一个小内核模块来获取该地址。

然后,您可以使用lseek()函数跳转到上面获取的偏移量(即地址),并从那里开始读取'mem_map'。


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