我之前已经问过这个问题,但其他答案似乎都没有解决我的问题。也许我错过了什么?
我知道.iso有效,因为我在QEMU中运行它并且它成功运行。那么我做错了什么?
bits 16
xor ax, ax
start:
cld ; Set direction flag to forward
; Set up registers
mov ax, 07c0h ; Segment location which BIOS loads
add ax, 288 ; (4096 + 512) / 16 bytes
mov ss, ax ; Sets stack segment register
mov sp, 4096 ; Sets stack pointer register (offset of stack)
mov ax, 07c0h
mov ds, ax ; Sets data segment to where we're loaded
mov si, text ; Puts string into source index
call print_string ; Calls print string
jmp $ ; Infinite loop to prevent shutdown
print_string:
mov ah, 0eh ; System call for printing
xor bh, bh ; Sets BH register to 0
.repeat:
lodsb ; Loads byte into AL
cmp al, 0 ; Sees if AL is 0
je .done ; Jumps to done if AL is zero
int 10h ; Otherwise, print
jmp .repeat ; Repeat
.done:
ret
text db 'Test', 0
times 510 - ($ - $$) db 0 ; Pads 510 - (current location - start location) zeros
dw 0xAA55 ; Standard PC boot signature (takes up 2 bytes)
编辑:我已将以下内容添加到我的代码中:
xor ax, ax
cld
xor bh, bh
为了创建iso,我运行以下命令:
dd if=/dev/zero of=floppy.img bs=1024 count=1440
dd if=bootloader.bin of=floppy.img seek=0 count=1 conv=notrunc
mkdir iso
cp floppy.img iso/
mkisofs -o file.iso -b floppy.img iso
为了将iso刻录到我的usb,我运行以下命令:
umount /dev/sdX
dd if=/home/mint/Downloads/file.iso of=/dev/sdX bs=4M && sync
答案 0 :(得分:3)
您的问题是您创建的“iso”是光盘映像。只有当它被刻录到光盘(例如CD-R)时才能在真实计算机上启动。当您将它与QEMU一起使用时,您显然将其用作模拟CD-ROM。当您将其复制到USB驱动器时,它的格式不正确,无法在USB驱动器上启动。
幸运的是,启动USB驱动器的正确格式很简单:引导加载程序只需要位于驱动器的第一个扇区,就像在软盘或硬盘上一样。因此,您可以跳过创建“iso”部分,并将引导扇区直接写入USB驱动器。例如:
dd if=bootloader.bin of=/dev/sdX