无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: 2011yaya2007777
打印 上一主题 下一主题

[原创] GRUB4DOS for UEFI

    [复制链接]
31#
 楼主| 发表于 2020-11-3 05:30:11 来自手机 | 显示全部楼层
重新编译firadisk和svbus。如果能这样做是最好的了。搜索1Mb以下内存,寻找特定字符串,定位映射表。
回复

使用道具 举报

32#
 楼主| 发表于 2020-11-3 05:38:35 来自手机 | 显示全部楼层
如果不行的话,看看0x4c处是否可写。如果可写,又被占用,得判断是否为csm占用。如何判断?仿真某个dos命令判断返回值?
回复

使用道具 举报

33#
 楼主| 发表于 2020-11-3 05:40:05 来自手机 | 显示全部楼层
目前不支持安全启动,需要关闭安全启动。
回复

使用道具 举报

34#
 楼主| 发表于 2020-11-3 10:21:46 | 显示全部楼层
不要这一句map (hd0) (hd1),RAMOS也能够正常启动

BIOS 模式只能从 (hd0) 启动,你映射建立的虚拟磁盘是 (hd1),而要从虚拟磁盘启动,必须将两个磁盘的盘符对调。
UEFI 模式没有此限制。
回复

使用道具 举报

35#
 楼主| 发表于 2020-11-4 10:58:39 | 显示全部楼层

菜单搜索顺序似乎不对

原先就这样。菜单可以放在这3个地址,没有考虑顺序问题。如果你3个地址都放置了菜单,那就有个顺序问题。不过这都是在测试时才可能发生的事情。
原代码:
        find --set-root --ignore-floppies --ignore-cd /menu.lst && configfile /menu.lst
        find --set-root --ignore-floppies --ignore-cd /boot/grub/menu.lst && configfile /boot/grub/menu.lst
        find --set-root --ignore-floppies --ignore-cd /grub/menu.lst && configfile /grub/menu.lst
我倾向于菜单放在 /UEFi/GRUB/menu.lst

为什么图形模式下,连基本的26个英文字母和阿拉伯数字都不能正常显示,

在BIOS的图形模式,不加载字体文件的话,数字及英文字体取自BIOS。怎么从UEFI模式取字体,还不清楚。

点评

我记得HII Protocol之类的可以取字体。你可以到uefi spec上查一下。  详情 回复 发表于 2020-11-4 12:22
BIOS下的grub4dos,菜单优先级的确是: /menu.lst /boot/grub/menu.lst /grub/menu.lst 优先搜索的是根目录,找到的也是根目录下的menu.lst。 但是UEFI下的菜单搜索顺序真的不同,我在实体机和虚拟机都测试  详情 回复 发表于 2020-11-4 12:08
回复

使用道具 举报

36#
 楼主| 发表于 2020-11-5 15:02:58 | 显示全部楼层
本帖最后由 2011yaya2007777 于 2020-11-5 15:04 编辑
CD+DISK,光驱在前时,DISK上的g4d不能顺利启动到menu,直接进入g4d shell状态,原因不明。

菜单在光盘上,还是在引导软盘镜像上?应当在光盘上。
一、当机器本身就有PE光盘(SATA或USB光驱,均使用MS的boot*.efi),此时,g4d再map U盘上
的其他PE ISO, map可以成功,但chainloader是失败的

麻烦你再试一试这个。
先在命令行执行:
debug 3
root
find
然后再 map ......
不用改造PE ISO,使用mkisofs重做。

BOOTX64.rar

133.09 KB, 下载次数: 25, 下载积分: 无忧币 -2

点评

怎么这个版本,连普通的pe.iso都启动不了了?  详情 回复 发表于 2020-11-5 15:46
回复

使用道具 举报

37#
 楼主| 发表于 2020-11-5 16:33:06 来自手机 | 显示全部楼层
我实机测试正常。请增加 debug 3测试后截图。

点评

忘了上图了。  详情 回复 发表于 2020-11-5 16:47
回复

使用道具 举报

38#
 楼主| 发表于 2020-11-5 17:04:32 | 显示全部楼层
本帖最后由 2011yaya2007777 于 2020-11-5 17:05 编辑

你的光盘启动镜像是硬盘模式?怎么那么大,一个是 0x18d2d, 一个是 0x36b0b 扇区?
按光盘规范,视乎尺寸只有 2 字节。

点评

虚拟机里面挂载的光驱是微PE2.0X64,196MB。还有个仿真出来的光盘是438MB。 其他的我不懂  详情 回复 发表于 2020-11-5 19:52
回复

