Gem 5 IOError: Can't find a path to system files. Full System X86 simulation setup
Gem 5 IOError: Can't find a path to system files. Full System X86 simulation setup
我已经安装了 Gem5。
我正在尝试进行完整的系统模拟。
我添加了 M5_PATH
echo "export M5_PATH==/home/sam/security/gem5/full/" >> ~/.bashrc
我把所有的系统映像和配置文件放在以下目录下:
:~/security/gem5/full$ ls
binaries configs config-x86.tar.bz2 disks x86-system.tar.bz2 x86-system.tar.bz2.1
我将 SysPaths.py 文件中的路径更改为以下内容:
paths = [ '/dist/m5/system', 'full' ]
并在 Benchmark.py
中更新了以下行
return env.get('LINUX_IMAGE', disk('linux-x86.img'))
Gem5 编译成功,我运行如下:
./build/X86/gem5.opt configs/example/fs.py --disk-image=/home/sam/security/gem5/full/disks/linux-x86.img
但是我得到一个错误,它找不到系统文件的路径。
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.
更新 2020-01
截至 82f6d6e90f36e400db1f38eef5fe17430313458e 在 https://gem5-review.googlesource.com/c/public/gem5/+/23672/7 的评论,CLI 疯狂程度已大大减少:
M5_PATH
在 X86 上不再需要,如果您明确指向所有必需的文件:
fs.py --kernel path/to/vmlinux --disk-image path/to/rootfs.ext2
第二个名为linux-bigswap2.img
和x86_64-vmlinux-2.6.22.9
的磁盘不再需要,您可以使用多个--disk-image
选项随意传递多个磁盘,参见:How to attach multiple disk images in a simulation with gem5 fs.py?
在ARM上,M5_PATH
也可以免除,但是还需要给bootloader指向:
fs.py --bootloader ./system/arm/bootloader/arm64/boot.arm64
如果您遗漏了这些文件中的任何一个,将使用 M5_PATH
。
注意和PATH
搜索算法一样,没有/
的路径只会在M5_PATH
下搜索,所以如果你想指向当前目录下的文件你需要添加 ./
如:
fs.py --kernel ./vmlinux
另请参阅:Why do you need ./ (dot-slash) before executable or script name to run it in bash?
旧答案
gem5 对一些路径名很挑剔,但你不需要修补它来获得像样的图像设置。
例如,this working setup 与 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
和/full/path/to/system
包含:
./disks/linux-bigswap2.img
./binaries/x86_64-vmlinux-2.6.22.9
这两个文件都是我用 from here 生成的虚拟文件:
dd if=/dev/zero of=./binaries/linux-bigswap2.img count=1 bs=16k
touch disks/x86_64-vmlinux-2.6.22.9
是的,对于 gem5 固执己见的图像搜索,这是一个可怕的解决方法...如果您自己通过 --disk-image
和 --kernel
,有人应该真正修补 gem5 以不寻找这些图像...
与往常一样,尝试使用打印和 PDB 对其进行调试:然后应该很容易找出某些内容对您不起作用的原因。
我已经安装了 Gem5。 我正在尝试进行完整的系统模拟。 我添加了 M5_PATH
echo "export M5_PATH==/home/sam/security/gem5/full/" >> ~/.bashrc
我把所有的系统映像和配置文件放在以下目录下:
:~/security/gem5/full$ ls
binaries configs config-x86.tar.bz2 disks x86-system.tar.bz2 x86-system.tar.bz2.1
我将 SysPaths.py 文件中的路径更改为以下内容:
paths = [ '/dist/m5/system', 'full' ]
并在 Benchmark.py
中更新了以下行 return env.get('LINUX_IMAGE', disk('linux-x86.img'))
Gem5 编译成功,我运行如下:
./build/X86/gem5.opt configs/example/fs.py --disk-image=/home/sam/security/gem5/full/disks/linux-x86.img
但是我得到一个错误,它找不到系统文件的路径。
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.
更新 2020-01
截至 82f6d6e90f36e400db1f38eef5fe17430313458e 在 https://gem5-review.googlesource.com/c/public/gem5/+/23672/7 的评论,CLI 疯狂程度已大大减少:
M5_PATH
在 X86 上不再需要,如果您明确指向所有必需的文件:fs.py --kernel path/to/vmlinux --disk-image path/to/rootfs.ext2
第二个名为
linux-bigswap2.img
和x86_64-vmlinux-2.6.22.9
的磁盘不再需要,您可以使用多个--disk-image
选项随意传递多个磁盘,参见:How to attach multiple disk images in a simulation with gem5 fs.py?在ARM上,
M5_PATH
也可以免除,但是还需要给bootloader指向:fs.py --bootloader ./system/arm/bootloader/arm64/boot.arm64
如果您遗漏了这些文件中的任何一个,将使用 M5_PATH
。
注意和PATH
搜索算法一样,没有/
的路径只会在M5_PATH
下搜索,所以如果你想指向当前目录下的文件你需要添加 ./
如:
fs.py --kernel ./vmlinux
另请参阅:Why do you need ./ (dot-slash) before executable or script name to run it in bash?
旧答案
gem5 对一些路径名很挑剔,但你不需要修补它来获得像样的图像设置。
例如,this working setup 与 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
和/full/path/to/system
包含:
./disks/linux-bigswap2.img
./binaries/x86_64-vmlinux-2.6.22.9
这两个文件都是我用 from here 生成的虚拟文件:
dd if=/dev/zero of=./binaries/linux-bigswap2.img count=1 bs=16k
touch disks/x86_64-vmlinux-2.6.22.9
是的,对于 gem5 固执己见的图像搜索,这是一个可怕的解决方法...如果您自己通过 --disk-image
和 --kernel
,有人应该真正修补 gem5 以不寻找这些图像...
与往常一样,尝试使用打印和 PDB 对其进行调试:然后应该很容易找出某些内容对您不起作用的原因。