无忧启动论坛

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

[已解决] G4E 2022-12-27 内置菜单中的configfile似乎不能正确跳转

  [复制链接]
跳转到指定楼层
1#
发表于 2023-1-30 01:35:19 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
本帖最后由 sunsea 于 2023-2-8 17:34 编辑

结论:从g4d时代就有的内置菜单处理机制问题,内置菜单结尾必须要有一个换行符才认识。



如题所示。部署至本地硬盘。机器为联想拯救者Y720-15IKB。
G4E bootx64.efi中内嵌菜单如下,其中menu.lst和bootx64.efi都在esp分区,无论是用于压制内嵌菜单的菜单文件还是调用的/efi/grub/menu.lst都使用UTF8无bom格式保存:
  1. #本文件的唯一目的是立刻查找外挂菜单并加载。
  2. root (bd)
  3. configfile ()/efi/grub/menu.lst
复制代码

压制bootx64.efi的命令如下:
  1. @echo off
  2. pushd "%~dp0"
  3. rem mkimage.exe -d ./x86_64-efi -p /efi/grub -o BOOTX64.EFI -O x86_64-efi -c ./menu.lst -f 嵌入字库 -m 嵌入模块
  4. mkimage.exe -d ./x86_64-efi -p /efi/grub -o BOOTX64.EFI -O x86_64-efi -c ./menu.lst
  5. pause
复制代码

在真机中,正常启动后提示如下:


此时手动输入configfile ()/efi/grub/menu.lst则可正常进入菜单并且一切行为正常。包括在菜单中再使用configfile也正常:


Qemu虚拟机中可以复现该错误。加入debug 3以后无论是在虚拟机还是在真机中提示不变,截图如下:


部署于U盘环境中的类似菜单也在真机和虚拟机上出现了类似错误。

