我尝试用 C 语言编写一个简单的内核。我找到了这个教程:Bare Bones 。我已经按照步骤操作了。当我将“o”文件编译为一个“bin”文件时,我尝试在VirtualBox中运行它。我已将“bin”扩展名更改为“img”。我创建了一个新的虚拟机,当我尝试将“img”文件设置为软盘镜像时,出现错误:
A floppy fájl megnyitása sikertelen: path_of_file. (Eng.: failed to load floppy image.)
Could not get the storage format of the medium 'path_of_file' (VERR_NOT_SUPPORTED).
Eredmény kód: VBOX_E_IPRT_ERROR (0x80BB0005) (Eng.: Result code.)
Komponens: Medium (Eng.: Component.)
Interfész: IMedium {05f2bbb6-a3a6-4fb9-9b49-6d0dda7142ac} (Eng.: Interface.)
Callee: IVirtualBox {fafa4e17-1ee2-4905-a10e-fe7c18bf5554}
Callee RC: VBOX_E_OBJECT_NOT_FOUND (0x80BB0001)
如果有人能告诉我问题是什么以及如何解决它,我会非常高兴。我已经在互联网上寻找解决方案,但我还没有找到。 我使用的软件:
- NASM 2.11.06
- i686-elf-gcc 4.8.2(来自 OSDev forum)
- VirtualBox 4.3.20
我的操作系统是 Windows 7 Professional 64 位。
(抱歉我的英语不好,但我一直在学习这门语言。)
谢谢。
最佳答案
一种选择是使用 http://qemu.weilnetz.de/ 中的 QEMU 。将 PATH 变量设置为 QEMU 二进制目录(在 QEMU 安装目录中)。打开保存 kernel.bin 的命令提示符,然后输入:
qemu-system-i386 -kernel kernel.bin
否则,您需要使用现有的引导加载程序(最好是 GRUB2)来创建可引导 ISO 磁盘。现在,您拥有的只是一个二进制文件,其中包含您的内核代码。
1) 创建一个名为 grub.cfg 的文件,其中包含以下内容:
menuentry "my os" {
multiboot /boot/kernel.bin
boot
}
2) 在终端中运行以下命令:
mkdir isodir
mkdir isodir/boot
mkdir isodir/boot/grub
3)将grub.cfg文件保存在isodir/boot/grub目录下。
4) 将 kernel.bin 文件复制到 isodir/boot
5) 从此处下载 setup-x86.exe 获取 32 位 Cygwin: https://cygwin.com/install.html (如果您已经安装了它,请运行您的安装文件并跳到步骤 7)
6) 运行文件,选择安装目录、软件包目录和GNU镜像。
7) 软件包列表出现后,取消选中“隐藏过时的软件包”复选框。
8) 在搜索栏中搜索 grub,它应该在过时类别中显示为“grub2”。选择它进行安装并继续。
9) 安装后(记住将 Cygwin 二进制目录添加到您的路径中),只需运行:
sh grub-mkrescue --output=myos.iso isodir
然后您可以在 VirtualBox 中运行“myos.iso”文件。
如果您有任何疑问,请发表评论。希望这有帮助!
关于c - VirtualBox 无法加载 .img 或 .flp 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27781614/