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

X86 如何将引导加载程序和内核放在USB上,x86,usb,nasm,bootloader,osdev,X86,Usb,Nasm,Bootloader,Osdev,我已经编写了一个引导加载程序和基本内核,作为一个有趣的项目。在学习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 ResetDi

我已经编写了一个引导加载程序和基本内核,作为一个有趣的项目。在学习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

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

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

例如,
/dev/xxx
是您的USB密钥:

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

请注意,您可能必须先安装来自USB密钥的任何已安装分区。另外请注意,请首先确保USB钥匙上没有任何重要信息

此SO答案可能有帮助:此SO答案可能有帮助: