无忧启动论坛

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

[原创] GRUB4DOS for UEFI

    [复制链接]
1561#
 楼主| 发表于 2021-5-22 13:00:05 来自手机 | 只看该作者
本帖最后由 2011yaya2007777 于 2021-5-22 13:01 编辑

没有必要。你把子菜单里的hotkey,修改为/efi/grub/ext/hotkry就可以了。我这里测试过了。

点评

G4D没有g4e像我描述的问题,完全成功  详情 回复 发表于 2021-5-22 13:20
为了避免不必要的错误,我现在是用一个菜单menu.lst来测试的  详情 回复 发表于 2021-5-22 13:03
回复

使用道具 举报

1562#
发表于 2021-5-22 13:03:25 | 只看该作者
本帖最后由 hhh333 于 2021-5-22 13:06 编辑
2011yaya2007777 发表于 2021-5-22 13:00
没有必要。你把子菜单里的hotkey,修改为/efi/grub/ext/hotkry就可以了。我这里测试过了。

为了避免不必要的错误,我现在是用一个菜单menu.lst来测试的 menu.7z (1.33 KB, 下载次数: 18)
回复

使用道具 举报

1563#
发表于 2021-5-22 13:20:29 | 只看该作者
2011yaya2007777 发表于 2021-5-22 13:00
没有必要。你把子菜单里的hotkey,修改为/efi/grub/ext/hotkry就可以了。我这里测试过了。

G4D没有g4e像我描述的问题,完全成功
回复

使用道具 举报

1564#
发表于 2021-5-22 13:52:32 | 只看该作者
本帖最后由 2011whp 于 2021-5-31 09:21 编辑

理一下变量
     1. 启动时 留下的标识数据区(具体 15版帮助的 6.12节  6.14节)
    2. 启动程序 设备块(分区):  %@boot%
    3. (bd) 菜单所在分区,初始值 %@boot%
        configfile 命令 会影响这个值(会记录新的菜单所在分区)
    4. %@path%  外部命令默认目录
            grub> command
            #输出当前外部命令所在文件夹,默认 (bd)/EFI/GRUB/
            command [--set-path=PATH] 可改变
            configfile 的默认参数为最后一次加载的菜单  初始值为 %@path%/menu.lst
    5.  %@root%(当前目录)
        () 为 root的路径 所在分区,随root变化
                               最好不要带 路径,只保持分区,因为 命令行提示符不显示当前目录,容易乱
                                还有 find 命令 的路径参数 会加 上%@root% 中的路路径 也容易乱
    6  系统变量@打头:不可写,只能用相关命令影响  @date  @time  @random  @uefi  @retval
        系统变量?_打头:可以写  也可叫 寄存器型变量  %?%  ?_BOOT  ?_UUID




命令的 名称空间
     1.  以字母开始:  先找内部命令(含insmod)→  %@root% 目录内的文件  →  %@path% 目录内的文件
     2.  以  /   开始:  专门访问%@root% 目录内的文件(可以 住 深层目录定位)
           等效于 command /
     3.  以  (   开始:   绝对 的 文件 路径
               特例:()引用当前 @root 的分区   (bd)引用 当前菜单所在的分区,
     4.   command  hotkey     专门访问  %@path%的命令 hotkey


g4e的 三个  核心变量     
        1. 启动文件 所在分区  %@boot%
        2. 菜单文件 所在分区  (bd)        初始值来源%@boot%
        3.               当前目录  %@root%     初始值来源%@boot%
                          外部命令  备用目录  %@path%           初始值来源  (bd)/ efi/grub

回复

使用道具 举报

1565#
发表于 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
回复

使用道具 举报

1566#
发表于 2021-5-22 16:09:15 | 只看该作者
2011whp 发表于 2021-5-22 14:19
我这有 两种 死机的 情况,你的 加 root 方法 ,也不好使

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

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

使用道具 举报

1567#
 楼主| 发表于 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
回复

使用道具 举报

1568#
发表于 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下。
回复

使用道具 举报

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

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

使用道具 举报

1570#
发表于 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
回复

使用道具 举报

1571#
发表于 2021-5-24 07:38:43 | 只看该作者
hhh333 发表于 2021-5-23 07:18
哈哈,清晨起来就作试验,终于知道冲突在什么地方了,这是脚本

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

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

使用道具 举报

1572#
发表于 2021-5-24 07:39:08 | 只看该作者
hhh333 发表于 2021-5-23 07:18
哈哈,清晨起来就作试验,终于知道冲突在什么地方了,这是脚本

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

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

使用道具 举报

1573#
发表于 2021-5-24 17:22:14 | 只看该作者
本帖最后由 Sped_Xu 于 2021-5-24 17:23 编辑

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

使用道具 举报

1574#
发表于 2021-5-25 08:44:27 | 只看该作者
Climbing 发表于 2021-5-2 21:57
好吧,你说的对,按你说的这个过程,这确实是一件非常复杂的事情,我已经准备放弃了。

但我必须澄清一 ...

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

使用道具 举报

1575#
发表于 2021-5-25 09:37:30 | 只看该作者
yaya,可以发布新版了吗?
回复

使用道具 举报

1576#
发表于 2021-5-25 11:29:37 | 只看该作者
估计  UEFI  输入终端  的 工作机制 有变化

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

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

  
回复

使用道具 举报

1577#
 楼主| 发表于 2021-5-25 12:14:00 来自手机 | 只看该作者
是的

点评

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

使用道具 举报

1578#
发表于 2021-5-25 19:35:43 | 只看该作者
本帖最后由 hhh333 于 2021-5-25 19:38 编辑

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

使用道具 举报

1579#
 楼主| 发表于 2021-5-25 20:18:13 来自手机 | 只看该作者
不知道为什么这个gz压缩的bmp与热键冲突。换其他的没有这个现象。

点评

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

使用道具 举报

1580#
发表于 2021-5-25 20:50:35 | 只看该作者
2011yaya2007777 发表于 2021-5-25 20:18
不知道为什么这个gz压缩的bmp与热键冲突。换其他的没有这个现象。

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

使用道具 举报

1581#
发表于 2021-5-25 20:57:35 | 只看该作者
2011yaya2007777 发表于 2021-5-25 20:18
不知道为什么这个gz压缩的bmp与热键冲突。换其他的没有这个现象。

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

使用道具 举报

1582#
 楼主| 发表于 2021-5-25 21:37:16 来自手机 | 只看该作者
可能是。也许是压缩软件的问题。或许是版本问题?使用jpg格式挺好,体积小,不用压缩。

点评

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

使用道具 举报

1583#
发表于 2021-5-25 21:47:40 | 只看该作者
2011yaya2007777 发表于 2021-5-25 21:37
可能是。也许是压缩软件的问题。或许是版本问题?使用jpg格式挺好,体积小,不用压缩。

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

使用道具 举报

1584#
发表于 2021-5-25 21:49:43 | 只看该作者
2011yaya2007777 发表于 2021-5-25 21:37
可能是。也许是压缩软件的问题。或许是版本问题?使用jpg格式挺好,体积小,不用压缩。

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

使用道具 举报

1585#
 楼主| 发表于 2021-5-25 21:57:06 来自手机 | 只看该作者
还有点小改动,就快完了。

点评

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

使用道具 举报

1586#
发表于 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, 下载次数: 7)
示例命令:
mkimage.exe -p /efi/grub -o BOOTX64.EFI -O x86_64-efi -c menu.lst fat fwsetup ver cpuid
不过这些附加的外部命令暂时没法用。
回复

使用道具 举报

1587#
发表于 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位下都黑屏
回复

使用道具 举报

1588#
 楼主| 发表于 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
回复

使用道具 举报

1589#
发表于 2021-5-29 07:32:07 | 只看该作者
2011yaya2007777 发表于 2021-5-29 07:21
所有的外部命令目前都是64位的。

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

使用道具 举报

1590#
 楼主| 发表于 2021-5-29 08:30:52 | 只看该作者
grub4dos的.mod文件是怎么制作的,有没有开源的工具可以制作.mod文件?

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

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

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-4-27 19:11

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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