|
楼上说的对,以下是“不点”的回答:
U 盘的启动技术,本质上非常简单,没那么神秘。如果真的有什么神秘的话,那应该都是 U 盘 BIOS 的厂家故意制造的。
BIOS 制造者只需要把 int13 弄好就可以了。Ralf Brown's Interrupt List 中就有很详细的 int13 的规格说明。这对于那些 BIOS 编程者来说,应该都能倒背如流,轻松搞定。
但是,制造商不一定这么想。它们也许认为,如果要想拥有自己的特色,就得让别人无法离开自己的专有软件工具,就得故意制造障碍才行。这大概是所有这些技术变得神秘的根本原因。
----------
技术上,U 盘上的数据格式完全可以按照硬盘的规格来设计。分区表和 MBR 都可以用微软的工具来创建。文件系统也可以这样做,用 FAT 的就行。如果担心版权问题,那么所有这些都可以用开源的软件来实现,比如 FreeDOS ,Linux 等。
当 BIOS 以硬盘的方式来对待 U 盘时,它只需要把 U 盘的盘符设定为 0x80, 0x81, ... 就行了。此时,如果 BIOS 要从 U 盘启动,那么它就把 U 盘的第一扇区装入 0000:7C00 去执行就 OK 了。
当 BIOS 意欲把 U 盘当做软盘时,它可以把 U 盘上的第一分区当做软盘(就像我们用 grub4dos 把分区仿真为软盘那样),软盘的第一扇区,就是 U 盘第一分区的第一扇区。如果 BIOS 想要从这个软盘启动,它可以把 U 盘第一分区的第一扇区装入 0000:7C00,并把 hidden sectors 字段(偏移 1Ch 处的四个字节,也即,0000:7C1C 处的四个字节)清零即可。grub4dos 的仿真就是这么做的,并无任何困难。U 盘 BIOS 的厂家完全也可以这么做(如果它们不打算故意制造混乱的话)。 |
|