将编译后的汇编代码移至 USB 设备的引导扇区

将编译后的汇编代码移至 USB 设备的引导扇区

我已经编写了一个简单的操作系统并正在尝试测试它。我安装了 VirtualBox 和一个 8 GB 闪存驱动器,所以我想我就使用这些。但是,我不确定如何使 USB 驱动器可启动。我已经遵循了很多关于制作可启动 iso 映像的教程,但 VirtualBox 和磁盘工具都无法读取它。有人可以给我一个行之有效的方法来将 USB 驱动器设置为可启动吗?

我拥有的

  • 8 GB 闪存驱动器

  • VirtualBox 虚拟机

  • 由使用 nasm 编译的汇编代码生成的 .bin。

我需要的

  • 关于如何填充 USB 设备引导扇区的简单、清晰的信息

  • 如果我除了 .bin 之外还需要一些东西,就会朝正确的方向轻推

现有代码

;*********************************************
;   Boot1.asm
;       - A Simple Bootloader
;
;   Operating Systems Development Tutorial
;*********************************************

org     0x7c00              ; We are loaded by BIOS at 0x7C00

bits    16                  ; We are still in 16 bit Real Mode

Start:

    cli                 ; Clear all Interrupts
    hlt                 ; halt the system

times 510 - ($-$$) db 0             ; We have to be 512 bytes. Clear the rest of the bytes with 0

dw 0xAA55                   ; Boot Signature

我遵循的教程

http://www.quilime.com/code/bootable_iso http://www.acm.uiuc.edu/sigops/roll_your_own/ http://www.brokenthorn.com/Resources/OSDevIndex.html http://www.brokenthorn.com/Resources/OSDev1.html http://www.brokenthorn.com/Resources/OSDev2.html http://www.brokenthorn.com/Resources/OSDev3.html

答案1

典型的方法是使用dd.以下是来自的说明syslinux 引导加载程序用于安装mbr.bin/dev/sda.

dd bs=440 count=1 conv=notrunc if=mbr/mbr.bin of=/dev/sda

这里,/dev/sda是目标设备。 (of是“输出文件”。)

您可以将其替换为 USB 驱动器的设备名称。

答案2

好的,您已经安装了一个非常小的操作系统。现在你需要某种机器来启动它。

无论您使用什么机器(笔记本电脑、VirtualBox 等),启动时都需要一些包含代码的 ROM 来加载和启动操作系统。这通常类似于 BIOS。这通常会简单地获取引导扇区配置的启动媒体并运行在那里找到的任何内容。

因此,只需将您的简约操作系统放入引导扇区即可,一切都很好。如果您的操作系统不够简约,引导扇区需要代码来加载更多操作系统。

答案3

我知道这不是您所要求的,但有一种简单的方法可以在 VirtualBox 中启动 .bin 文件。

首先,您必须制作 .vfd 文件 - VirtualBox 虚拟软盘。要创建空白 .vfd 文件,请在 shell 中执行以下命令:

$ head -c 1474560 /dev/zero > bootloader.vfd

然后将其放入 shell 中,以便将编译后的 .bin 包含在 .vfd 文件中:

$ dd status=noxfer conv=notrunc if=[bin_name].bin of=bootloader.vfd

现在你已经有了虚拟软盘。但下一步该怎么办呢?

在 VirtualBox 中,创建一个新的虚拟机。类型选择其他,版本选择 DOS。不需要硬盘。

创建虚拟机后,转到其设置,转到存储选项卡并将输出 .vfd 文件添加为软盘。

就是这样!

相关内容