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

[原创] GRUB4DOS for UEFI

   火... [复制链接]
发表于 2021-5-22 14:19:54 | 显示全部楼层
本帖最后由 2011whp 于 2021-5-31 09:20 编辑
hhh333 发表于 2021-5-22 12:27
老大,现在这个表现形式的效果是达到了,但是,我前面已经说了,装载hotkey或hotkey.mod也没什么问题,现 ...

我这有 两种 死机的 情况,你的 加 root 方法 ,也不好使

见前几楼的 图  ,hhh333 你的 bios  开兼容模式 了吗



点评

我的是VM虚拟机ISO文件光盘启动也死,G4D哪么玩也不死  详情 回复 发表于 2021-5-22 16:09
回复

使用道具 举报

发表于 2021-5-22 16:09:15 | 显示全部楼层
2011whp 发表于 2021-5-22 14:19
我这有 两种 死机的 情况,你的 加 root 方法 ,也不好使

见前几楼的 图  ,hhh333 你的 bio ...

我的是VM虚拟机ISO文件光盘启动也死,G4D哪么玩也不死
回复

使用道具 举报

 楼主| 发表于 2021-5-22 19:08:02 | 显示全部楼层
本帖最后由 2011yaya2007777 于 2021-5-22 19:09 编辑

测试外部命令死机的原因找到了。
为了同时测试g4e和g4d,在根目录下放置了grldr和g4d的hotkey,在/efi/grub/放置了g4e的hotkey.
启动uefi,进入命令行,执行hotkey,死机。

查找外部命令的顺序如下:
如果是以 '(' 或 '/' 开头的FILE认为是一个绝对路径的文件.直接打开。
否则
1.先查找用INSMOD加载的命令。
2.使用当前root下的同名文件。
3.使用默认位置里面的同名文件。

没有使用INSMOD加载hotkey,所以在当前root下查到hotkey,执行它。
这个hotkey是g4d的,必然死机!
删除根目录的hotkey,再试一试,一切OK!

点评

如果把title全部去掉,不会死机,直接进命令行,再运行hotkey,只出现用法说明,没有安装的信息,说明hotkey已经安装了,这也说明安装hotkey后,title语句引起了死机,两者冲突了  详情 回复 发表于 2021-5-23 06:45
还是没找到,我们不是这么玩的。G4D的放在BOOT/GRUB/EXT下,G4E放在/EFI/gurb/ext下。  详情 回复 发表于 2021-5-22 22:49
回复

使用道具 举报

发表于 2021-5-22 22:49:43 | 显示全部楼层
2011yaya2007777 发表于 2021-5-22 19:08
测试外部命令死机的原因找到了。
为了同时测试g4e和g4d,在根目录下放置了grldr和g4d的hotkey,在/efi/gru ...

还是没找到,我们不是这么玩的。G4D的放在BOOT/GRUB/EXT下,G4E放在/EFI/gurb/ext下。
回复

使用道具 举报

发表于 2021-5-23 06:45:46 | 显示全部楼层
2011yaya2007777 发表于 2021-5-22 19:08
测试外部命令死机的原因找到了。
为了同时测试g4e和g4d,在根目录下放置了grldr和g4d的hotkey,在/efi/gru ...

如果把title全部去掉,不会死机,直接进命令行,再运行hotkey,只出现用法说明,没有安装的信息,说明hotkey已经安装了,这也说明安装hotkey后,title语句引起了死机,两者冲突了
回复

使用道具 举报

发表于 2021-5-23 07:18:42 | 显示全部楼层
本帖最后由 hhh333 于 2021-5-23 07:33 编辑

哈哈,清晨起来就作试验,终于知道冲突在什么地方了,这是脚本
  1. terminal console
  2. debug off
  3. timeout 30

  4. #设置第一项为默认值
  5. graphicsmode -1 1024
  6. font /BOOT/GRUB/UNIFONT.HEX
  7. #splashimage /BOOT/GRUB/BACK.BMP.GZ
  8. set EFIEXT=/EFI/grub/ext
  9. command --set-path=()/EFI/grub/ext

  10. #字距与行距
  11. terminal --font-spacing=0:3

  12. #设置菜单框
  13. setmenu --box x=16 w=90 y=5 h=28 l=0 --lang=zh --ver-off

  14. #判断32或64位
  15. calc *0x8272&0xff > nul ;; set arch=%@retval%
  16. if "%arch%"=="64" && set IA=x64 ! set IA=ia32 && set arch=PE

  17. #启用热键
  18. ()/EFI/grub/ext/hotkey
  19. setmenu --hotkey-color=0xffff
  20. #root ()/EFI/grub
  21. commandline

  22. setmenu --auto-num-on --string=32=3=0xffff00="Grub4EFI CD启动菜单" --string=50=-6=0x00FF33="date&time"

  23. title 启动 Win 8/8.1/10 PE
  24. chainloader /EFI/boot/shell%IA%.efi -delay 0 -nomap

  25. title 启动 Sli^taz Linux 系统
  26. kernel /EFI/boot/bzboot%IA%.efi rw root=/dev/null vga=normal lang=zh_CN kmap=us tz=Asia/Shanghai autologin
  27. initrd /BOOT/rootfs.gz

  28. title [X]转 Xorboot 启动
  29. chainloader /EFI/boot/xorboot%IA%.efi

  30. title [G]转 Grub2 启动
  31. chainloader /efi/boot/g2boot%IA%.efi

  32. title [R]重启
  33. reboot

  34. title [S]关机
  35. halt
