无忧启动论坛

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

[原创] GRUB4DOS for UEFI

    [复制链接]
31#
发表于 2020-11-12 11:45:41 | 显示全部楼层
本帖最后由 sunsea 于 2020-11-12 11:46 编辑
liuzhaoyzz 发表于 2020-11-12 11:40
他们似乎都是传递了硬盘,就是把grub4dos仿真到内存盘的这个(rd),从grub4dos下的实模式“传递”到wind ...

本质上这类驱动只是把这块内存“占用”起来,然后向Windows创建了一个设备而已。
然后如果映射到的磁盘号大于0xA0就告诉Windows这是光盘,在0x80-0xA0之间就告诉Windows这是硬盘,0-0x7F告诉Windows这是软盘。
然后剩下的事情是由Windows自己的高层驱动程序处理,我们的第三方驱动只处理那些最基本的读写请求。所以只能叫传递设备,它自己不处理设备细节。
回复

使用道具 举报

32#
发表于 2020-11-12 13:22:10 来自手机 | 显示全部楼层
wintoflash 发表于 2020-11-12 12:55
SVBus之类的支持带文件碎片的map吗?

不清楚,似乎没看见处理碎片的代码,应该是不支持的。
回复

使用道具 举报

33#
发表于 2020-11-12 14:41:14 来自手机 | 显示全部楼层
2011yaya2007777 发表于 2020-11-12 13:40
不支持。要支持的话,它的把碎片插槽读进来。怎么传递给windows?还是内部拦截读程序,指挥windows读那一段?

如果要处理碎片插槽的话,我觉得可以给这些驱动打个补丁……比如说还可以再在640KB的区域里再加一个$G4DBLCK这种特征签名的开头然后后面是碎片插槽,现在这些驱动里映射插槽只用了CHS,起始扇区和长度,以及from to_drive……剩下的字节可以用来表征用了几个碎片插槽啥的……然后驱动里用个链表记录一下这些碎块读盘的时候换算一下就行了……理论上应该能搞
回复

使用道具 举报

34#
发表于 2020-11-12 15:29:26 来自手机 | 显示全部楼层
2011yaya2007777 发表于 2020-11-12 15:16
我不清楚,是由SVBus安装的驱动吗?是,就好办。有人修改它吗?不是,后续windows或者其他程序还要读映射的社 ...

?安装驱动是什么情况?
说了好几遍只是为了认出系统文件而已……

SCSI Miniport这个层次,从上面收来的指令很简单的,就是读XXX扇区开始多长的几个扇区……所以应该还算好处理
回复

使用道具 举报

35#
发表于 2020-11-12 20:12:18 | 显示全部楼层
2011yaya2007777 发表于 2020-11-12 20:10
svbus会那样读吗?如果能,那太好了。但是现在还没有做到。

现在没做到,但是做成这个应该还是比较简单的……我在想要不要写个补丁啥的
回复

使用道具 举报

36#
发表于 2020-11-12 20:45:01 | 显示全部楼层
2011yaya2007777 发表于 2020-11-12 20:38
到现在为止,还没有收到是否G4E成功配合了svbus.

我过几天闲下来的时候做个测试吧,尼玛这几天全是考试……先测试下能否正常识别虚拟盘以及能否正常从上面开机好了……
回复

使用道具 举报

37#
发表于 2020-11-28 00:46:03 | 显示全部楼层
做个SVBus的简单测试,结果QEMU虚拟机下卡在map进去的时候报0xc0000225 BCD损坏(用的是本楼里某人发的微PE)……
果然还是卡在了糊弄bootmgfw.efi这关吗……今天白天继续测。
回复

使用道具 举报

38#
发表于 2020-11-28 08:39:40 | 显示全部楼层
2011yaya2007777 发表于 2020-11-28 08:14
timeout 30
default 1
#graphicsmode -1 800             显示中文,并且有字体文件时,使用这项

真奇怪,map和map --mem后
chainloader (0xff)就可以读到bcd文件,(虽然卡在winload.efi那,提示找不到文件,估计是我打包有问题,过会继续排除)
chainloader (0xff)/efi/boot/bootx64.efi就会提示BCD损坏……
不知道又是什么申必bug
回复

