如何将我的引导加载程序和内核放在 USB 上

How Do I Put My Bootloader And Kernel On A USB

我在学习 2 阶段引导加载程序时将引导加载程序和基本内核编写为一个有趣的副项目,我想在 USB 的扇区 1(或 MBR)加载我的引导加载程序,在扇区加载内核2. 我使用 NASM 将两者编译成 Bootloader.bin & Kernel.bin。我只需要一点帮助就可以将它们实际写入 USB。我可以访问 Windows 和 Linux 所以任何答案都表示赞赏。

Bootloader.asm

[BITS 16]
[ORG 0x7C00]

ResetDisk:
XOR AH, AH
INT 0x13
JC ResetDisk

ReadDisk:
MOV BX, 0x8000
MOV ES, BX
MOV BX, 0x0000

MOV AH, 0x02
MOV AL, 1
MOV CH, 0x00
MOV CL, 0x02
MOV DH, 0x00
INT 0x13
JC ResetDisk
JMP 0x8000:0x0000

TIMES 510-($-$$) DB 0
DW 0xAA55

Kernel.asm

[BITS 16]
[ORG 0x8000]

MOV SI, HelloString
CALL PrintString
JMP $

PrintChar:
MOV AH, 0x0E
MOV BH, 0x00
MOV BL, 0x0F
RET

PrintString:
MOV AL, [SI]
INC SI
OR AL, AL
JZ Exit
CALL PrintChar
JMP PrintString
Exit:
RET

HelloString DB 'Hello World!',0

TIMES 512-($-$$) DB 0

找出哪个设备代表 /dev 中的 USB 密钥(密钥本身,而不是上面的分区),然后您可以简单地使用 dd 或类似的工具来复制您的数据。

示例,其中 /dev/xxx 是您的 USB 密钥:

cat Bootloader.bin Kernel.bin > image.bin
sudo dd if=image.bin of=/dev/xxx bs=4k

请注意,您可能必须先 umount 来自 USB 密钥的任何已安装分区。另请注意,但不用说,首先确保 USB 密钥上没有重要内容