复制代码

很有意思,只要不加载背景图片,hotkey就不与title冲突。中途进命令行,可以检验hotkey是不是安装了,这个时候也没到死机的时候,可以随便看。按ESC退出命令行。
试验了如下几种情况:
1、不加字体、背景、不进图形模式:没有问题,热键也有效,但不能按指定颜色显示
2、进图形模式,加字体,不加背景:没有问题,热键也有效,且按指定颜色显示
3、进图形模式,加字体,加背景:死机
---------------------------------
4、又把图片改成JPG格式:一切正常

说明是与GZ压缩的BMP图片冲突





点评

为了避免冲突我把背景图片全换成JPG了,测试一切正常  详情 回复 发表于 2021-5-24 07:39
为了避免冲突我把背景图片全换成JPG了,测试一切正常  详情 回复 发表于 2021-5-24 07:38
回复

使用道具 举报

发表于 2021-5-24 07:38:43 | 显示全部楼层
hhh333 发表于 2021-5-23 07:18
哈哈,清晨起来就作试验,终于知道冲突在什么地方了,这是脚本

很有意思,只要不加载背景图片,hotkey就 ...

为了避免冲突我把背景图片全换成JPG了,测试一切正常
回复

使用道具 举报

发表于 2021-5-24 07:39:08 | 显示全部楼层
hhh333 发表于 2021-5-23 07:18
哈哈,清晨起来就作试验,终于知道冲突在什么地方了,这是脚本

很有意思,只要不加载背景图片,hotkey就 ...

为了避免冲突我把背景图片全换成JPG了,测试一切正常
回复

使用道具 举报

发表于 2021-5-24 17:22:14 | 显示全部楼层
本帖最后由 Sped_Xu 于 2021-5-24 17:23 编辑

虽然不知道大神说的什么,但是看起来绝对很厉害的样子!!
回复

使用道具 举报

发表于 2021-5-25 08:44:27 | 显示全部楼层
Climbing 发表于 2021-5-2 21:57
好吧,你说的对,按你说的这个过程,这确实是一件非常复杂的事情,我已经准备放弃了。

但我必须澄清一 ...

我理解你的需求,因为我也有类似需求,持续关注中。
回复

使用道具 举报

发表于 2021-5-25 09:37:30 | 显示全部楼层
yaya,可以发布新版了吗?
回复

使用道具 举报

发表于 2021-5-25 11:29:37 | 显示全部楼层
估计  UEFI  输入终端  的 工作机制 有变化

以前是中断机制:  键盘 按键  到 机内的控制 芯片 ,芯片会发起中断信号,进而执行 中断处理程序,进而 调用 终端的处理程序。

现在 可能是:  键盘 按键  到 机内的控制 芯片 , UEFI轮询程序,读控制芯片 ,看 有没有 按键,有的话处理。终端的处理,是不是也成了 轮询 机制了

  
回复

使用道具 举报

 楼主| 发表于 2021-5-25 12:14:00 来自手机 | 显示全部楼层
是的

点评

我上面提到的hotkey与GZ压缩BMP格式背景图片相冲突的问题解决没有  详情 回复 发表于 2021-5-25 19:35
回复

使用道具 举报

发表于 2021-5-25 19:35:43 | 显示全部楼层
本帖最后由 hhh333 于 2021-5-25 19:38 编辑

我上面提到的hotkey与GZ压缩BMP格式背景图片相冲突的问题解决没有。记得以前G4D中的hotkey在我这里也不能用,后面一次才解决的,不知是不是这个冲突问题,是的话应该就有思路
回复

使用道具 举报

 楼主| 发表于 2021-5-25 20:18:13 来自手机 | 显示全部楼层
不知道为什么这个gz压缩的bmp与热键冲突。换其他的没有这个现象。

点评

