无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
楼主: 2011yaya2007777
打印 上一主题 下一主题

[原创] GRUB4DOS for UEFI

    [复制链接]
1291#
发表于 2021-3-16 14:07:44 | 只看该作者
这个怪事解决了,办法是删除\windows\bootstat.dat,因为是"仅加载",关机不会更新vdf,故这是一劳永逸的删除。
回复

使用道具 举报

1292#
发表于 2021-3-16 20:26:19 | 只看该作者
本帖最后由 wuwuzz 于 2021-3-16 20:33 编辑
xbmc 发表于 2021-3-13 19:42
请问这是什么东西?
我在github上搜到了这个 https://github.com/Microsoft-Leaked-shit/windows_10_sha ...

谢谢你们2位的讨论,指明了获取源码的方向。

win10泄露代码除了bootmgr,让人有兴趣的还有USB驱动。可惜不完整,没有关于U盘驱动内容。

不过,这给了提醒,于是顺藤摸瓜,下了XP和2003的源码,这2个虽然陈旧过时,但作为学习材料还是很不错的。

毕竟NT新版本,相对于NT5.2,有继承性。

以前观察到的有些U盘表现,只能根据结果推测内部处理过程,现在有了源码,迅速定位到感兴趣的片段,

猜测得到证明,想法完全正确,也算是了结了长久的心愿。



回复

使用道具 举报

1293#
发表于 2021-3-28 21:04:28 | 只看该作者
本帖最后由 d634655401 于 2021-3-28 21:08 编辑

yaya大神。我在用grub-uefi版测试多菜单的时候发现,有时候从其他菜单返回主菜单的时候,主菜单文字出现花屏。背景图片没有影响。例如我主菜单是menu.lst   子菜单是uefi.lst。有时候从uefi.lst返回menu.lst时候文字乱码.启动功能没有出现问题。menu.lst用的是40的字体。uefi.lst用的是24的字体。出现乱码是不是2个菜单的字体不一样引起的?24字体菜单没有出现乱码。

33.jpg (140.12 KB, 下载次数: 180)

33.jpg

32.jpg (162.18 KB, 下载次数: 213)

32.jpg

23.jpg (148.95 KB, 下载次数: 221)

23.jpg

20.jpg (80.47 KB, 下载次数: 210)

20.jpg

30.jpg (239.39 KB, 下载次数: 245)

出现问题的界面

出现问题的界面

31.jpg (241.96 KB, 下载次数: 259)

出现问题的界面

出现问题的界面

15.jpg (319.87 KB, 下载次数: 275)

正常界面

正常界面

11.jpg (436.98 KB, 下载次数: 266)

正常界面

正常界面

16.jpg (392.08 KB, 下载次数: 283)

16.jpg
回复

使用道具 举报

1294#
 楼主| 发表于 2021-3-28 21:16:38 来自手机 | 只看该作者
明天排查一下。bios版本,我自己测试过,没有问题。而且只设置主菜单字体,不设置子菜单字体的话,也可以使用,不知uefi模式是否可行。如果不更换不同字体的话,应该没有问题。以前字符安装在固定地方,现在是临时分配缓存,可能产生了问题。

点评

bios没有问题。我也试了  详情 回复 发表于 2021-3-28 21:19
回复

使用道具 举报

1295#
发表于 2021-3-28 21:19:31 | 只看该作者
2011yaya2007777 发表于 2021-3-28 21:16
明天排查一下。bios版本,我自己测试过,没有问题。而且只设置主菜单字体,不设置子菜单字体的话,也可以使 ...

bios没有问题。我也试了
回复

使用道具 举报

1296#
 楼主| 发表于 2021-3-29 10:15:43 | 只看该作者
出现乱码是不是2个菜单的字体不一样引起的?24字体菜单没有出现乱码。

我在 UEFI 环境测试,没有问题。
虽然菜单内存切换时又重新分配了一次,我这里没有影响,也可能影响到你那里了。

BOOTX64.rar

139.22 KB, 下载次数: 29, 下载积分: 无忧币 -2

点评