使用道具 举报

39#
发表于 2020-11-28 08:45:46 | 显示全部楼层
wintoflash 发表于 2020-11-28 08:43
前面说过,光盘上的bootmgfw.efi屁事多。必须启动软盘镜像里的bootmgfw.efi。

那我转成硬盘版的PE继续测试好了……希望能避雷
回复

使用道具 举报

40#
发表于 2020-11-28 08:59:55 | 显示全部楼层
本帖最后由 sunsea 于 2020-11-28 09:37 编辑
wintoflash 发表于 2020-11-28 08:43
前面说过,光盘上的bootmgfw.efi屁事多。必须启动软盘镜像里的bootmgfw.efi。

也是一样,行为非常怪异·,chainloader (hd1)就能成功读bcd,直接加载XXX.efi就会报bcd损坏,不知这两者有何区别?

更怪异了……换到VMware测试,无论是直接chainloader (0xff)还是chainloader (hd1)都直接黑屏死机了……可能还得真机为准……下午测真机。

回复

使用道具 举报

41#
发表于 2020-11-29 13:18:59 | 显示全部楼层
本帖最后由 sunsea 于 2020-11-29 13:21 编辑

汇报一下测试结果。

采用的是github上的11.26版本。真机测试。
PE还是楼里的那个微PE。驱动顺序经过调整,usbstor等一系列驱动提前,以便认盘。

map --mem能见桌面,不过看不见虚拟的ISO。手动net start提示找不到文件。
直接map会THREAD_EXCEPTION蓝屏,svbusx64.sys蓝的。
作为对照,BIOS下map --mem也看不见虚拟ISO,怀疑是svbus自己的问题,准备接下来的空闲时间进行调试。不知道是不是和CSM冲突之类的原因。可能需要UEFI变量传递作为备选方案。机器是联想拯救者Y720-15KIB。
回复

使用道具 举报

42#
发表于 2020-12-10 16:26:27 | 显示全部楼层
请问谁目前有测试成功的PE ISO或者比较小尺寸的VHD之类的,能够发一下,以供测试?我这里Github 12-10版本还是不成功,跟最后报告的一样,怀疑是我打包还是签名什么的没处理好还是怎么回事。我这有16GB内存。如果谁有在线驱动注入工具能够直接加载.sys的,也请提供一份,谢谢。
回复

使用道具 举报

43#
发表于 2020-12-10 23:47:54 | 显示全部楼层
本帖最后由 sunsea 于 2020-12-11 00:09 编辑

汇报一下最新测试结果:(以下全部chainloader (0x82)形式启动,搭配12-10 G4E)
742# PE 里那个300M img --mem成功认盘,效果很好,不过有一个错误稍显奇怪:
  1. map --mem (hd1,5)/g4e/svbusx64PE.img (hd-1)
复制代码

会提示Selected Disk doesn't exist,但是map --status可以看到并且后续能正常使用。

更正:今天才知道正确用法是map --mem XX.img (hd),搞错了,暂且忽略,白天再测试一下。

758# vhd 出现如下错误,无论是--mem还是 --mem --top


内存分布过于破碎了?

——————我是分割线————————
继续汇报一些比较奇怪的情况。


如图,我先试图map --mem和--top那个ramos.vhd,均告失败,然后我继续试图map --mem那个300MB img进入内存,但是出现了如图的奇怪问题。cat --hex目的为检查首扇区是否正常,跟Windows下读取结果一致。chainloader (hd5,0)/试图按TAB进行自动补全。map --status也有些异常。

回复

使用道具 举报

44#
发表于 2020-12-11 13:07:02 | 显示全部楼层
非常奇怪,为什么map --mem(和map --mem --top)失败以后map --status会多出两项来?
使用的是wintoflash提供的那个vhd,内存16GB,vhd解压后5GB。使用的命令行见图。







——————作为对照,开机后直接displaymem的结果——————


回复

使用道具 举报

45#
发表于 2020-12-11 16:04:52 来自手机 | 显示全部楼层
本帖最后由 sunsea 于 2020-12-11 16:08 编辑