使用道具 举报

39#
 楼主| 发表于 2020-11-5 20:02:37 来自手机 | 显示全部楼层
这个PE2.0X64比较小,如果不能启动这个盘,可否压缩发上来?

点评

https://cloud.189.cn/t/6VvmQvV3EFvy 微PE2.0 在虚拟机里面随便挂载一个PE都可以测试啊。 本地硬盘设置优先引导PE1.ISO,虚拟机里面挂载另一个wepe2.0.iso,就能重现问题。  详情 回复 发表于 2020-11-5 20:54
似乎不同的ISO,都不能启动,出错信息也都一样:boot_image_handle not found 参考图见#226  详情 回复 发表于 2020-11-5 20:10
回复

使用道具 举报

40#
 楼主| 发表于 2020-11-5 20:17:25 来自手机 | 显示全部楼层
那发一个不能启动的光盘镜像,把里面与启动无关的文件删除,以便缩小体积。
回复

使用道具 举报

41#
 楼主| 发表于 2020-11-5 21:15:46 | 显示全部楼层
问题找到了。是启动光盘制作不规范。请问,是所以什么软件制作的?

点评

我的z.iso是用mkisofs 制作的,出错信息同样是boot_image_handle not found iso制作脚本如下: 请问怎样制作才规范?  详情 回复 发表于 2020-11-6 16:45
不知道微PE打包ISO用的是什么软件。  详情 回复 发表于 2020-11-6 11:59
回复

使用道具 举报

42#
 楼主| 发表于 2020-11-5 21:50:13 来自手机 | 显示全部楼层
想当年,不点耗费大量的时间和精力排除bug,而这些bug好大一部分是由于不符合规范引起的。当年主要是对付U盘,int13/8返回的chs值不正确。而是一些小软件制作的光盘,软盘镜像不规范。MBR有个活动分区标志,就是不设置。文件系统表示不为0,偏要设置为0。等等数不胜数。

点评

uefi启动的光盘就没几个是规范的。特别操蛋。  详情 回复 发表于 2020-11-5 21:52
回复

使用道具 举报

43#
 楼主| 发表于 2020-11-6 16:04:36 | 显示全部楼层
本帖最后由 2011yaya2007777 于 2020-11-6 16:08 编辑
上传1个测试ISO

麻烦你在简单的,复杂的环境测试一下,我这里可以从众多 cdrom 中选择任意一个引导。

现在除了可以启动 map 的虚拟盘,也可以启动实体盘了。
比如已经有了 cd0:
map /a.iso (cd1)
chainloader (cd0)  或者 chainloader (cd1)
boot

另外,增加了一个函数 exit_image,退回引导管理器,或者父 uefi image。

BOOTX64.EFI.txt

376 KB, 下载次数: 61, 下载积分: 无忧币 -2

点评

一、简单环境测试未通过,因此未进行复杂环境测试。 直接chainloader实体机boot失败,现象与11月5日测试版雷同; [attachimg]468011[/attachimg] map优盘上的ISO,再chainloadr和boot,将启动实体USB光驱内容  详情 回复 发表于 2020-11-6 18:05
还是不行啊。  详情 回复 发表于 2020-11-6 16:36
回复

使用道具 举报

44#
 楼主| 发表于 2020-11-6 16:59:41 来自手机 | 显示全部楼层
liuzhaoyzz:你已经有了一个光盘 0xa0,它就是 cd0,你不能再虚拟一个光盘也是 cd0。

点评

不对呀,我试过了map到(0xff)也不行啊?  详情 回复 发表于 2020-11-6 22:14
回复

使用道具 举报

45#
 楼主| 发表于 2020-11-6 17:08:13 来自手机 | 显示全部楼层
hilsonma:我的双引导光盘就是使用你的模板制作的。我说的不规范,主要是指光盘 0x17 扇区启动目录里,软盘镜像的尺寸填写不正确。比如扇区数是 0x1680,填写的却是 4。
回复

使用道具 举报

46#
 楼主| 发表于 2020-11-6 17:19:00 来自手机 | 显示全部楼层
sunsea:你太了!粗看了一下 ,代码从 9F000 开始从高到低搜索特定字符串。在程序搜索范围内,写特定字符串,并复制内存映射插槽,可以办到。

点评

没看懂,是不是打错字了 嘛,反正就把所有的slot连续摆放进这个变量里就行了。然后把这个变量的两个属性设置上,确保启动器和操作系统下都能访问。然后应该就可以了。然后还需要一下这个变量在的名字空间的GUID  详情 回复 发表于 2020-11-6 17:29
回复

