无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 10784|回复: 27
打印 上一主题 下一主题

[求助] GRUB2 下如何实现BIOS磁盘磁盘访真?

  [复制链接]
1#
发表于 2021-3-2 19:15:15 | 显示全部楼层
本帖最后由 wintoflash 于 2021-3-2 19:21 编辑
启动svbus 文件vhd(非ramos)

如果文件不在内存,那必须在磁盘上是连续存放的。
如果修改grub2 添加bios的磁盘仿真(映射), 思路怎样比较好呢? 怎样设计比较好? 基于loopback命令是否可行?

先问一下你会不会汇编和 C 语言?如果不会的话那就别浪费时间研究这个了,因为 BIOS 已经快要死了。
回复

使用道具 举报

2#
发表于 2021-3-2 19:49:23 | 显示全部楼层
本帖最后由 wintoflash 于 2021-3-2 19:50 编辑
r18nix 发表于 2021-3-2 19:37
几年前看过一段时间汇编, 花点时间应该能看懂. 大神有没有较好的思路提供一下呢?

你可以看下 GRUB2 中 drivemap 模块的汇编部分代码 (grub-core/commands/i386/pc/drivemap_int13h.S, 在我的分支下路径为 grub-core/map/pc/drivemap_int13h.S),并基于它修改。
先获取文件的 blocklist,把它存到某个位置,以方便实模式下读取。
然后写一个实模式下根据 blocklist 读磁盘上文件的函数,让你自己写的 int13h handler 用这种方式读磁盘就可以了。
说起来简单,但是汇编下写这个东西比较困难,我的汇编水平也不行,懒得写。
要注意 GRUB2 的许可协议是 GPLv3,如果你对其进行改动,并且分发了软件,那你也要公开源码。
回复

使用道具 举报

3#
发表于 2021-4-13 11:48:09 | 显示全部楼层
本帖最后由 wintoflash 于 2021-4-20 13:12 编辑
r18nix 发表于 2021-4-13 10:34
我注意到你发布了一个ntloader项目, 里面有int13.c 什么的 能否基于这个项目进行? 这个项目里面是否有实 ...

我现在很少上论坛,如果有其它问题,可以在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 的好像是先从实模式转保护模式,读完磁盘之后再转回实模式。
回复

使用道具 举报

4#
发表于 2021-4-22 19:05:16 | 显示全部楼层
r18nix 发表于 2021-4-22 15:16
还是直接load grub4dos好用

知难而退是好事。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-5-4 13:34

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表