首页 > 解决方案 > 如何使用 qemu 引导我的引导扇区文件?

问题描述

我正在对(非常基本的)操作系统开发进行一些实验,以便自学一些有关机器语言和 x86 汇编的知识。

我的系统上安装了 lib-virt / qemu。(Debian 11)

但是我正在努力寻找一种方便的方法来引导我的输出文件。

我已经使用nasm bootsector.asm -f bin -o bootsector.bin.

最初我尝试运行此命令:

qemu bootsector.bin

但是我得到了错误command not found。我相信这是因为(无论出于何种原因,我并不确切知道)我的包管理器提供的命令实际上是这样的:

qemu-system-x86_64 bootsector.bin

但是这会产生这个输出,这不是我所期望的

WARNING: Image format was not specified for 'bootsector.bin' and probing guessed raw.
     Automatically detecting the format is dangerous for raw images, write operations on block 0 will be restricted.
     Specify the 'raw' format explicitly to remove the restrictions.
VNC server running on ::1:5900

我本来希望会弹出一个图形窗口,显示模拟启动过程的输出。然而,显然相反,正在启动 VNC 服务器。

一些在线搜索表明-display sdl-display gtk可能需要启动显示。(但是我不记得几年前的 qemu 版本中需要这样做。)

这些开关都不起作用,都打印

Display `gtk`/`sdl` is not avaiable.

我找不到解决方案。我相信 Debian 的 qemu 软件包不是用 gtk 或 sdl 支持构建的。我不知道这是为什么。

virt-manager因此我尝试了另一种方法,即使用我的引导扇区创建一个虚拟机并将其分配为单个存储设备。

这有效,但只有一次。启动 vm 后,引导扇区文件的所有权和组更改为libvirt. 这样可以防止我的 makefile 覆盖它,因为它是一个写保护文件。

在这一点上,我没有想法。我认为一定有相当数量的 SO 用户在玩操作系统开发,甚至全职从事这方面的工作。我该如何解决我在使用 qemu 时遇到的问题,或者我还能做些什么来加快我的开发过程。我想做的就是能够从命令行启动模拟器并启动我的实验引导扇区。

标签: assemblyx86-64qemux86-emulation

解决方案


尝试使用 -nographic -serial mon:stdio


推荐阅读