如果写入多扇区引导加载程序,则USB驱动器不可引导';中国第一部门

如果写入多扇区引导加载程序,则USB驱动器不可引导';中国第一部门,usb,boot,bootloader,bios,mbr,Usb,Boot,Bootloader,Bios,Mbr,一段时间以来,我一直在使用引导加载程序和微型内核。我发现,当使用真正的USB驱动器时,如果我的引导加载程序覆盖了目标驱动器上MBR的分区表和其他数据,则无法引导 但是,如果我使用链式加载程序并将引导加载程序写入分区,它将正常启动。 但是我读到驱动器是可引导的,如果字节510和511处有55和aa,那么驱动器是可引导的。但事实并非如此。我还听说了现代硬件检测可引导驱动器的其他要求,但我不知道任何细节 我想知道更多关于它的信息,并提前感谢。支持USB引导的传统BIOS是一个不寻常的野兽。现代设备上的

一段时间以来,我一直在使用引导加载程序和微型内核。我发现,当使用真正的USB驱动器时,如果我的引导加载程序覆盖了目标驱动器上MBR的分区表和其他数据,则无法引导

但是,如果我使用链式加载程序并将引导加载程序写入分区,它将正常启动。 但是我读到驱动器是可引导的,如果字节510和511处有55和aa,那么驱动器是可引导的。但事实并非如此。我还听说了现代硬件检测可引导驱动器的其他要求,但我不知道任何细节


我想知道更多关于它的信息,并提前感谢。

支持USB引导的传统BIOS是一个不寻常的野兽。现代设备上的大多数传统BIOS通常支持软盘驱动器模拟(FDD)和硬盘模拟(HDD)来引导USB。这些生物中有些很挑剔。一般来说,如果使用HDD模拟引导要最兼容,您需要有一个分区表,其中只有一个分区被列为活动分区。这是在末尾有0xaa55签名的基础上进行的。您不会在规范中发现这一点,这是引导加载程序编写者多年来观察的结果。如果使用FDD仿真引导USB,通常最好使用BIOS参数块,以避免某些BIOS盲目地将驱动器几何数据写入引导加载程序顶部的内存中(读入内存后)。这可能会导致引导加载程序以出乎意料的方式运行。@Michael Petch我的系统将驱动器列为USB硬盘,我认为(我很久以前就检查过)使用bios I/o中断时的“dl”是0x80/81,所以我认为这是HDD模拟。您能解释一下“bios参数块”吗?我已经看过几次了,但从来没有理解过。如果你的BIOS显示的是USB硬盘,而你的DL是0x80或更高,那么这就相当于说它是HDD引导模拟。一些bios允许您将USB从FDD更改为HDD仿真,我看到了一个读取引导扇区的bios,以确定它是否看到分区表。如果它看到一个,它会假定它是HDD仿真。但许多生物可以做一些不同的事情。至于BPB,我有一个关于FDD(软盘)USB引导的答案:支持USB引导的传统BIOS是一个不寻常的野兽。现代设备上的大多数传统BIOS通常支持软盘驱动器模拟(FDD)和硬盘模拟(HDD)来引导USB。这些生物中有些很挑剔。一般来说,如果使用HDD模拟引导要最兼容,您需要有一个分区表,其中只有一个分区被列为活动分区。这是在末尾有0xaa55签名的基础上进行的。您不会在规范中发现这一点,这是引导加载程序编写者多年来观察的结果。如果使用FDD仿真引导USB,通常最好使用BIOS参数块,以避免某些BIOS盲目地将驱动器几何数据写入引导加载程序顶部的内存中(读入内存后)。这可能会导致引导加载程序以出乎意料的方式运行。@Michael Petch我的系统将驱动器列为USB硬盘,我认为(我很久以前就检查过)使用bios I/o中断时的“dl”是0x80/81,所以我认为这是HDD模拟。您能解释一下“bios参数块”吗?我已经看过几次了,但从来没有理解过。如果你的BIOS显示的是USB硬盘,而你的DL是0x80或更高,那么这就相当于说它是HDD引导模拟。一些bios允许您将USB从FDD更改为HDD仿真,我看到了一个读取引导扇区的bios,以确定它是否看到分区表。如果它看到一个,它会假定它是HDD仿真。但许多生物可以做一些不同的事情。至于BPB,关于FDD(软盘)USB引导,我有一个答案: