如何将引导加载程序刻录到 USB 驱动器(引导加载程序为 .bin)

如何将引导加载程序刻录到 USB 驱动器(引导加载程序为 .bin)

我用汇编语言创建了一个非常小的引导加载程序,并希望在我的物理硬件上对其进行测试,因此我使用 USB 驱动器来执行此操作。我已将汇编转换为机器代码和 .bin 文件,然后对 bin 文件运行文件命令,得到:

DOS/MBR 引导扇区

所以我知道它是可启动的,并且我也能够在模拟器中正常运行它。

我已经在谷歌上搜索这个问题超过 4 个小时了,我找不到任何有用的方法,很多人说要使用 Rufus,但我没有看到 Rufus 3.3 中任何将 bin 文件刷入 USB 驱动器的设置。

我有一台 Unix 和 Windows 机器,所以任何方法都可以。

我一直没能弄清楚如何将 .bin 引导加载程序刻录到 USB 并从中启动,如果有人知道该怎么做,那就太好了。

作为参考,以下是代码:

BITS 16


start:
    mov ax, 07C0h
    add ax, 288
    mov ss, ax
    mov sp, 4096
    
    mov ax, 07C0h
    mov ds, ax

    mov si, helloText
    call printStr   


    jmp $

    helloText db "Hello, World!", 0


printStr:
    mov ah, 0Eh


.repeat:
    lodsb
    cmp al, 0
    je .done
    int 10h
    jmp .repeat
    
.done:
    ret
    


TIMES 510 - ($ - $$) db 0
dw 0xAA55

我使用以下 NASM 命令汇编代码:

nasm -f bin -o bootLoad.bin bootLoad.asm

从这里我需要将 bin 刻录到 USB 驱动器并从中启动。有人有任何工具或有关如何实际执行此操作的信息吗?

先感谢您!

答案1

在 Linux 下,通常使用 dd 将图像“刻录”到驱动器。尝试:

sudo dd if=/path/to/bootloader.bin of=/path/to/drive bs=1M

“if” 是输入文件的缩写,“of” 是输出文件的缩写,通常指向 /dev/sda。如果您不知道驱动器的名称,请先输入“sudo fdisk -l”。

答案2

@murderbaer 给出了正确答案。

sudo dd if=/path/to/bootloader.bin of=/path/to/drive bs=1M

if 是输入文件的缩写,而 'of' 是输出文件的缩写,通常指向 /dev/sda。如果您不知道驱动器的名称,请先输入 'sudo fdisk -l'。

唯一的问题是现代计算机/启动菜单不支持没有分区的驱动程序,但如果您在 BIOS 中启用了旧版支持,则代码将运行并且可以启动。

相关内容