附:/efi/grub/menu.lst
  1. !BAT
  2. debug 1
  3. set prefix=%@root%
  4. graphicsmode -1 1920
  5. splashimage /efi/grub/splash.hd.bmp.lzma
  6. font /efi/grub/unifont.hex.lzma
  7. #load /efi/grub/ntfs_x64.efi
  8. pause --wait=5 等你5秒,按W加载可读写ntfs驱动,按R加载只读ntfs驱动,不按键或者其他键不加载。两个驱动都是测试性的!如果有快速启动等功能不要加载!
  9. # r 0x72 114 w 0x77 119
  10. set tempbuf=%@retval%
  11. if "%tempbuf%"=="114" load /efi/grub/ntfs_x64.efi
  12. if "%tempbuf%"=="114" echo 检测到您按了R,加载只读驱动……
  13. if "%tempbuf%"=="119" load /efi/grub/ntfs_x64_rw.efi
  14. if "%tempbuf%"=="119" echo 检测到您按了W,加载可读写驱动……(测试性!)
  15. set sig_file=
  16. set wim_file=
  17. default 1

  18. title -------启动菜单,不要选这里------
  19. find --set-root %sig_file%
  20. uuid %@root%
  21. kernel %prefix%/efi/grub/ntloader/ntloader uuid=%?% file=%wim_file% hires=1 minint=1
  22. initrd %prefix%/efi/grub/ntloader/initrd.lz1
  23. boot

  24. title 正常渠道启动Windows
  25. find --set-root /EFI/Microsoft/Boot/myharddisk.txt
  26. chainloader /EFI/Microsoft/Boot/bootmgfw.efi
  27. root %@root%
  28. boot

  29. title 加载本地Archlinux的Grub2菜单
  30. find --set-root /EFI/Microsoft/Boot/myharddisk.txt
  31. chainloader /EFI/arch-grub2/grubx64.efi
  32. root %@root%
  33. boot

  34. title 直入Archlinux 正常内核
  35. find --set-root /boot/intel-ucode.img
  36. uuid ()
  37. kernel /boot/vmlinuz-linux root=UUID=%?_UUID% rw splash loglevel=3 splash
  38. initrd /boot/intel-ucode.img /boot/initramfs-linux.img

  39. title 直入Archlinux 正常内核 恢复模式
  40. find --set-root /boot/intel-ucode.img
  41. uuid ()
  42. kernel /boot/vmlinuz-linux root=UUID=%?_UUID% rw single splash
  43. initrd /boot/intel-ucode.img /boot/initramfs-linux-fallback.img

  44. title 直入Archlinux LTS
  45. find --set-root /boot/intel-ucode.img
  46. uuid ()
  47. kernel /boot/vmlinuz-linux-lts root=UUID=%?_UUID% rw splash loglevel=3 splash
  48. initrd /boot/intel-ucode.img /boot/initramfs-linux-lts.img

  49. title 直入Archlinux LTS 恢复模式
  50. find --set-root /boot/intel-ucode.img
  51. uuid ()
  52. kernel /boot/vmlinuz-linux-lts root=UUID=%?_UUID% rw single splash
  53. initrd /boot/intel-ucode.img /boot/initramfs-linux-lts-fallback.img

  54. title HHH333 PE Win11 x64
  55. set sig_file=/BOOT/H3_1164.WIM
  56. set wim_file=%sig_file%
  57. fallback 0
  58. kernel


  59. title HHH333 PE Win10 x64
  60. set sig_file=/BOOT/H3_1064.WIM
  61. set wim_file=%sig_file%
  62. fallback 0
  63. kernel


  64. title HHH333 PE Win8.1 x64
  65. set sig_file=/BOOT/H3_8164.WIM
  66. set wim_file=%sig_file%
  67. fallback 0
  68. kernel


  69. title HHH333 PE Win8 x64
  70. set sig_file=/BOOT/H3_864.WIM
  71. set wim_file=%sig_file%
  72. fallback 0
  73. kernel


  74. title 0PE Win10 PE 64 (EFI)
  75. set sig_file=/0PE/0PENB.LZMA
  76. set wim_file=/efi/boot.wim
  77. fallback 0
  78. kernel



  79. title Grub2FM 万能文件管理与启动器 By a1ive
  80. map %prefix%/efi/grub/grubfm.iso (0xff)
  81. chainloader (0xff)
  82. boot

  83. title Sltiaz 便携Linux \n root密码root。用户tux,密码tux
  84. find --set-root /IMGs/slitaz-core64.iso
  85. map /IMGs/slitaz-core64.iso (0xff)
  86. chainloader (0xff)
  87. boot

  88. title StartOS (不保存数据) \n root密码:Loongson,其他普通用户如live均为live
  89. find --set-root /startos/boot/initramfs.img
  90. uuid ()
  91. kernel /startos/boot/vmlinuz squashfs=UUID=%?%:/startos/sfs ro splash _tmpfs=y
  92. initrd /startos/boot/initramfs-fallback.img

  93. title 试图查找本地的Windows x64并启动
  94. find --set-root /Windows/System32/Boot/winload.efi
  95. uuid %@root%
  96. kernel %prefix%/efi/grub/ntloader/ntloader uuid=%?% hires=1
  97. initrd %prefix%/efi/grub/ntloader/initrd.lz1
  98. boot


  99. title 试图查找本地的Windows 7 x64并启动(WIN7专用入口!)
  100. find --set-root /Windows/System32/Boot/winload.efi
  101. uuid %@root%
  102. kernel %prefix%/efi/grub/ntloader/ntloader uuid=%?% hires=1 win7
  103. initrd %prefix%/efi/grub/ntloader/initrd.lz1
  104. boot

  105. title H3PE 原版grub2菜单
  106. find --set-root /EFI/boot/g2bootx64.efi
  107. chainloader /EFI/boot/g2bootx64.efi
  108. boot

  109. title H3PE 原版grub4efi菜单
  110. find --set-root /EFI/boot/g4bootx64.efi
  111. configfile ()/EFI/grub/h3_gr2hd.lst

  112. title USM 启动Windows_11PE_64位_全能娱乐版(支持声、显、网卡)
  113. set sig_file=/boot/usm1pe6F.wim
  114. set wim_file=%sig_file%
  115. fallback 0
  116. kernel

  117. title USM 启动Windows_11PE_64位_精简维护版
  118. set sig_file=/boot/usm1pe6L.wim
  119. set wim_file=%sig_file%
  120. fallback 0
  121. kernel


  122. title USM 启动Windows_8PE__64位_全能娱乐版(支持声、显、网卡)
  123. set sig_file=/boot/usm8pe6F.wim
  124. set wim_file=%sig_file%
  125. fallback 0
  126. kernel


  127. title USM 启动Windows_8PE__64位_精简维护版
  128. set sig_file=/boot/usm8pe6L.wim
  129. set wim_file=%sig_file%
  130. fallback 0
  131. kernel

  132. title USM 启动Windows_7PE__64位_精简维护版
  133. set sig_file=/boot/USM7PE6L.WIM
  134. set wim_file=/boot/USM7PE6L.WIM win7
  135. fallback 0
  136. kernel

  137. title 查找Archlinux-monthly.iso并启动
  138. find --ignore-floppies --set-root /archlinux-monthly.iso
  139. uuid ()
  140. map /archlinux-monthly.iso (0xff)
  141. kernel (0xff)/arch/boot/x86_64/vmlinuz-linux img_dev="/dev/disk/by-uuid/%?_UUID%" img_loop="/archlinux-monthly.iso" earlymodules=loop
  142. initrd (0xff)/arch/boot/intel-ucode.img (0xff)/arch/boot/amd-ucode.img (0xff)/arch/boot/x86_64/initramfs-linux.img
  143. boot


  144. title 退出grub4dos
  145. exit_g4d

  146. title 命令行
  147. commandline

  148. title 重启计算机
  149. reboot

  150. title 关闭计算机
  151. halt