用原文件不压缩的BMP可以通过  详情 回复 发表于 2021-5-25 20:57
是不是解压以后文件有点大,BMP本来就大些  详情 回复 发表于 2021-5-25 20:50
回复

使用道具 举报

发表于 2021-5-25 20:50:35 | 显示全部楼层
2011yaya2007777 发表于 2021-5-25 20:18
不知道为什么这个gz压缩的bmp与热键冲突。换其他的没有这个现象。

是不是解压以后文件有点大,BMP本来就大些
回复

使用道具 举报

发表于 2021-5-25 20:57:35 | 显示全部楼层
2011yaya2007777 发表于 2021-5-25 20:18
不知道为什么这个gz压缩的bmp与热键冲突。换其他的没有这个现象。

我刚才用原文件不压缩的BMP可以通过,解压过程有问题?
回复

使用道具 举报

 楼主| 发表于 2021-5-25 21:37:16 来自手机 | 显示全部楼层
可能是。也许是压缩软件的问题。或许是版本问题?使用jpg格式挺好,体积小,不用压缩。

点评

那请重新发布一下支持新版hotkey的g4e和g4d吧  详情 回复 发表于 2021-5-25 21:49
最先的G4D不支持JPG,后来支持了也没改,沿用至今,现在改JPG占空间更小  详情 回复 发表于 2021-5-25 21:47
回复

使用道具 举报

发表于 2021-5-25 21:47:40 | 显示全部楼层
2011yaya2007777 发表于 2021-5-25 21:37
可能是。也许是压缩软件的问题。或许是版本问题?使用jpg格式挺好,体积小,不用压缩。

最先的G4D不支持JPG,后来支持了也没改,沿用至今,现在改JPG占空间更小
回复

使用道具 举报

发表于 2021-5-25 21:49:43 | 显示全部楼层
2011yaya2007777 发表于 2021-5-25 21:37
可能是。也许是压缩软件的问题。或许是版本问题?使用jpg格式挺好,体积小,不用压缩。

那请重新发布一下支持新版hotkey的g4e和g4d吧
回复

使用道具 举报

 楼主| 发表于 2021-5-25 21:57:06 来自手机 | 显示全部楼层
还有点小改动,就快完了。

点评

这个hotkey是不是也有32位64位之分,现在32位中黑屏来不起,如果是mod性质应该有32位和64位的区别  详情 回复 发表于 2021-5-29 06:07
回复

使用道具 举报

发表于 2021-5-28 19:35:45 | 显示全部楼层
本帖最后由 wintoflash 于 2021-5-28 20:15 编辑

请教一下,grub4dos的.mod文件是怎么制作的,有没有开源的工具可以制作.mod文件?
---------------------------
这两天把grub2的grub-mkimage程序单独给弄了出来:https://github.com/grub4dos/mkimage
并对其做了点修改,现在可以不需要 moddep.lst 就可以生成 EFI 文件了。
而且还可以向 EFI 中附加任意文件。不过我还没想好这部分在 grub4dos 里面如何对接,是应该附加 .mod 还是附加外部命令/字库之类的东西。
grub4dos.7z (579.54 KB, 下载次数: 8)
示例命令:
mkimage.exe -p /efi/grub -o BOOTX64.EFI -O x86_64-efi -c menu.lst fat fwsetup ver cpuid
不过这些附加的外部命令暂时没法用。
回复

使用道具 举报

发表于 2021-5-29 06:07:11 | 显示全部楼层
本帖最后由 hhh333 于 2021-5-29 06:27 编辑
2011yaya2007777 发表于 2021-5-25 21:57
还有点小改动,就快完了。

这个hotkey是不是也有32位64位之分,现在32位中黑屏来不起,如果是mod性质应该有32位和64位的区别

刚才又试了其他外部命令,在32位下都黑屏
回复

使用道具 举报

 楼主| 发表于 2021-5-29 07:21:55 来自手机 | 显示全部楼层
所有的外部命令目前都是64位的。

点评

能不能像DOS一样用command --set-path=a;b;c形式给外部命令或批处理设搜索路径?  详情 回复 发表于 2021-5-29 10:43
能编译32位的吗?  详情 回复 发表于 2021-5-29 07:32
回复

使用道具 举报

发表于 2021-5-29 07:32:07 | 显示全部楼层
2011yaya2007777 发表于 2021-5-29 07:21
所有的外部命令目前都是64位的。

能编译32位的吗?统一放ext32
回复

使用道具 举报

 楼主| 发表于 2021-5-29 08:30:52 | 显示全部楼层
grub4dos的.mod文件是怎么制作的,有没有开源的工具可以制作.mod文件?