用最新版本替换这个版本,又出现这个问题了。多个菜单切换花屏。  详情 回复 发表于 2021-6-2 00:39
问题应该解决了我来回切换了3分多钟都没有出现问题。  详情 回复 发表于 2021-3-29 22:17
回复

使用道具 举报

1297#
发表于 2021-3-29 22:17:26 | 只看该作者
2011yaya2007777 发表于 2021-3-29 10:15
我在 UEFI 环境测试,没有问题。
虽然菜单内存切换时又重新分配了一次,我这里没有影响,也可能影响到你 ...

问题应该解决了我来回切换了3分多钟都没有出现问题。
回复

使用道具 举报

1298#
发表于 2021-3-29 23:34:57 | 只看该作者
这图怎么只出一半:


#设置图形模式(可使用 graphicsmode 探测系统支持的图形模式)
graphicsmode -1 1024
#加载背景图
find --set-root /EFI/grub/g4dback.jpg
splashimage /EFI/grub/g4dback.jpg || splashimage /boot/grub/BACK.BMP.GZ
这张图也是1024X768的

点评

我怀疑是你主板支持的图形模式中,分辨率没有1024×768的。可能是1024×8××的。你输入graphicsmode看里面是不是没有1024×768的,你图片是1024×768的。长度1024是对了,高度768可能和主板支持的高度不一样。所以  详情 回复 发表于 2021-3-30 10:18
回复

使用道具 举报

1299#
 楼主| 发表于 2021-3-30 05:51:37 来自手机 | 只看该作者
可能是菜单哪里设置有问题,比如菜单框。最好把有关菜单设置的语句贴上来。菜单项里的具体内容可以省略。
回复

使用道具 举报

1300#
发表于 2021-3-30 10:18:25 来自手机 | 只看该作者
hhh333 发表于 2021-3-29 23:34
这图怎么只出一半:



我怀疑是你主板支持的图形模式中,分辨率没有1024×768的。可能是1024×8××的。你输入graphicsmode看里面是不是没有1024×768的,你图片是1024×768的。长度1024是对了,高度768可能和主板支持的高度不一样。所以不能把屏幕铺完,屏幕下面的黑色背景。可以在win下编辑一下图片分辨率,高分辨率的图片也可以改成低分辨率的。图片改成和主板分辨率支持的一样,这样就可以铺完屏幕了。
回复

使用道具 举报

1301#
发表于 2021-3-30 12:55:06 | 只看该作者
本帖最后由 hhh333 于 2021-3-30 13:02 编辑

经过测试:
1、用OSCDIMG制作的UDF格式ISO,使用bmp格式的背景图片,不能显示背景;使用jpg格式的图片只能显示上半屏;
但菜单显示两者均正常;如使用精简字体菜单根本不能显示;

2、用UltraISO重新编辑成非UDF格式,如下图:

似乎两种格式显示背景都正常;

这种格式下如使用精简字体,英文不能显示,中文显示正常;


又测试了BIOS版本:
1、UDF下,两者(BMP和JPG)都能正常显示背景,但精简字体的菜单中文不能显示;
2、非UDF下,菜单与背景均正常,精简字体也正常;

以上是做成启动光盘ISO的形式,在虚拟机中测试。精简字体文件用chenall的mkfon.exe制作;

回复

使用道具 举报

1302#
 楼主| 发表于 2021-3-31 09:17:05 | 只看该作者
经过测试:

十分诡异,慢慢排查吧。
回复

使用道具 举报

1303#
发表于 2021-3-31 21:51:06 | 只看该作者
本帖最后由 hhh333 于 2021-3-31 22:09 编辑

希望老大们能够解决光盘启动的问题!!!
G4E与grub2存在一个问题,就是从光盘引导时直接chainloader msbootx64.efi总是出现错误c000000e似乎找不到\EFI\Microsoft\Boot\bcd文件,如下:

但通过shellx64.efi二传一下就可以出菜单,也即把ms的bootx64.efi(改名为msbootx64.efi)放到启动包中,通过shellx64.efi调用就可以找到光盘目录中的BCD文件,而直接调用光盘中的msbootx64.efi就找不到BCD;