复制代码



49#
发表于 2024-11-7 11:30:30 | 只看该作者
赞赞
回复

使用道具 举报

48#
发表于 2023-12-9 04:14:18 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

47#
发表于 2023-3-7 21:25:36 | 只看该作者
学习
回复

使用道具 举报

46#
发表于 2023-3-7 12:06:39 来自手机 | 只看该作者
学习
回复

使用道具 举报

45#
发表于 2023-3-6 18:24:29 | 只看该作者
看了楼主分享的教程,感觉楼主大佬是个牛人啊
回复

使用道具 举报

44#
发表于 2023-2-25 12:35:52 来自手机 | 只看该作者
强强强
回复

使用道具 举报

43#
 楼主| 发表于 2023-2-24 14:01:57 | 只看该作者
2011yaya2007777 发表于 2023-2-23 17:19
报告超版,新版本解决了几个问题:
1. 屏幕分辨率大于1600*1200时覆盖字库的问题。现在字体尺寸、屏幕分辨 ...

挺好!感谢!
回复

使用道具 举报

42#
发表于 2023-2-23 17:19:22 | 只看该作者
报告超版,新版本解决了几个问题:
1. 屏幕分辨率大于1600*1200时覆盖字库的问题。现在字体尺寸、屏幕分辨率都不受限制。
   与屏幕分辨率有关,与图像尺寸无关。
2. 菜单最后一行没有换行符而缺失的问题。
   修正前,g4d的压缩菜单受影响。g4e的菜单压缩与否都受影响。

点评

挺好!感谢!  详情 回复 发表于 2023-2-24 14:01

评分

参与人数 1无忧币 +10 收起 理由
sunsea + 10 很给力!

查看全部评分

回复

使用道具 举报

41#
 楼主| 发表于 2023-2-9 08:17:22 | 只看该作者
2011yaya2007777 发表于 2023-2-8 20:04
试试这个版本,改进了,不知是否解决了。

如果你说的是29#的话,那么确实解决问题了,可以正常填满屏幕了,谢谢!
回复

使用道具 举报

40#
发表于 2023-2-8 21:16:11 来自手机 | 只看该作者
可以肯定不是新版本的问题。或许是RUN指定的图像分辨率,BIOS不支持吧。看看RUN有没有入口参数可以设置分辨率。没有的话,只能修改RUN。
回复

使用道具 举报

39#
发表于 2023-2-8 20:51:33 | 只看该作者
2011yaya2007777 发表于 2023-2-8 17:42
因为我大概看了看,比较麻烦。喜欢内置菜单的人,大多是要压缩的。难不成还要解开菜单,加一个换行符,再压 ...

最近学习grub4dos,用RUN时确实出现了花屏问题,不知是不是新版引起,不过搜索发现很早前有人就遇到过这个问题,得到的回复是BIOS的问题
回复

使用道具 举报

38#
发表于 2023-2-8 20:04:33 来自手机 | 只看该作者
试试这个版本,改进了,不知是否解决了。

点评

如果你说的是29#的话,那么确实解决问题了,可以正常填满屏幕了,谢谢!  详情 回复 发表于 2023-2-9 08:17
回复

使用道具 举报

37#
 楼主| 发表于 2023-2-8 19:56:27 来自手机 | 只看该作者
2011yaya2007777 发表于 2023-2-8 19:47
主要是懒

