gpt4 book ai didi

linux - USB 内存棒上的简单引导加载程序

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:34:49 26 4
gpt4 key购买 nike

我创建了一个简单的引导加载程序,如下所示:

[BITS 16]   
[ORG 0x7C00]

MOV AL, 65
CALL PrintCharacter
JMP $ ;Infinite loop


PrintCharacter:
MOV AH, 0x0E
MOV BH, 0x00
MOV BL, 0x07

INT 0x10
RET

TIMES 510 - ($ - $$) db 0 ;Fill the rest of sector with 0
DW 0xAA55 ;Add boot signature

然后我用 nasm -f bin -o boot.bin bootloader.asm 编译它。我采取的下一步是使用新的虚拟系统(我选择类型:其他)在 VirtualBox 上对其进行测试。

我使用 mkisofs -no-emul-boot -boot-load-size 4 -o boot.iso -b boot.bin isodir/ 创建了一个 iso 文件> 它正确启动,字符 A 显示如我所愿。

接下来我想在物理机上测试这个简单的启动代码。我不想覆盖我的 MBR,所以我决定使用 USB 内存棒作为启动设备(我的 BIOS 支持这个)。

首先我使用了dd if=boot.iso of=/dev/sdb1 conv=notrunc bs=512 count=1 seek=0。它不起作用,什么也没有显示,只有黑屏和光标。

我的问题是我应该如何正确准备 U 盘上的 MBR。或者我如何更改代码以尝试仅使用引导代码写入前 446 个字节(如 dd if=boot.iso of=/dev/sdb1 conv=notrunc bs=446 count=1 seek=0)因为接下来的 4*16 字节是分区表 + 2 字节用于引导签名。

提前致谢。

最佳答案

我找到了一个解决方案。就像 nodakai 说 /dev/sdb1 指向第一个分区,所以我应该写到 /dev/sdb 因为它指向物理驱动器。但这不仅是错误的,而且我还必须删除 TIMES 510 - ($ - $$) db 0 和引导签名 0xAA55 才能正确运行它(不覆盖分区 table )。我现在很好奇,为什么我不能像以前那样写分区表(用 0 填充)?

关于linux - USB 内存棒上的简单引导加载程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21224214/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com