|
本帖最后由 wintoflash 于 2021-4-20 13:12 编辑
我现在很少上论坛,如果有其它问题,可以在telegram上私聊。
---------------------------
我注意到你发布了一个ntloader项目, 里面有int13.c 什么的 能否基于这个项目进行
不一定,要看你想写什么样的磁盘仿真程序。
首先,它是实现了虚拟磁盘的功能。但是,它虚拟的磁盘只对 bootmgr.exe 有效,而且完全位于保护模式下。
你想写的应该是普适的虚拟磁盘 (对所有 BIOS 下的 bootloader 都有效),那就需要自己写一个 BIOS int13 wrapper。
BIOS 中断是只能在实模式下调用的,所以这个 int13 wrapper 也应该是实模式下的,要用汇编写。
当然,你也可以先用少量汇编,从实模式切到保护模式,这样就可以用C语言写了,之后再切回实模式 (这样好像更麻烦)。
要注意,GRUB 的内核是位于内存 0x8000 处的,bootmgr 是要加载到 0x20000 的,
所以,GRUB 启动 bootmgr 或其他 bootloader 之后,GRUB 的数据就被破坏了,即使你切到了保护模式也不能调用 GRUB 的读文件函数来读文件。
那么如何读取磁盘上的文件呢,方法是通过 blocklist 。把文件 (例如 (hd0,1)/xxx.vhd) 在磁盘上存放的位置 (lba+长度) 先保存下来,
这样再读写文件的时候只需要实现读写磁盘上指定扇区的功能就行了,不需要再实现各种文件系统的驱动。
GRUB4DOS 的磁盘仿真是完全在实模式下的,就是通过我所说的这种方式。
ipxe 的好像是先从实模式转保护模式,读完磁盘之后再转回实模式。 |
|