这是menu.lst改造的部分
  1. calc *0x8272&0xff > nul ;; set arch=%@retval%
  2. if "%arch%"=="64" set IA=x64 || set IA=ia32
  3. if "%arch%"=="64" set IM=64 || set IM=PE

  4. title 启动 Win 8/8.1/10 PE
  5. set ldrwinpe=msboot%IA%.efi
  6. checkrange 0xA0:0xFF read *0x82A0 > nul && set ldrwinpe=shell%IA%.efi
  7. chainloader /EFI/boot/%ldrwinpe%
复制代码

这是用于二传的startup.nsh文件,放在启动包根下(启动包g4defi.bin是根据MS的sysefi.bin文件做的,包括G4E的启动文件和MS的bootx64.efi改名的msbootx64.efi)
  1. echo -off
  2. set efiname64 "msbootx64"
  3. set efiname32 "msbootia32"
  4. echo Seach for "%efiname64%.efi"...
  5. for %b in fs0 fs1 fs2 fs3 fs4 fs5 fs6 fs7 fs8 fs9
  6.         echo Seaching %b ...
  7.         if exist %b:\EFI\boot\%efiname64%.efi then
  8.                 echo found %b:\EFI\boot\%efiname64%.efi!
  9.                 %b:
  10.                 EFI\boot\%efiname64%
  11.                 if not %lasterror% == 0 then
  12.                         EFI\boot\%efiname32%
  13.                 endif
  14.                 exit
  15.         endif
  16. endfor
复制代码

这是用于打包的启动包 g4defi.7z (1.21 MB, 下载次数: 22) ,用OSCDIMG.EXE写入ISO文件的EFI启动区
目前已知xorboot解决了这个问题,grub2最新版也有这个问题。
回复

使用道具 举报

1304#
发表于 2021-3-31 22:57:08 | 只看该作者
  1. calc *0x8272&0xff > nul ;; set arch=%@retval%
  2. if "%arch%"=="64" set IA=x64 || set IA=ia32
  3. if "%arch%"=="64" set PE=64 || set PE=PE
复制代码
上面很奇怪,PE变量值是空的。另外,以上怎么写成一行?

点评

要是以前的g4d,可以这样写,但现在的g4e就不知道了。 calc *0x8272&0xff > nul ;; set arch=%@retval% ;; if "%arch%"=="64" set IA=x64 && set PE=64 ! set IA=ia32 && set PE=PE  详情 回复 发表于 2021-4-2 10:42
超过两个变量就不能赋值了,奇怪  详情 回复 发表于 2021-4-2 06:40
回复

使用道具 举报

1305#
发表于 2021-3-31 23:14:55 | 只看该作者
另外,想建议这个叫Grub4EFI,简称G4E;原来那个简称G4D,应该挺好的。
回复

使用道具 举报

1306#
发表于 2021-4-1 12:21:33 | 只看该作者
谢谢了,终于搞明白了
回复

使用道具 举报

1307#
发表于 2021-4-2 06:40:34 | 只看该作者
hhh333 发表于 2021-3-31 22:57
上面很奇怪,PE变量值是空的。另外,以上怎么写成一行?

超过两个变量就不能赋值了,奇怪
回复

使用道具 举报

1308#
发表于 2021-4-2 09:31:20 | 只看该作者
GRUB4DOS——难得的好东西
回复

使用道具 举报

1309#
发表于 2021-4-2 10:52:58 | 只看该作者
hhh333 发表于 2021-3-31 23:14
另外,想建议这个叫Grub4EFI,简称G4E;原来那个简称G4D,应该挺好的。

支持一下,还叫DOS不太合适了
回复

使用道具 举报

1310#
发表于 2021-4-2 15:47:04 | 只看该作者
uefi下怎么引导img不行了
回复

使用道具 举报

1311#
发表于 2021-4-4 22:56:19 来自手机 | 只看该作者
grub4dos for efi 叫起来确实很别扭,
回复

使用道具 举报

1312#
 楼主| 发表于 2021-4-6 10:16:06 | 只看该作者
