引导 gem5 X86 Ubuntu 完整系统模拟

2024-02-29

我需要在 gem5 上运行相对较新版本的 x86 磁盘映像。从...开始本指南 http://www.lowepower.com/jason/creating-disk-images-for-gem5.html我使用了带有 Kernel v3.2.1 的 Ubuntu 12.04 磁盘映像,因为该组合已为其他人使用。

过了一段时间,模拟器就会挂起,请分享有关原因和可能的解决方案的任何想法。谢谢你!

您可能会在下面的 m5term/telnet 上找到输出。之后就是准备磁盘镜像和内核以供参考的过程。

gem5的终端最后一部分(m5term/telnet):

# The full terminal output is here:
# https://gist.github.com/agyaglikci/018533c8d2ff2a9e86c9144d5f4a9224#file-ubuntu12-04-kernel3-2-1-gem5-terminal

Freeing unused kernel memory: 348k freed
Mount failed for selinuxfs on /sys/fs/selinux:  No such file or directory
init: ureadahead main process (997) terminated with status 5
mknod: extra operand '64'
Try 'mknod --help' for more information.
mknod: extra operand '64'
Try 'mknod --help' for more information.
mknod: extra operand '64'
Try 'mknod --help' for more information.
mknod: extra operand '64'
Try 'mknod --help' for more information.
mknod: extra operand '64'
Try 'mknod --help' for more information.
mknod: extra operand '64'
Try 'mknod --help' for more information.
mknod: extra operand '64'
Try 'mknod --help' for more information.
mknod: extra operand '64'
Try 'mknod --help' for more information.
mknod: extra operand '64'
Try 'mknod --help' for more information.
mknod: extra operand '64'
Try 'mknod --help' for more information.

以下是准备磁盘映像的完整过程:

cd ${M5_PATH}
# Download and mount the disk image 
wget http://cdimage.ubuntu.com/ubuntu-base/releases/12.04/release/ubuntu-base-12.04.4-core-amd64.tar.gz
sudo util/gem5img.py init disks/ubuntu-12.04.img 4096
mkdir mnt
sudo util/gem5img.py mount disks/ubuntu-12.04.img mnt
sudo tar xzvf ubuntu-base-12.04.4-core-amd64.tar.gz -C mnt
sudo cp /etc/resolv.conf mnt/etc/

# Nano is used to paste the contents in http://www.lowepower.com/jason/creating-disk-images-for-gem5.html
sudo nano mnt/etc/init/tty-gem5.conf 
sudo nano mnt/etc/hosts
sudo nano mnt/etc/fstab

# Copy m5 Binary
cd util/m5
make clean
make all -f Makefile.x86
sudo cp m5 ${M5_PATH}/mnt/sbin/

cd ${M5_PATH}
sudo umount mnt
sudo losetup -d /dev/loop0

内核编译步骤:

我下载了v3.2.1,然后将v2.6.28.4的配置文件复制为v3.2.1的.config文件。击中后make vmlinux,对每个问题按 Enter 键以获得默认值。

cd ~
git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git
cd linux-stable
git checkout v3.2.1
wget http://www.m5sim.org/dist/current/x86/config-x86.tar.bz2
tar jxvf config-x86.tar.bz2
cp configs/linux-2.6.28.4 .config
make clean
make vmlinux -j 4 
# Here compiler asks a lot of configurations, I just hit enter each time to pass the default values.
cp vmlinux ${M5_PATH}/binaries/vmlinux-amd64-v3.2.1

最后,命令是这样的:

build/X86/gem5.opt -d AMD64 configs/example/fs.py --disk-image ${M5_PATH}/disks/ubuntu-12.04.img --kernel ${M5_PATH}/binaries/vmlinux-amd64-3.2.1

任何有关错误消息或冻结原因/解决方案等的评论都会非常有帮助。提前致谢!


启动 FS 模式的最佳解决方案如下,但恕我直言,Ubuntu 不是一个好的选择,因为 systemd 会大大减慢启动阶段:

使用编译linux内核this http://www.lowepower.com/jason/files/config配置文件。内核 4.8.13 应该可以工作(来源:杰森·洛·鲍尔 http://www.lowepower.com/jason/setting-up-gem5-full-system.html,gem5的审稿人之一)。

现在你想要的是系统的镜像。最好的选择是这个图片 http://www.cs.utexas.edu/~parsec_m5/x86root-parsec.img.bz2基于gentoo。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

