Gem 5 IOError: 找不到系统文件的路径。完整系统 X86 模拟设置

par*_*isa 3 gem5

我已经安装了 Gem5。我正在尝试进行完整的系统模拟。我添加了M5_PATH

echo "export M5_PATH==/home/sam/security/gem5/full/" >> ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

我将所有系统映像和配置文件放在以下目录下:

  :~/security/gem5/full$ ls
binaries  configs  config-x86.tar.bz2  disks  x86-system.tar.bz2  x86-system.tar.bz2.1
Run Code Online (Sandbox Code Playgroud)

我将 SysPaths.py 文件中的路径更改为以下内容:

                paths = [ '/dist/m5/system', 'full' ]
Run Code Online (Sandbox Code Playgroud)

并在 Benchmark.py 中更新了以下行

            return env.get('LINUX_IMAGE', disk('linux-x86.img'))
Run Code Online (Sandbox Code Playgroud)

Gem5 已成功编译,我正在运行以下命令:

 ./build/X86/gem5.opt configs/example/fs.py  --disk-image=/home/sam/security/gem5/full/disks/linux-x86.img 
Run Code Online (Sandbox Code Playgroud)

但我收到一个错误,它找不到系统文件的路径。

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "build/X86/python/m5/main.py", line 438, in main
    exec(filecode, scope)
  File "configs/example/fs.py", line 335, in <module>
    test_sys = build_test_system(np)
  File "configs/example/fs.py", line 93, in build_test_system
    cmdline=cmdline)
  File "/home/sam/security/gem5/configs/common/FSConfig.py", line 614, in makeLinuxX86System
    makeX86System(mem_mode, numCPUs, mdesc, self, Ruby)
  File "/home/sam/security/gem5/configs/common/FSConfig.py", line 539, in makeX86System
    disk0.childImage(mdesc.disk())
  File "/home/sam/security/gem5/configs/common/Benchmarks.py", line 59, in disk
    return disk(self.diskname)
  File "/home/sam/security/gem5/configs/common/SysPaths.py", line 63, in __call__
    raise IOError("Can't find a path to system files.")
IOError: Can't find a path to system files.
Run Code Online (Sandbox Code Playgroud)

Cir*_*lli 5

更新2020-01

截至https://gem5-review.googlesource.com/c/public/gem5/+/23672/7审查的 82f6d6e90f36e400db1f38eef5fe17430313458e ,CLI 疯狂程度已大大减少:

如果您错过任何这些文件,M5_PATH就会被使用。

请注意,就像搜索算法一样PATH,没有的路径/只会在 下搜索M5_PATH,因此如果您想指向当前目录中的文件,您需要添加./如下内容:

fs.py --kernel ./vmlinux
Run Code Online (Sandbox Code Playgroud)

另请参阅:为什么在可执行文件或脚本名称之前需要 ./(点斜杠)才能在 bash 中运行它?

旧答案

gem5 对某些路径名很挑剔,但您不需要修补它来实现像样的图像设置。

例如,使用 gem5 e2656006df442a995bf80ee03fa9700d6ec14537的工作设置基本上运行:

M5_PATH=/full/path/to/system \
  build/X86/gem5.opt \
  configs/example/fs.py \
  --disk-image /any/path/to/rootfs.ext2 \
  --kernel /any/path/to/vmlinux
Run Code Online (Sandbox Code Playgroud)

/full/path/to/system包含:

./disks/linux-bigswap2.img
./binaries/x86_64-vmlinux-2.6.22.9
Run Code Online (Sandbox Code Playgroud)

这两个文件都是我从这里生成的虚拟文件:

dd if=/dev/zero of=./binaries/linux-bigswap2.img count=1 bs=16k
touch disks/x86_64-vmlinux-2.6.22.9
Run Code Online (Sandbox Code Playgroud)

--disk-image是的,对于 gem5 固执己见的图像搜索来说,这是一个可怕的解决方法...有人真的应该修补 gem5,以便如果您自己通过,就不会查找这些图像--kernel...

与往常一样,尝试使用打印和 PDB 进行调试:然后应该很容易找出为什么某些东西不适合您。