1、用OSCDIMG制作的UDF格式ISO,使用bmp格式的背景图片

@hhh333
请测试一下,看看批处理是否正常了;看看udf光盘加载中文字体是否正常了;看看光盘加载图像是否正常了。

BOOTX64.rar

137.13 KB, 下载次数: 15, 下载积分: 无忧币 -2

点评

简单试了一下: 1、变量只能定义两个的问题已经解决,但checkrange 0xA0:0xFF read *0x82A0不能执行了,以前的可以执行并得到启动设备号; [attachimg]477798[/attachimg] 2、UDF光盘加载BMP图形不成功,中文字体  详情 回复 发表于 2021-4-6 11:14
好的,争取尽快测试  详情 回复 发表于 2021-4-6 10:36
回复

使用道具 举报

1313#
发表于 2021-4-6 10:36:37 | 只看该作者
2011yaya2007777 发表于 2021-4-6 10:16
@hhh333
请测试一下,看看批处理是否正常了;看看udf光盘加载中文字体是否正常了;看看光盘加载图像是 ...

好的,争取尽快测试
回复

使用道具 举报

1314#
发表于 2021-4-6 11:14:42 | 只看该作者
2011yaya2007777 发表于 2021-4-6 10:16
@hhh333
请测试一下,看看批处理是否正常了;看看udf光盘加载中文字体是否正常了;看看光盘加载图像是 ...

简单试了一下:
1、变量只能定义两个的问题已经解决,但checkrange 0xA0:0xFF read *0x82A0不能执行了,以前的可以执行并得到启动设备号;

2、UDF光盘加载BMP图形不成功,中文字体不显示

回复

使用道具 举报

1315#
 楼主| 发表于 2021-4-6 11:45:00 来自手机 | 只看该作者
本帖最后由 2011yaya2007777 于 2021-4-6 11:47 编辑

checkrange 0xA0:0xFF read #0x82A0
图像,字体是压缩的吗?试一试不压缩的。

点评

字体不压缩可以显示,图像不压缩还是不能显示  详情 回复 发表于 2021-4-6 12:17
回复

使用道具 举报

1316#
发表于 2021-4-6 12:17:00 | 只看该作者
本帖最后由 hhh333 于 2021-4-6 12:20 编辑
2011yaya2007777 发表于 2021-4-6 11:45
checkrange 0xA0:0xFF read #0x82A0
图像,字体是压缩的吗?试一试不压缩的。

字体不压缩可以显示,BMP图像不压缩还是不能显示。但JPG格式的可以显示上半屏。
回复

使用道具 举报

1317#
 楼主| 发表于 2021-4-6 12:32:11 来自手机 | 只看该作者
本帖最后由 2011yaya2007777 于 2021-4-6 12:37 编辑

确认一下,图像的分辨率是否与屏幕的分辨率一致。压缩字体是gz格式吗?

点评

一致的,为1024X768,压缩字体是GZ标准压缩格式  详情 回复 发表于 2021-4-6 12:52
回复

使用道具 举报

1318#
发表于 2021-4-6 12:50:51 | 只看该作者
本帖最后由 hhh333 于 2021-4-6 21:05 编辑

调用其他启动器的能力测试(目前只测试从CD启动,回头再测试HDD方式):
1、转grub2和xorboot两个启动器成功,转rEfind失败,但再转回G4E不成功;
2、CD启动时不能直接chainloder msbootx64,要通过shellx64二传

HDD下以G4E做一启,转xorboot/rEfind/grub2均没有问题,且还可以转回来。
回复

使用道具 举报

1319#
发表于 2021-4-6 12:52:00 | 只看该作者
本帖最后由 hhh333 于 2021-4-6 12:56 编辑
2011yaya2007777 发表于 2021-4-6 12:32
确认一下,图像的分辨率是否与屏幕的分辨率一致。压缩字体是gz格式吗?

一致的,为1024X768,压缩字体是GZ标准压缩格式
这种格式下正常


回复

使用道具 举报

1320#
发表于 2021-4-7 10:16:41 | 只看该作者
使用精简字体文件英文不显示的问题请也看一下
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-12-2 22:03

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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