我正在学习操作系统制作的基础知识。我已经制作了一个兼容多引导头的.asm文件和一个.c文件。 .asm文件中的代码调用.c文件的主函数。
问题是QEMU无法从编译和链接.asm和.c文件后生成的文件启动。
它只是说它无法找到可启动设备。
虽然,我可以从一个简单的.asm文件启动,如: -
mov ax, 0x0e
mov al, 'H'
int 10h
times 510 - ($ - $$) db 0
jmp $
dw 0xaa55
我还有什么需要做的吗?
答案 0 :(得分:8)
QEMU 2.0.0支持多重启动
grub-mkrescue
说:
上传了一个最小的hello world示例-kernel bzImage
使用bzImage作为内核映像。内核可以是Linux内核,也可以是多引导格式。
它生成一个GAS + C多重引导文件,并使用QEMU来运行它。
.iso
还可以将多引导二进制文件转换为可引导的String value = "<html>Visit my blog <a href=\"http://www.maxartists.com\">mysite</a> View <a href=\"sherif-activity://myactivity?author=sherif&nick=king\">myactivity</a> callback</html>";
TextView text = (TextView) findViewById(R.id.text);
text.setText(Html.fromHtml(value));
text.setMovementMethod(LinkMovementMethod.getInstance());
图像,这是另一种好方法。
不支持Barry https://github.com/cirosantilli/x86-bare-metal-examples/tree/dbbed23e4753320aff59bed7d252fb98ef57832f/multiboot multiboot2。如何生成multiboot2映像以防测试:mentions that
答案 1 :(得分:-1)
QEMU没有多重启动的本机支持。相反,您需要创建一个虚拟硬盘驱动器映像并安装某种多引导启动加载程序(例如grub),然后将多引导映像放在驱动器上的某个位置(即分区中的文件中)。
就实际安装grub到虚拟硬盘而言,有多种方法可以做到,但这是我一直使用的过程:
qemu-img
或dd if=/dev/zero
创建硬盘映像。qemu
的ISO引导-hda <HDD-image-filename> -cdrom <ISO-file-name> -boot once=d
。最后一位确保qemu
将首先尝试从CD启动。fdisk
/ parted
/ etc格式化磁盘。grub-install
。然后,您将能够启动HDD映像并使用grub或您选择的任何加载程序来启动多重启动映像。
您的简单ASM示例的工作原因是因为您有效地模拟了MBR(典型硬盘的第一个扇区),因此QEMU的BIOS将从中启动(具体来说,它会看到0xaa55
签名)。
答案 2 :(得分:-1)
不,QEMU确实对旧的多引导规范有本机支持,虽然它不支持VBE,例如。只需将具有正确的旧多引导头的独立编译器编译成ELF可执行文件并使用-kernel选项运行< / p>