使用道具 举报

47#
 楼主| 发表于 2020-11-6 17:31:32 来自手机 | 显示全部楼层
抱歉,手机上发了一个牛的表情符号,结果没有了。那两个访问属性怎么设置,还的研究一下。如有人知道,可告知我。

点评

以及还有几个可能的问题: 1,map --mem的内存盘是否会在退出UEFI环境后被释放掉,以及是否有类似于hook INT15的机制来告诉操作系统【这块内存被保留】什么的……担心后来的操作系统把仿真盘破坏掉 2,有何种手段  详情 回复 发表于 2020-11-6 22:19
过奖过奖了。 看了一下资料。 https://blog.csdn.net/jiangwei0512/article/details/52877055/ 在这里应该就行了  详情 回复 发表于 2020-11-6 17:35
回复

使用道具 举报

48#
 楼主| 发表于 2020-11-6 19:01:35 来自手机 | 显示全部楼层
在有0xa0及0xa1的情况下,执行 map --status ,看看情况。
回复

使用道具 举报

49#
 楼主| 发表于 2020-11-6 19:09:56 来自手机 | 显示全部楼层
0xa0
回复

使用道具 举报

50#
 楼主| 发表于 2020-11-6 19:11:12 来自手机 | 显示全部楼层
直接启动第一或者第二光盘,看看结果。

点评

所有参与测试的所有ISO,单独都是可以启动成功的  详情 回复 发表于 2020-11-6 22:24
回复

使用道具 举报

51#
 楼主| 发表于 2020-11-6 19:17:34 来自手机 | 显示全部楼层
再一个是,输入 cd3欠妥,应当是 0xa2,或者是 cd(map时),cd-1(chainloader时)。)

点评

结果如下: [attachimg]468014[/attachimg]  详情 回复 发表于 2020-11-6 22:23
回复

使用道具 举报

52#
 楼主| 发表于 2020-11-7 10:41:32 | 显示全部楼层
终于搞明白了,是启动 Windows 时只认第一光驱!我的电脑内存小,平时只是测试个小空壳iso,所以老是不能重现bug。

现在有几个疑问,请坛友释疑。
我知道uefi有引导服务和运行服务性质的代码、数据。那什么时候引导服务数据被清除?是执行了启动镜像(b->start_imag)服务后,由uefi清除的吗?我感觉启动的windowe转圈圈以前,还在读盘,grub4dos还在起作用。当然windows启动后,加载自己的驱动,不需要uefi服务支持。我看grub2好像在引导镜像前释放了自己的内存。W大好像没有什么动作。

SVBus在windows挂载的内存盘,是使用 --mem 加载到内存的镜像?还是不使用 --mem 的,如 map /a.iso (0xff) 这种有映射关系,但是数据仍然在磁盘上,也可以挂载?

点评

第一个问题盲猜是UEFI只告诉Windows这块内存没人用了,然后Windows把它加入可用内存列表分配使用,仅此而已。 第二个问题,根据我目前阅读到的代码: 加了--mem参数:根据slot找到镜像所在内存位置,然后登记并  详情 回复 发表于 2020-11-7 10:45
回复

使用道具 举报

53#
 楼主| 发表于 2020-11-7 10:44:18 | 显示全部楼层
因为yaya没放出代码,不知道yaya用的是哪种。

我采用的是你以前的代码,应该是引导服务吧。
回复

使用道具 举报

54#
 楼主| 发表于 2020-11-7 11:05:27 | 显示全部楼层
本帖最后由 2011yaya2007777 于 2020-11-7 16:06 编辑
是的,希望yaya尽快上传代码。

之所以没有尽快上传代码,一是还有些已知遗留问题需要处理,还要清除众多的内部调试代码。二是不知道怎么上传。

现在我想寻求一个有能力,有精力,有担当,愿意开发和维护GRUB4DOS的有缘人,接手这件事情。
本来我是想作为chenall项目的一个分支,使得GRUB4DOS的BIOS分支、UEFI分支在一起,即有继承性,又方便浏览下载。
但是chenall工作很忙,也没有帮我上传的意思,更顾不上开发维护。
总之,希望增加活力,使得由不点创建的这一项目荒废了。

点评

