首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qemu在从硬盘启动时被卡住了

Qemu在从硬盘启动时被卡住了
EN

Stack Overflow用户
提问于 2017-05-30 19:00:24
回答 3查看 20.5K关注 0票数 10

我试图使用qemu模拟器加载一个简单的内核,但是,qemu被卡在“从硬盘启动”。

内核的源代码可以在以下链接中找到:https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-828-operating-system-engineering-fall-2012/,在obj/kern/kernel.img目录中的实验室1赋值中。lab1格式tar.gz of lab1pointers1.c。任务是:

第一部分主要介绍了x86汇编语言、QEMU x86仿真器和PC机的power引导过程。第二部分检查我们的6.828内核的引导加载程序,它驻留在实验室树的引导目录中. % cd实验室% make .+ mk obj/kern/kernel.img 。。现在您已经准备好运行QEMU,提供上面创建的obj/kern/kernel.img文件,作为模拟PC的“虚拟硬盘”的内容。这个硬盘映像包含我们的引导加载程序(obj/ boot /boot)和内核(obj/内核)。 %制造qemu

EN

回答 3

Stack Overflow用户

发布于 2017-12-30 12:21:32

eng140,您可以使用32位Linux.我也有同样的问题。在使用了32位Linux之后,这个问题得到了解决.在下面“使用虚拟机”一节中的web https://pdos.csail.mit.edu/6.828/2017/tools.html中,他们建议我们使用32位Linux。

票数 2
EN

Stack Overflow用户

发布于 2020-07-30 22:29:22

这也可能是gcc版本的问题。最近可用的秋季(2018年)对此进行了修正

代码语言:javascript
复制
Author: Jonathan Behrens <fintelia@gmail.com>
Date:   Tue Sep 4 14:10:42 2018 -0400

Tweak kernel.ld linker script so edata and end are set correctly

This change should hopefully resolve issues when compiling with newer versions
of GCC.

commit a56269d4beefc7d0b3672180aa46c654cfb63af4
diff --git a/kern/kernel.ld b/kern/kernel.ld
index 45a0b6a..a219d1d 100644
--- a/kern/kernel.ld
+++ b/kern/kernel.ld
@@ -47,13 +47,13 @@ SECTIONS
                *(.data)
    }
-       PROVIDE(edata = .);
-
        .bss : {
+               PROVIDE(edata = .);
                *(.bss)
+               PROVIDE(end = .);
+               BYTE(0)
        }
-       PROVIDE(end = .);
        /DISCARD/ : {
                *(.eh_frame .note.GNU-stack)
票数 2
EN

Stack Overflow用户

发布于 2017-05-31 02:13:30

eng140,正如pdf - lab1.pdf课程中所解释的,您应该从makefile开始使用make qemu

它使用设置硬盘和将串行端口输出定向到终端所需的选项来执行QEMU。一些文本应该出现在QEMU窗口中:.

您不应该像以前那样用手动过程启动它(qemu-system-x86_64 ..)。此目标在实验室GNUmakefile中实现为

代码语言:javascript
复制
qemu: $(IMAGES) pre-qemu
    $(QEMU) $(QEMUOPTS)

QEMU在大多数平台上都是qemu,在MacOS上是i 386-softmmu。尝试使用32位系统版本的qemu或标准qemu命令.makefile的选项如下:

代码语言:javascript
复制
QEMUOPTS = -hda $(OBJDIR)/kern/kernel.img -serial mon:stdio -gdb tcp::$(GDBPORT)
QEMUOPTS += $(shell if $(QEMU) -nographic -help | grep -q '^-D '; then echo '-D qemu.log'; fi)
IMAGES = $(OBJDIR)/kern/kernel.img
QEMUOPTS += $(QEMUEXTRA)

实验室选项有-serial mon:stdio,这是. http://download.qemu.org/qemu-doc.html

-serial dev --将虚拟串行端口重定向到主机字符设备开发。。。此选项可多次用于模拟多达4个串口。..。 mon:dev_string 这是一个特殊的选项,允许监视器被多路复用到另一个串口上。监视器是用控制-a的键顺序访问的,然后按c。dev_string应该是上面指定的任何一种串行设备。将监视器复用到侦听端口4444的telnet服务器的一个示例是:

可能您的映像要引导使用串口,而不是显示打印的东西。尝试将以下内容添加到命令中:

代码语言:javascript
复制
qemu-system-i386 -drive format=raw,file=obj/kern/kernel.img -serial mon:stdio

代码语言:javascript
复制
qemu-system-i386 -hda obj/kern/kernel.img -serial mon:stdio
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44269968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档