引导 gem5 X86 Ubuntu 完整系统模拟 的相关文章

  • Kubernetes Node 中的内核内存使用率较高

    我非常绝望地寻找解决方案 我正在 AWS 上运行 Kubernetes 集群 v1 16 7 节点规格为 它是一个亚马逊 EC2 t3 medium实例与4GB RAM和 AMI k8s 1 11 debian stretch amd64
  • 无法将主机添加到已知主机列表,如何调试[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 尝试使用 v 进行 ssh 输出是 ccc es chen ssh cccadmin ccchost A X v OpenSSH 5 9p
  • 加载linux内核的基地址

    我对内核如何加载到内存有一些疑问 检查后 proc kallsyms我能够找到内核中各种符号的地址 cat proc kallsyms head n 10 00000000 t vectors start 80008240 T asm do
  • 为什么函数 printk() 不使用逗号来分隔参数?

    一个例子printk call printk KERN INFO Log message n 也许这个问题更多地是关于C的 因为我之前从未见过C中的函数可以不用逗号分隔参数 这是如何运作的 编译器如何处理这些信息 由于日志级别是一个整数 而
  • fork() & 内存分配行为

    我在一个禁用交换和禁用内存过量使用的系统上工作 假设我的进程当前消耗 100 MB 内存 而系统可用内存小于 100 MB 如果我执行 fork 它会失败 因为内核也尝试为子进程分配 100 MB 的空间吗 我读过 Linux 在分叉时使用
  • Linux 内核:为什么调用 kstrtol 会崩溃?

    我正在学习内核编程 并且对 kstrtol 进行了简单的调用 我用它来将字符串转换为数字 然而 每次我编译这个模块并使用 insmod 将其放入内核时 我都会收到 BUG 无法处理 f862b026 处的内核分页请求 然后是寄存器和堆栈转储
  • syn队列和accept队列的混淆

    在阅读TCP源码时 我发现一个困惑的事情 我知道 TCP 在 3 次握手中有两个队列 第一个队列存储服务器收到的连接SYN并发回ACK SYN 我们称之为同步队列 第二个队列存储3WHS成功并建立连接的连接 我们称之为接受队列 但在阅读代码
  • 分配内存空间的宏

    我需要让一个汇编程序员来计算帕斯卡三角形 https en wikipedia org wiki Pascal 27s triangle 这样帕斯卡三角形的每一行都与其他行分开存储在内存中 我想做一个 但我不知道如何使用宏在汇编中做到这一点
  • 如何使用 se.py 在 gem5 系统调用模拟模式下编译和运行可执行文件?

    有许多可能的错误和解决方法分散在不同的地方 任何人都可以提供至少一种详细的工作设置 以及确切的 gem5 和编译器版本 希望在 Ubuntu 上吗 最小的 Ubuntu 设置 首先要注意一件事 动态链接的可执行文件首先运行动态加载器 这意味
  • 无法使用 Node npm 安装任何包

    我正在尝试通过 npm 安装一些节点包 但它不会安装 我已经尝试安装 卸载 更新节点 但似乎没有任何效果 我正在使用 ubuntu 12 04 以下是我尝试安装软件包的方式 npm install underscore npm http G
  • x86-64 上这个语句有什么问题?

    该函数的目的是获取堆栈的起始地址 unsigned long find start void asm movq rsp eax 当我编译它时 出现错误 Error suffix or operands invalid for movq mo
  • 使用Linux虚拟鼠标驱动

    我正在尝试实施一个虚拟鼠标驱动程序根据基本 Linux 设备驱动程序书 有一个用户空间应用程序 它生成坐标以及内核模块 See 虚拟鼠标驱动程序和用户空间应用程序代码 http www embeddedlinux org cn Essent
  • 如何获取uinput创建的设备的名称(路径)

    我已经成功设置了一个小程序来创建uinput questions tagged uinput我计划使用它来自动测试接收键盘输入事件的应用程序 我已关注both http thiemonge org getting started with
  • 为什么 Solaris 汇编器生成的机器代码与 GNU 汇编器在这里不同?

    我为 amd64 编写了这个小汇编文件 对于这个问题来说 代码的作用并不重要 globl fib fib mov edi ecx xor eax eax jrcxz 1f lea 1 rax ebx 0 add rbx rax xchg r
  • 是否可以将 CFLAGS 设置为 Linux 内核模块 Makefile?

    例如 常见设备模块的Makefile obj m jc o default MAKE C lib modules shell uname r build M shell pwd modules clean MAKE C lib module
  • 尝试使用 x86 程序集 GNU GAS 在数组索引处赋值时出现错误

    我在用x86GNU 与 GCC 的程序集 并尝试实现相当于以下内容的程序集c c int x 10 x 0 5 但是 当我尝试运行 使用命令 a out 我的汇编代码如下 第一次编译后gcc filename s 错误Segmentatio
  • 从 NASM 调用 C 函数 _printf 会导致分段错误

    我一直在尝试使用 NASM 在 Mac OS 和 Windows 上学习 64 位汇编 我的代码是 extern printf section data msg db Hello World 10 0 section text global
  • 阴影空间示例

    EDIT 我接受了下面的答案 并添加了我自己的代码的最终修订版 希望它向人们展示影子空间分配的实际示例 而不是更多的文字 编辑 2 我还设法在 YouTube 视频 所有内容 的注释中找到了一个调用约定 PDF 的链接 其中有一些关于 Li
  • Linux 中热插拔设备时检测设备是否存在

    我正在运行 SPIcode http lxr free electrons com source drivers spi spi omap2 mcspi c在熊猫板上 我想知道其中的哪个功能code http lxr free electr
  • 这个反斜杠在这段汇编代码中起什么作用?

    我不确定这些推线有什么区别 修剪下来来自 Linux 的 x86 entry calling h https github com torvalds linux blob 241e39004581475b2802cd63c111fec43b

随机推荐