其实从头到尾最让我迷惑的还是为什么chainloader (hd1)就能正常启动直接加载哪怕是本地硬盘上的bootmgfw.efi文件就不行(不会报错,直接boot指令后黑屏死机,中间花一条线)……难道在UEFI时代了M$还只认0x80吗……
回复

使用道具 举报

46#
发表于 2020-12-11 16:37:56 | 显示全部楼层
2011yaya2007777 发表于 2020-12-11 16:34
这个问题困扰我多时了,就是没有答案。

在代码层次这两个有区别吗?
回复

使用道具 举报

47#
发表于 2020-12-11 16:50:26 来自手机 | 显示全部楼层
2011yaya2007777 发表于 2020-12-11 16:34
这个问题困扰我多时了,就是没有答案。

感觉可以研究一下grub2怎么做的,人家直接set root=XXXX然后就chainloader bootmgfw.efi了就没出问题……
回复

使用道具 举报

48#
发表于 2020-12-11 17:02:22 来自手机 | 显示全部楼层
本帖最后由 sunsea 于 2020-12-11 19:23 编辑
2011yaya2007777 发表于 2020-12-11 16:56
在代码层次有区别。代码就是移植自GRUB2,当然做了一些调整。问题是没有看出本质区别。

那就只能咨询一下 @wintoflash 大佬了……真的非常迷惑
回复

使用道具 举报

49#
发表于 2020-12-11 18:18:43 | 显示全部楼层
2011whp 发表于 2020-12-11 18:10
那个 300M  svbus  imgpe  

img  

svbus是明确不支持碎片的,源代码就这样。

点评

有碎片等于有“硬盘坏道”,我试过有碎片能认盘,但数据坏了不少。  详情 回复 发表于 2020-12-11 22:31
回复

使用道具 举报

50#
发表于 2020-12-18 11:58:04 | 显示全部楼层
liuzhaoyzz 发表于 2020-12-18 07:34
我试过了直接map vdf,vdf里面内置了primo驱动,删除了svbus驱动,不带mem的这种,启动到BCD这 ...

Primo的东西不知道不清楚,但是g4e的用户群也不会给他带来多少利润……

其实我现在在怀疑都UEFI时代了bootmgfw.efi还只认0x80……不知道有没有类似的办法能够类似于g4d时代的这段代码一样:
  1. chainloader /bootmgr
  2. root (hdX,Y)
  3. boot
复制代码

来正确传递磁盘相关信息或者类似于g4d的交换磁盘的办法……
回复

使用道具 举报

51#
发表于 2021-9-16 11:48:07 | 显示全部楼层
magicphoenix 发表于 2021-9-16 08:50
請問 G4D for UEFI,會加入支持 secure boot 的功能嗎?

这事是微软给不给我们发证书的事情,不是我们想不想支持的事情。应该是不可能的。
回复

使用道具 举报

52#
发表于 2022-1-6 18:21:07 | 显示全部楼层
2011yaya2007777 发表于 2022-1-6 16:17
g4e2021-11-16这个日期反馈的太好了!终于查到了qbus.vhd启动蓝屏的问题。蓝屏反映svbusx64.sys出错。
...

Windows要CHS参数,所以svbus会往上传递。数据来源就是映射插槽。我也不知道都2202年了为啥M$还要这个,对它读盘有帮助吗?
回复

使用道具 举报

53#
发表于 2022-10-8 10:01:14 | 显示全部楼层
本帖最后由 sunsea 于 2022-10-8 10:08 编辑

请教一下,菜单区如何达成if条件为真后执行【一组】命令?
我目前的写法,能达到目的的:
  1. pause --wait=5 等你5秒,按W加载可读写ntfs驱动,按R加载只读ntfs驱动,不按键或者其他键不加载。两个驱动都是测试性的!如果有快速启动等功能不要加载!
  2. # r 0x72 114 w 0x77 119
  3. set tempbuf=%@retval%
  4. if "%tempbuf%"=="114" load /efi/grub/ntfs_x64.efi
  5. if "%tempbuf%"=="114" echo 检测到您按了R,加载只读驱动……
  6. if "%tempbuf%"=="119" load /efi/grub/ntfs_x64_rw.efi
  7. if "%tempbuf%"=="119" echo 检测到您按了W,加载可读写驱动……(测试性!)
