首页 > 解决方案 > gem5 FS模式下访问pagemap

问题描述

我正在尝试在 gem5 FS 模式下运行使用页面映射的应用程序。但我无法在 gem5 中使用页面映射。它抛出以下错误 -

“断言(页面地图> = 0)失败”

代码行是:

int pagemap = open("/proc/self/pagemap", O_RDONLY);
  assert(pagemap >= 0);

此外,如果我尝试使用 sudo 在 gem5 终端上运行我的应用程序,则会引发错误-

找不到 sudo 命令

如何在 gem5 中使用 sudo ?

标签: gem5

解决方案


这些问题不是 gem5 特定的,而是图像/Linux 特定的,并且可能发生在任何模拟器或真实硬件上。所以我建议你完全从等式中删除 gem5,下次问一个 Linux 或图像特定的问题,准确说明你正在使用什么图像,内核配置,并提供一个重现问题的最小 C 示例:这将大大改善你得到帮助的概率。

我刚刚open("/proc/self/pagemap", O_RDONLY)成功完成了:这个程序和aarch64上的这个fs.py设置,另见这些评论

如果/proc/<pid>/pagemap任何文件都不存在,请执行以下操作:

  • 确保 procfs 安装在/proc. 这通常通过fstab以下类型的条目来完成:

    proc            /proc       proc    defaults    0   0
    

    但是您的初始化脚本也需要使用fstab

    或者,您可以proc手动安装:

     mount -t proc proc proc/
    

    您可能希望确保/sys并且/dev也已安装。

  • grep 内核以查看是否有一些配置控制文件创建。

    在不了解内核的情况下,这些东西通常很容易找到。

    如果我做:

    git grep '"pagemap'
    

    在 v4.18 上找到pagemap可能是创建点的字符串,这导致我找到fs/proc/base.c,其中包含:

    #ifdef CONFIG_PROC_PAGE_MONITOR
        REG("pagemap",    S_IRUSR, proc_pagemap_operations),
    #endif
    

    所以请确保CONFIG_PROC_PAGE_MONITOR已设置。

sudo:大多数嵌入式/模拟器图像没有它,您只需直接以 root 身份登录,默认情况下可以在没有它的情况下执行任何操作。这可以通过#提示符中的常规而不是$.


推荐阅读