grub4dos项目开发者之一Bean大师已经制作成功了,见31、32楼
grldr.mbr真能从bios中引导硬盘上的grldr吗?我也不知道、想知道就尝试了...
今天又一次尝试把grldr.mbr移植到RomOS写入Bios,虽然失败了,但也总算也看到了grldr的启动信息,比起上次显示disk error也算没白折腾,不点和bean看到以下信息希望得到你们的帮助,这个方法是否可行?
[ Last edited by fastslz on 2008-1-10 at 05:56 PM ]
grldr.mbr真能从bios中引导硬盘上的grldr吗?我也不知道、想知道就尝试了...
今天又一次尝试把grldr.mbr移植到RomOS写入Bios,虽然失败了,但也总算也看到了grldr的启动信息,比起上次显示disk error也算没白折腾,不点和bean看到以下信息希望得到你们的帮助,这个方法是否可行?
Welcome to ROMOS ver. 1.03 by Martin Rehak (C) 2001-2007; rayer@seznam.cz
INT13h vector has been hooked F000:9734 -> D800:01CC
ROMOS has installed virtual ROM DISK drive.
F=0246 CS=D800 SS=4000 ES=0000 DS=E000 DI=8000 SI=007B BP=1000 SP=FFF5
Bootsector loaded at 0000:7C00
Bootimg!
Missing MBR-helper._
[ Last edited by fastslz on 2008-1-10 at 05:56 PM ]
Gemini 解答
这是一篇关于 2007 年前后,技术爱好者尝试将 Grub4Dos 的引导组件
grldr.mbr集成到主板 BIOS 中,以实现从固件层面直接启动引导程序的讨论。技术背景
- ROMOS: 由 Martin Rehak 开发的一个小工具,允许用户将一个磁盘镜像(通常是 FreeDOS)封装成一个 ISA/PCI Option ROM 模块。当 BIOS 自检(POST)完成后,通过特定的热键(如 Scroll Lock)拦截启动流程,挂载一个虚拟的只读磁盘并引导。
- grldr.mbr: Grub4Dos 的引导代码。它分为两部分:前 512 字节是符合 MBR 规范的引导扇区,后续部分是所谓的“MBR-helper”,负责寻找并加载磁盘根目录下的
grldr主程序。- CBROM: 那个时代常用的 Award BIOS 编辑工具,用于向 BIOS 镜像中添加或提取模块(如 ISA 模块、Logo、微码等)。
关键问题解释
在发帖者
fastslz的尝试中,屏幕出现了Missing MBR-helper的错误,这反映了几个核心技术细节:1. 引导代码的完整性
grldr.mbr的设计预期是位于磁盘的第 0 扇区及其随后的扇区。它的大小通常是 8KB(16 个扇区)。
- 错误原因: 传统的 BIOS 引导逻辑(及
ROMOS的部分实现)习惯于只将镜像的前 512 字节加载到内存0000:7C00处。- 技术细节:
grldr.mbr的前 512 字节运行后,会尝试寻找它剩下的“身体”(即 helper 部分)。如果ROMOS没有将全部 8KB 代码搬运到连续的内存地址,或者没有正确设置内存布局,引导就会因为找不到后续代码而报错。2. 软盘与硬盘启动模式的差异(BPB 表)
不点(Grub4Dos 核心开发者)在第 11 楼指出了一个关键点:grldr.mbr具有混合启动特性。
- 如果引导的是软盘镜像,BIOS 和引导程序需要 BPB(BIOS Parameter Block)来了解磁盘的几何结构(磁头数、扇区数等)。
- 如果
ROMOS模拟的是软盘环境,而grldr.mbr的 BPB 区域(偏移0x0B开始)全为 0,引导程序可能会误判磁盘环境或无法通过 BIOSINT 13h读取后续扇区。3. PCI Option ROM 的规范
uleak提到建议使用cbrom /pci方式。
- ISA ROM vs PCI ROM: 传统的 ISA ROM(如
ROMOS原始版)通常挂载在C800或D000段。现代主板 BIOS 更倾向于遵循 PCI 规范。- PCI ID 匹配: PCI ROM 需要包含正确的厂商 ID(Vendor ID)和设备 ID(Device ID),否则 BIOS 可能会忽略该模块。
bromcfg.exe就是用来修改这些 ID 以欺骗 BIOS,使其认为该模块是属于板载网卡或其他设备的扩展 ROM。总结
该帖子的最终成功方案(由
Bean完成)实际上是简化了引导逻辑:
- 不再进行复杂的磁盘仿真: 既然目标是启动硬盘上的
grldr,就不需要ROMOS模拟出一个包含 FreeDOS 的虚拟盘。- 全量内存搬运: 编写一段极简的汇编代码作为 ROM 头部,负责将存储在 ROM 里的 8KB
grldr.mbr完整地复制到内存中(通常是0000:7C00),然后跳转执行。- 环境清理: 确保
DL寄存器传递了正确的启动驱动器号(如0x80代表第一块硬盘),这样grldr.mbr运行后就能立即去真实的硬盘里搜寻grldr文件。这种“BIOS 植入版 Grub4Dos”在当时非常流行,常被用于制作“万能启动主板”或作为一种极难被系统内软件破坏的系统维护后门。

精华III