太真实了,那就这样吧,菜单我有时间试试怎么占不满屏幕……
回复

使用道具 举报

36#
发表于 2023-2-8 19:47:41 来自手机 | 只看该作者
主要是懒

点评

太真实了,那就这样吧,菜单我有时间试试怎么占不满屏幕……  详情 回复 发表于 2023-2-8 19:56
回复

使用道具 举报

35#
 楼主| 发表于 2023-2-8 18:51:00 | 只看该作者
本帖最后由 sunsea 于 2023-2-8 18:54 编辑
2011yaya2007777 发表于 2023-2-8 17:42
因为我大概看了看,比较麻烦。喜欢内置菜单的人,大多是要压缩的。难不成还要解开菜单,加一个换行符,再压 ...

那就文档提醒一下内置菜单结尾要有个换行符感觉比较好,这样不必实际改动一切维持原样但是用户又不会引发误会。但是预处理内置菜单应该是解压->真正的处理步骤吧?在“真正的处理步骤”之前程序自动加一个换行符在尾巴上……emmm会造成不兼容还是什么问题吗……
回复

使用道具 举报

34#
发表于 2023-2-8 17:42:45 来自手机 | 只看该作者
本帖最后由 2011yaya2007777 于 2023-2-8 18:00 编辑

因为我大概看了看,比较麻烦。喜欢内置菜单的人,大多是要压缩的。难不成还要解开菜单,加一个换行符,再压缩?如果是g4e自己引入的bug,能解决的尽量解决。
如果是g4d遗留的问题,大问题,关键问题尽量同步解决。小问题,尽量不处理。
前些时候有人在管网提出几个小问题,像返回数据多了个空格呀,多了个00呀。我处理了,结果按下葫芦起了瓢,又引起前人写的批处理失效(RUN,SISO)。只得又改回来。



点评

最近学习grub4dos,用RUN时确实出现了花屏问题,不知是不是新版引起,不过搜索发现很早前有人就遇到过这个问题,得到的回复是BIOS的问题  详情 回复 发表于 2023-2-8 20:51
那就文档提醒一下内置菜单结尾要有个换行符感觉比较好,这样不必实际改动一切维持原样但是用户又不会引发误会。  详情 回复 发表于 2023-2-8 18:51
回复

使用道具 举报

33#
 楼主| 发表于 2023-2-8 17:32:55 | 只看该作者
本帖最后由 sunsea 于 2023-2-8 17:34 编辑
2011yaya2007777 发表于 2023-2-8 17:22
内置菜单最后换行符的问题,是历史遗留问题,g4d就有的。好像比较麻烦,不是大问题,就那样吧。

那也行,那感觉文档加一句话说内置菜单结尾要有换行符比较好,免得不懂的人以为是什么问题。或者预处理的时候开始处理之前自动补一个换行符也行?
回复

使用道具 举报

32#
发表于 2023-2-8 17:27:42 来自手机 | 只看该作者
我觉得,批处理及菜单是按行处理的,因此要有明确的换行符。可能就是以前处理的思路吧。前人不认为这是bug。
回复

使用道具 举报

31#
发表于 2023-2-8 17:22:45 来自手机 | 只看该作者
内置菜单最后换行符的问题,是历史遗留问题,g4d就有的。好像比较麻烦,不是大问题,就那样吧。

点评

那也行,那感觉文档加一句话说内置菜单结尾要有换行符比较好,免得不懂的人以为是什么问题。  详情 回复 发表于 2023-2-8 17:32
回复

使用道具 举报

30#
 楼主| 发表于 2023-2-8 17:10:48 | 只看该作者
2011yaya2007777 发表于 2023-2-8 15:38
graphicsmode --test x y
存在返回模式号,不存在返回0。

感谢,测试成功!以及内置菜单最后要有个换行符的问题方便处理吗……
回复

使用道具 举报

29#
发表于 2023-2-8 15:38:23 | 只看该作者
graphicsmode --test x y
存在返回模式号,不存在返回0。

BOOTX64.rar

141.57 KB, 下载次数: 11, 下载积分: 无忧币 -2

点评

感谢,测试成功!以及内置菜单最后要有个换行符的问题方便处理吗……  详情 回复 发表于 2023-2-8 17:10
回复

使用道具 举报

28#
 楼主| 发表于 2023-2-7 21:39:46 | 只看该作者