FILE.MOD 是使用 makemod 程序生成的外部命令合集,免去多次使用insmod加载外部命令的麻烦。也可以使用Fbinsttool工具来制作 FILE.MOD 文件。
使用 insmod FILE.MOD 加载。

makemod这个工具没有找到。
不知道 FILE.MOD 的内部结构。chenall 应当清楚。
回复

使用道具 举报

 楼主| 发表于 2021-5-29 08:44:39 | 显示全部楼层
这两天把grub2的grub-mkimage程序单独给弄了出来

以前你在64位操作系统编译,需要grub-mkimage64(chenall 却不需要),而在32位系统编译,需要 grub-mkimage。现在单独弄了出来,可否合二为一?

grub-mkimage64 编译使用 grub_pe64_optional_header,而 grub-mkimage 编译使用 grub_pe32_optional_header 。
bootx64.efi 无论使用 grub_pe64_optional_header 还是 grub_pe32_optional_header ,都可以正常运行,使用 grub_pe32_optional_header 体积小一些,建议统一为 grub_pe32_optional_header 。

点评

这是另一码事。github actions 的 linux 环境是没有 32 位库的,只能执行纯 64 位 linux 程序,所以我放了个 64 位的。 你确定吗?我看 grub-mkimage 的源码,好像是根据目标镜像是 i386-efi 还是 x86_64-efi  详情 回复 发表于 2021-5-29 10:32
回复

使用道具 举报

 楼主| 发表于 2021-5-29 08:57:23 | 显示全部楼层
而且还可以向 EFI 中附加任意文件。不过我还没想好这部分在 grub4dos 里面如何对接,是应该附加 .mod 还是附加外部命令/字库之类的东西。

我觉得把外部命令打包成 FILE.MOD 比较好。
现在是程序启动时判断有无预置菜单,有就加载。
将来程序可以判断有无预置 MOD,有就使用 insmod 加载。

建议再增加一个参数来区别预置菜单及 MOD,不知有无必要。
如:mkimage.exe -p /efi/grub -o BOOTX64.EFI -O x86_64-efi -c menu.lst -m fat fwsetup ver cpuid
grub-mkimag 把 fat fwsetup ver cpuid 打包为 FILE.MOD 。

字库现在就可以附加在预置菜单末尾,如:
0000:0000000000000000000000000000000000000000000000000000000000000000#,DotSize=16
91CD:00000000000001E03E0002007FF022203FE022203FE002003FE002007FF00000
73B0:00000000000000007BE0122012A012A07AA012A012A011401940625004300000
7528:00000000000000003FE0222022203FE0222022203FE022202220222040E00000
5047:00000000000010001EF02A102A106EF028002EF028902E90286028A029100000
88C5:000000000000488028800FF0188028804BE002007FF0050018A06A400C300000
8FD9:0000000000002100108007F00020722011401080114012201410280047F00000
4E2A:0000000000000200020005000880124062300200020002000200020002000000
83DC:00000000000008807FF0088000E07F002440128002007FF00A80124062300000
5355:000000000000104008803FE022203FE022203FE002007FF00200020002000000
53EF:00000000000000007FF0002000203F202120212021203F202020002000E00000
542F:000000000000020001001FF0101010101FF010001FF0181028102FF048100000
52A8:00000000000000803880008001F07C9010902090289044907D10011002600000

点评

insmod 加载mod或外部命令,能自己判断出外部命令的体积大小吗? 比如 insmod (md)0x1234+2,这样会导致加载的mod文件大小有问题。  详情 回复 发表于 2021-5-29 14:00
回复

使用道具 举报

 楼主| 发表于 2021-5-29 10:07:04 | 显示全部楼层
wintoflash 请教一下,官网编译的外部命令不带 .MOD,而本地编译的外部命令带 .MOD。
都是一样的编译指令,不知为什么。按 grub4dos 的本意,.MOD 是外部命令的集合。所以单个外部命令不应当带.MOD。有没有办法编译时不带.MOD,或者编译完毕去掉这个尾缀。

点评

我这边编译出来的不带.mod啊???  详情 回复 发表于 2021-5-29 11:08
回复

使用道具 举报

发表于 2021-5-29 10:23:57 | 显示全部楼层
本帖最后由 2011whp 于 2021-6-6 21:13 编辑

编译环境搭建 学习贴:
[求助] grub4dos for uefi 编译环境搭建出错
       http://bbs.wuyou.net/forum.php?m ... 4635&extra=page%3D1

grub4dos_BIOS和grub4dos_UEFI编译环境搭建(ubuntu14.04)
       http://bbs.wuyou.net/forum.php?m ... 5582&extra=page%3D1



回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-7-13 05:31

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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