确实因为工作还有家庭的原因,没有足够的精力,基本上我每个星期都会上无优看一下,了解一下最新的一些技术或资讯。 在力所能及的情况下,我很乐意提供一些帮助。 可以把代码打包传给我  详情 回复 发表于 2020-11-9 15:10
你要是不会操作,要不先把代码传给我,我研究一下。  详情 回复 发表于 2020-11-7 14:45
克隆一个仓库,新开分支提交就行了。同源,代码很容易在多仓库间合并。开发履历会保留了。  详情 回复 发表于 2020-11-7 11:16
回复

使用道具 举报

55#
 楼主| 发表于 2020-11-7 11:14:14 | 显示全部楼层
(其实我没看懂你这个问题……

你已经说明白了,两种情况都可以挂载。不过第二种情况比较复杂,不像BIOS环境0x80就是第一块硬盘,在UEFI环境其实没有0x80的概念,它能不能分析,分析对不对是未知数,恐怕修改代码。没有测试,只是瞎猜想,第一种情况相对简单。
我原来是想,如果不能挂载第二种情况,我复制插槽时,就把它滤除了。

点评

先复制吧,我过会回宿舍再阅读一下代码看看具体它怎么找硬盘的。  详情 回复 发表于 2020-11-7 11:59
回复

使用道具 举报

56#
 楼主| 发表于 2020-11-8 11:48:14 | 显示全部楼层
似乎还是用了,因为Windows会询问这些磁盘参数,所以Slots里是啥SVBus就填的啥

我想了解SVBus使用插槽的情况,可否上传源代码?

点评

https://sourceforge.net/projects/svbus/ 在这里直接下载,程序包里就有源代码。 搜索关键词是slots。有什么内核相关的函数看不懂可以问我。  详情 回复 发表于 2020-11-8 12:35
回复

使用道具 举报

57#
 楼主| 发表于 2020-11-8 13:03:11 | 显示全部楼层
本帖最后由 2011yaya2007777 于 2020-11-8 13:04 编辑
在这里直接下载,程序包里就有源代码

谢谢了。主要是我认为在 UEFI 环境下,chs 参数无用,插槽的 chs 位置被其他参数占用。看来换得做些调整。

那个网站打不开!

点评

Here。里面的SVBus/src文件夹。 我也是很好奇,都0202年了,为什么Windows还要询问磁盘的CHS……M$真的不知道几乎所有磁盘都是线性寻址了吗……0202年了不是1999年啊……  详情 回复 发表于 2020-11-8 13:11
回复

使用道具 举报

58#
 楼主| 发表于 2020-11-8 18:57:40 | 显示全部楼层
现在没有 --top 这个参数。
chainloader 只能加载 .efi 文件,或者光盘,硬盘。
如果你使用 bootmgfw.efi (或者名称不同,但是内容相同)启动的, 则不能再加载它。
发现不支持 LZMA 压缩格式

应当支持,但是我没有测试。
回复

使用道具 举报

59#
 楼主| 发表于 2020-11-8 19:00:15 | 显示全部楼层
本帖最后由 2011yaya2007777 于 2020-11-9 07:59 编辑

W大,我 --mem 使用的是 GRUB_EFI_LOADER_DATA,这个不知道会不会被释放?

对于分配页,分配池,我有些疑惑,不知道他们的区别,什么时候使用哪一个?

点评

EFI_LOADER_CODE 和 EFI_LOADER_DATA,操作系统可以自行决定是否回收。 AllocatePages分配的内存不跨页,可能对驱动更友好一点。但是要注意,AllocatePages在32位uefi上可能被分配到4GB之后的内存。  详情 回复 发表于 2020-11-10 19:07
回复

使用道具 举报

60#
 楼主| 发表于 2020-11-9 10:42:48 | 显示全部楼层
可以测试 SVBus 了。

BOOTX64.rar

134.3 KB, 下载次数: 63, 下载积分: 无忧币 -2

点评

2020-11-09版的G4D,经测试: 1、已解决了多光驱(量产或实体)干扰条件下,MAP 磁盘上的(win10 PE)ISO,正确启动问题。 2、以G4D为光盘引导程序,为PE ISO加壳,形成新ISO(即ISO嵌套)测试成功。 ============  详情 回复 发表于 2020-11-10 07:06
加载菜单死机了。虚拟机和实机结果一样。 不知道是不是只有我有这个问题。。。  详情 回复 发表于 2020-11-9 16:41
请问这个是怎么处理映射信息传递的?拷贝进前640KB还是放置UEFI变量?需要我做什么吗  详情 回复 发表于 2020-11-9 11:08
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-4-29 21:34

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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