2011yaya2007777 发表于 2023-2-7 18:26
1. 你是要在命令行执行,还是在批处理执行?
2. 你输入分辨率 x y,函数返回0或者1?
3. 你输入指令,函 ...

1,我是希望给菜单或者批处理用的,命令行手动的话我直接用graphicsmode --info人力判断了。
2,大概是希望有个graphicsmode --test x y这样的,函数返回1表示有,0无这样,然后我可以送checkrange
3,批处理筛选这事大概比较复杂,但是配合WENV也不是不能办,看哪个你方便吧,我不是开发者,以你方便为主,谢谢了。
回复

使用道具 举报

27#
发表于 2023-2-7 18:26:39 | 只看该作者
1. 你是要在命令行执行,还是在批处理执行?
2. 你输入分辨率 x y,函数返回0或者1?
3. 你输入指令,函数返回显卡支持的所有分辨率。你利用批处理筛选?

点评

1,我是希望给菜单用的,命令行我直接用graphicsmode --info人力判断了。 2,大概是希望有个graphicsmode --test x y这样的,函数返回1表示有,0无这样,然后我可以送checkrange 3,批处理筛选这事大概比较复杂,  详情 回复 发表于 2023-2-7 21:39
回复

使用道具 举报

26#
 楼主| 发表于 2023-2-7 17:54:32 | 只看该作者
2011yaya2007777 发表于 2023-2-7 16:03
没有指定的模式,则返回一个显卡支持的模式,这样比返回错误要好一些。

这确实奇怪。可能是新显示模式 ...

那希望能加一个参数能探测显卡支不支持某分辨率。我这是用了不支持的直接后续命令出一大堆奇怪错误然后花屏,怀疑是破坏了什么东西。以及怎么调试菜单的问题呢?
回复

使用道具 举报

25#
发表于 2023-2-7 16:03:28 | 只看该作者
那个电脑跑不支持的模式graphicsmode也不出错

没有指定的模式,则返回一个显卡支持的模式,这样比返回错误要好一些。
奇怪为什么菜单没有setmenu --box也不占满屏幕……

这确实奇怪。可能是新显示模式的分辨率没有传递过来。

现在屏幕显示的信息,保存到内存,过滤分辨率好像有点复杂。
比如输出:
模式 x像素 y像素 模式 x像素 y像素 ...
这样比较容易一些。

点评

那希望能加一个参数能探测显卡支不支持某分辨率。我这是用了不支持的直接后续命令出一大堆奇怪错误然后花屏,怀疑是破坏了什么东西。以及怎么调试菜单的问题呢?  详情 回复 发表于 2023-2-7 17:54
回复

使用道具 举报

24#
 楼主| 发表于 2023-2-7 15:21:13 来自手机 | 只看该作者
本帖最后由 sunsea 于 2023-2-7 15:24 编辑
2011yaya2007777 发表于 2023-2-7 13:32
你是想根据不同的分辨率设置不同的菜单?


啊。是支持什么模式用什么菜单……坑爹之处在于那个电脑跑不支持的模式graphicsmode也不出错……还有就是奇怪为什么菜单没有setmenu --box也不占满屏幕……
回复

使用道具 举报

23#
发表于 2023-2-7 13:32:34 来自手机 | 只看该作者
你是想根据不同的分辨率设置不同的菜单?

点评

啊。是支持什么模式用什么菜单……  详情 回复 发表于 2023-2-7 15:21
回复

使用道具 举报

22#
 楼主| 发表于 2023-2-7 09:15:55 | 只看该作者
本帖最后由 sunsea 于 2023-2-7 09:18 编辑
2011yaya2007777 发表于 2023-1-30 10:40
设置了菜单框,就指定了菜单框的位置和尺寸,是绝对值,不随屏幕尺寸改变。
因此设计菜单,一般是指定一 ...

所以还是比较奇怪为什么没有放setmenu --box输出也占不满屏幕。以及有些电脑的固件大概确实比较神奇,开CSM对1024*768的支持就没有了,菜单中使用graphicsmode -1 1024也不报错,就后续命令一大堆Error滚过去然后花屏,只能用800*600。不开CSM屁事没有,1024*768也支持了。不知道g4e什么时候支持文本按行处理想分析graphicsmode --info输出结果自动判断,或者加个命令测试支不支持某个模式。
回复

使用道具 举报

21#
发表于 2023-2-1 20:04:43 | 只看该作者
感谢分享
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-29 01:14

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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