复制代码

如果这么写,会让后面的提示信息无条件漏出来:
  1. pause --wait=5 等你5秒,按W加载可读写ntfs驱动,按R加载只读ntfs驱动,不按键或者其他键不加载。两个驱动都是测试性的!如果有快速启动等功能不要加载!
  2. # r 0x72 114 w 0x77 119
  3. set tempbuf=%@retval%
  4. if "%tempbuf%"=="114" load /efi/grub/ntfs_x64.efi ;; echo 检测到您按了R,加载只读驱动……
  5. if "%tempbuf%"=="119" load /efi/grub/ntfs_x64_rw.efi ;; echo 检测到您按了W,加载可读写驱动……(测试性!)
复制代码

使用括号把两个命令括住似乎不起作用。以及似乎在虚拟机上pause执行后和读秒之间有一空隙,此时按键不起作用(%@retval%录不到按键)

(以及有什么命令可以把%@retval%的数字转成字符吗?)


回复

使用道具 举报

54#
发表于 2022-11-20 18:59:52 | 显示全部楼层
crzwy 发表于 2022-11-19 09:59
突然想了个问题:可不可以从bcd引导g4u,就像以前实模式引导grub.mbr一样。如果可以怎么写菜单。请各位大神 ...

你想多了,不可以,微软限制。
回复

使用道具 举报

55#
发表于 2023-3-14 14:44:34 | 显示全部楼层
话说现在G4E能用做光盘上启动用途嘛?如果能的话怎么生成ISO?(要是能grldr和G4E双启动就好了)
回复

使用道具 举报

56#
发表于 2023-3-14 16:05:22 | 显示全部楼层
本帖最后由 sunsea 于 2023-3-14 16:07 编辑
wintoflash 发表于 2023-3-14 14:52
能。
创建一个img(软盘镜像,无分区表),格式化成FAT。
创建\EFI\BOOT\

EFI现在还是以加载一个软盘镜像来启动这样为主的嘛?没有BIOS时代的非模拟启动了?
回复

使用道具 举报

57#
发表于 2023-3-14 16:18:28 | 显示全部楼层
wintoflash 发表于 2023-3-14 16:15
这里所说的“软盘镜像”只是种便于理解的说法。跟什么1.44MB 软盘,dos,引导扇区,模拟启动之类的毫无 ...

原来如此,就是一般情况下UEFI SimpleFile那玩意只能理解FAT不能理解iso9660但又要找个完整.efi文件启动所以整个FAT镜像在这是吧……明白了,谢谢
回复

使用道具 举报

58#
发表于 2023-4-6 19:46:17 | 显示全部楼层
wintoflash 发表于 2023-4-6 19:08
对于 Linux 来说,它可以同时支持这两种。
对于 bootloader 来说,我们有办法知道一个内核是否支持 EF ...

不得不说隔壁不点老大说的是对的,linux缺个类似于ntldr的普世玩意……当然我盲猜可能跟linux的文件系统什么的太多了有关系……其实一直很想问问方便如果支持EFI Handover就优先Handover否则loadfile2吗……不过开发者没精力那就算了……
回复

使用道具 举报

59#
发表于 2023-9-21 18:45:01 | 显示全部楼层
有阴也有阳 发表于 2023-9-21 18:40
可否考虑将32位与64位的UEFI-G4D的菜单分开,因为对启动U盘来说,都集中在同一张菜单上太过拥 ...

善用is64bit命令呗,然后返回1就configfile 64位的菜单不就行了吗。
回复

使用道具 举报

60#
发表于 2024-2-29 10:46:06 | 显示全部楼层
2010VT8365A 发表于 2024-2-27 16:59
yaya大仙法力无边,目前用G4E可以启动原有G4D的系统镜像(F驱动)但是会有win7 7B 蓝屏和win10的 inaceesib ...

Firadisk已经完全落伍了。换SVBus。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-2 22:33

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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