无忧启动论坛

标题: grub4dos-0.4.6a-2023-06-09,grub4dos-0.4.6a-2023-06-10无法出现菜单menu.lst 问题 [打印本页]

作者: alex20092009    时间: 2023-4-7 08:24
标题: grub4dos-0.4.6a-2023-06-09,grub4dos-0.4.6a-2023-06-10无法出现菜单menu.lst 问题
本帖最后由 liuzhaoyzz 于 2023-6-11 14:44 编辑

--\grldr,menu.lst
   |--boot<dir>
     |--grub
     |--grub4
         |--grub_menu<mainmenu.lst>  (1024x768)
         |--grub_menu<windows7.lst>  (1024x768)
         |--grub_menu<windows10.lst> (1024x768)
         |--grub_menu<windows11.lst> (1024x768)

***note
1.使用下列版本menu.lst 无法读取到mainmenu.lst,无显示画面
grub4dos-0.4.6a-2023-02-23, grub4dos-0.4.6a-2023-02-28, grub4dos-0.4.6a-2023-03-01, grub4dos-0.4.6a-2023-03-06, grub4dos-0.4.6a-2023-03-29

2.使用下列版本menu.lst(無字) 不讀取mainmenu.lst的顯示
grub4dos-0.4.6a-2023-02-23, grub4dos-0.4.6a-2023-02-28, grub4dos-0.4.6a-2023-03-01, grub4dos-0.4.6a-2023-03-06, grub4dos-0.4.6a-2023-03-29


3.使用下列版本menu.lst(有字) 不讀取mainmenu.lst的顯示
grub4dos-0.4.6a-2022-11-28, grub4dos-0.4.6a-2022-12-22


4使用下列版本menu.lst 读取到mainmenu.lst, windows7.lst,windows10.lst,windows11,lst解析会变成800x600,回到mainmenu.lst解析会变成800x600
grub4dos-0.4.6a-2022-11-28, grub4dos-0.4.6a-2022-12-22



5.使用下列版本menu.lst 读取到mainmenu.lst ,無上述狀況
grub4dos-0.4.6a-2022-10-26




grub4dos-0.4.6a-2022-12-22_00.jpg (524.82 KB, 下载次数: 116)

grub4dos-0.4.6a-2022-12-22_00.jpg

grub4dos-0.4.6a-2023-02-23_00.jpg (393.7 KB, 下载次数: 109)

grub4dos-0.4.6a-2023-02-23_00.jpg

作者: lx5815    时间: 2023-4-7 12:27
感谢分享
作者: aqual7    时间: 2023-4-9 13:17
超级给力,
作者: alex20092009    时间: 2023-6-10 21:00
--\grldr,menu.lst
   |--boot<dir>
     |--grub
     |--grub4
         |--grub_menu<mainmenu.lst>  (1024x768)
         |--grub_menu<windows7.lst>  (1024x768)
         |--grub_menu<windows10.lst> (1024x768)
         |--grub_menu<windows11.lst> (1024x768)

***note
1.使用下列版本menu.lst 无法读取到mainmenu.lst,无显示画面
grub4dos-0.4.6a-2023-06-09,grub4dos-0.4.6a-2023-06-10无法读取到mainmenu.lst
作者: 2011yaya2007777    时间: 2023-6-10 21:24
说了这么多,没有说到点子上。主菜单是怎么调用子菜单的?贴上来。
作者: liuzhaoyzz    时间: 2023-6-10 23:21
我觉得有必要发个贴子,置顶,告诉反馈问题的朋友,开发者需要了解哪些方面的问题,比如g4d/g4e版本,主菜单,硬盘MBR/GPT情况(若有必要)。这方面,我感觉英国人steve6375,还有那个JP95Git,那个墨西哥的alacran(Taviruni),反馈问题都超级棒,感觉给开发者节省了大量的时间和精力。
为啥中国人开发的引导器,国外网友反馈问题到位,国内的一些网友指向性精准反馈并能帮助开发者定位问题的人,太少了。


作者: alex20092009    时间: 2023-6-11 09:36
本帖最后由 alex20092009 于 2023-6-11 09:43 编辑
2011yaya2007777 发表于 2023-6-10 21:24
说了这么多,没有说到点子上。主菜单是怎么调用子菜单的?贴上来。

    |--\grldr , menu.lst
     |--boot
        |--grub
        |--grub4
            |--grub_menu<mainmenu.lst>  (1024x768)
            |--grub_menu<windows7.lst>  (1024x768)
            |--grub_menu<windows10.lst> (1024x768)
            |--grub_menu<windows11.lst> (1024x768)

1. 使用下列版本menu.lst 读取到mainmenu.lst ,無上述狀況
grub4dos-0.4.6a-2022-10-26

2. 从grub4dos-0.4.6a-2022-10-26版本开始以后都会在根目录menu.lst无法去读取\boot\grub4\grub_menu\mainmenu.lst

menu.lst
find --set-root --ignore-floppies --ignore-cd --devices=hf /boot/grub4/grub_menu/mainmenu.lst && configfile /boot/grub4/grub_menu/mainmenu.lst


#title \n
#root
title \n
root
#title   Command-Line
#commandline

title   Reboot Computer
savedefault --wait=2
reboot

title   Turn Off Computer
savedefault --wait=2
halt

mainmenu.lst
title \n
root
title [ Microsoft Windows Operating System Installation Manager ]\n
root
title   Microsoft Windows XP with Service Pack 3 (multi-language) [multi-function mode]
#iftitle [find --ignore-floppies --ignore-cd /boot/grub4/grub_menu/winxp_all.lst]   Microsoft Windows XP   with Service Pack 3   (multi-edition)
find --set-root /boot/grub4/grub_tag/usbdrive.tag > nul
configfile /boot/grub4/grub_menu/winxp_all.lst


title \n
root
title   Microsoft Windows 7  with Service Pack 1 (multi-language)
#iftitle [find --ignore-floppies --ignore-cd /boot/grub4/grub_menu/win7_multi.lst]   Microsoft Windows 7    with Service Pack 1   (multi-edition)
find --set-root /boot/grub4/grub_tag/usbdrive.tag > nul
configfile /boot/grub4/grub_menu/win7_multi.lst

title   Microsoft Windows 7  with Service Pack 1 (multi-language) Tu
#iftitle [find --ignore-floppies --ignore-cd /boot/grub4/grub_menu/win7_multi.lst]   Microsoft Windows 7    with Service Pack 1   (multi-edition)
find --set-root /boot/grub4/grub_tag/usbdrive.tag > nul
configfile /boot/grub4/grub_menu/win7_multi_Tu.lst

title   Microsoft Windows 7  with Service Pack 1 (multi-language) Tut
#iftitle [find --ignore-floppies --ignore-cd /boot/grub4/grub_menu/win7_multi.lst]   Microsoft Windows 7    with Service Pack 1   (multi-edition)
find --set-root /boot/grub4/grub_tag/usbdrive.tag > nul
configfile /boot/grub4/grub_menu/win7_multi_Tut.lst


title \n
root
title   Microsoft Windows 10 version 22h2 updated march 2023 (multi-language)
#iftitle [find --ignore-floppies --ignore-cd /boot/grub4/grub_menu/win10_mainmenu.lst]   Microsoft Windows 10 version 22h2 updated march 2023   (multi-edition)
find --set-root /boot/grub4/grub_tag/usbdrive.tag > nul
configfile /boot/grub4/grub_menu/win10_multi_menu.lst


title \n
root
title   Microsoft Windows 11 version 22h2 updated march 2023 (multi-language)
#iftitle [find --ignore-floppies --ignore-cd /boot/grub4/grub_menu/win11_mainmenu.lst]   Microsoft Windows 11 version 22h2 updated march 2023   (multi-edition)
find --set-root /boot/grub4/grub_tag/usbdrive.tag > nul
configfile /boot/grub4/grub_menu/win11_multi_menu.lst


#title \n
#root
#title   Microsoft Windows Server 2016 editions version   (multi-language)
##iftitle [find --ignore-floppies --ignore-cd /boot/grub4/grub_menu/winsvr.lst]   Microsoft Windows Server 2016 editions version   (multi-edition)
#find --set-root /boot/grub4/grub_tag/usbdrive.tag > nul
#configfile /boot/grub4/grub_menu/winsvr.lst


title \n
root
title [ Hardware with Diskette Manager ]\n
root
title   Hardware Test Function
#iftitle [find --ignore-floppies --ignore-cd /boot/grub4/grub_dsk/hwtest]   Hardware Test Function
find --set-root --devices=hf /boot/grub4/grub_tag/usbdrive.tag > nul
configfile /boot/grub4/grub_menu/hwtest.lst


title   Hardware Tool Function
#iftitle [find --ignore-floppies --ignore-cd /boot/grub4/grub_dsk/hwtool]   Hardware Tool Function
find --set-root --devices=hf /boot/grub4/grub_tag/usbdrive.tag > nul
configfile /boot/grub4/grub_menu/hwtool.lst


title   DiskGenius
#iftitle [find --ignore-floppies --ignore-cd /boot/grub4/grub_dsk/DiskGenius]   DiskGenius
find--set-root /boot/program/DGDOS_ISO.iso
map /boot/program/DGDOS_ISO.iso (0xff) || map --mem /boot/program/DGDOS_ISO.iso
map --hook
chainloader (0xff)
savedefault --wait=2


title \n
root
title [ Repair Diskette with Diskette Bootable Manager ]\n
root
title   Diskette Bootable System
#iftitle [find --ignore-floppies --ignore-cd /boot/grub4/grub_dsk/bootdisk]   Diskette Bootable System
find --set-root /boot/grub4/grub_tag/usbdrive.tag > nul
configfile /boot/grub4/grub_menu/bootdisk.lst
#if %?_BOOT%==(cd) configfile /boot/grub4/grub_menu/bootdisk.lst || configfile /boot/grub4/grub_menu/bootdisk.lst


title   Parted Magic with PC CMOS Cleaner
#iftitle [find --ignore-floppies --ignore-cd /boot/grub4/grub_dsk/pmagic]   PC CMOS Cleaner with Parted Magic
find --set-root /boot/grub4/grub_tag/usbdrive.tag > nul
configfile /boot/grub4/grub_menu/pmagic.lst


title \n
root
title [ Diskette Backup with Recovery Manager ]\n
root
#title   Acronis Diskette Backup with Recovery
#iftitle [find --ignore-floppies --ignore-cd /boot/grub4/grub_dsk/acronis]   Acronis Diskette Backup with Recovery
#find --set-root /boot/grub4/grub_tag/usbdrive.tag > nul
#configfile /boot/grub4/grub_menu/acronis.lst
#if %?_BOOT%==(cd) configfile /boot/grub4/grub_menu/acronis.lst || configfile/boot/grub4/grub_menu/acronis.lst


title   Acronis Cyber Protect Home Office for PC
#iftitle [find --ignore-floppies --ignore-cd /boot/grub4/grub_dsk/acronis]   Acronis Cyber Protect Home Office for PC
find --set-root /boot/grub4/grub_tag/usbdrive.tag > nul
configfile /boot/grub4/grub_menu/acronis_cyber.lst
#if %?_BOOT%==(cd) configfile /boot/grub4/grub_menu/acronis_cyber.lst || configfile/boot/grub4/grub_menu/acronis_cyber.lst.lst


title \n
root
title [ Microsoft Windows PE ]\n
root
title   Microsoft Windows PE
#iftitle [find --ignore-floppies --ignore-cd /boot/grub4/grub_dsk/winpe]   Microsoft Windows PE
find --set-root /boot/grub4/grub_tag/usbdrive.tag > nul
configfile /boot/grub4/grub_menu/windows_pe.lst
## configfile prefix_dir1/windows_pe.lst
#if %?_BOOT%==(cd) configfile /boot/grub4/grub_menu/windows_pe.lst || configfile /boot/grub4/grub_menu/windows_pe.lst


title \n
root
title [ Linux-Live CD/DVD ]\n
root
title   Linux-Live CD/DVD boot
#iftitle [find --ignore-floppies --ignore-cd /boot/grub4/grub_lnx/lnxlive]   Linix Live CD / DVD
find --set-root --ignore-floppies --ignore-cd --devices=hf /boot/grub4/grub_tag/usbdrive.tag > nul
configfile /boot/grub4/grub_lnx/lnxlive.lst
#if %?_BOOT%==(cd) configfile /boot/grub4/grub_lnx/lnuxlive.lst || configfile /boot/grub4/grub_lnx/lnuxlive.lst


title \n
root
title [ GNU GRUB Manager ]\n
root
title   GNU GRUB Setting
find --set-root --ignore-floppies --ignore-cd --devices=hf /boot/grub4/grub_tag/usbdrive.tag > nul
configfile /boot/grub4/grub_menu/grub_setting.lst
##title   GNU GRUB Display RGB colours
##find --set-root --ignore-floppies --ignore-cd --devices=hf /boot/grub4/grub_tag/usbdrive.tag > nul
##configfile /boot/grub4/grub_menu/RGB_colours.mnu
##title   GNU GRUB Display RGB colours



20230611_093830_00.jpg (329.05 KB, 下载次数: 93)

20230611_093830_00.jpg

作者: 2011yaya2007777    时间: 2023-6-11 11:05
我测试没有问题。
你确认‘grub_menu’是目录吗?mainmenu.lst等等子菜单是在这个目录下吗?
在命令行执行以下操作,截图看看:
ls /boot/grub4/grub_menu/
作者: 不点    时间: 2023-6-11 11:08
感觉楼主的报告,属于比较详细的了。至少楼主是很辛苦的,能够拍照,能够测试不同版本,并且确定了出问题的版本。

我觉得,开发者是开发者,用户是用户。不可以要求用户都有开发经验,都能够猜到开发者想要的是啥。

报告问题时,开发者很不容易了解用户那边究竟哪里有错,电脑不是开发者的,所以,困难就在于,开发者没法亲自进行调试。

所以,用户端,还真的存在一个“报告技巧”的问题。

可以先用一个简化的菜单,来反复测试,看看究竟是哪一句命令没有得到正确执行。

如果自己不懂命令行,也没关系,
可以在菜单项中插入 pause 之类的命令,
这样,用户自己也就能够确定,
到底是什么命令没有得到正确的执行了。

如此一来,就可以给开发者提供更有价值的信息,
节省了开发者的排错时间。
作者: 不点    时间: 2023-6-11 11:20
楼主最后一张图片,很能说明问题。

在准备处理 mainmenu.lst时,死机了。

有可能是 mainmenu.lst 中有某个命令导致新版本死机了。

楼主可以把 mainmenu.lst 简化,比如说,把 mainmenu.lst 文件清空,看看还死机吗?

这是一个调试思路,目的是帮助楼主,走捷径,进行快速调试和定位,而不需要费太多的脑筋。

作者: 2011yaya2007777    时间: 2023-6-11 11:35
不点大师,我是原样照抄的mainmenu.lst,可以出现子菜单界面。
作者: alex20092009    时间: 2023-6-11 12:54
2011yaya2007777 发表于 2023-6-11 11:05
我测试没有问题。
你确认‘grub_menu’是目录吗?mainmenu.lst等等子菜单是在这个目录下吗?
在命令行执 ...

1. mainmenu.lst子菜单是在这个\boot\grub4\grub_menu\目录下
2. 原以为是usb中毒,重新diskpart clean, usb重制问题相同
3. 尝试 usb fat32, usb ntfs 格式问题相同
4. usb ntfs 用 bootice 重制0.4.5c, 0.4.6a 问题相同
5. 经多日测试发现mainmenu.lst ,放至在\boot\grub\mainmenu.lst 画面可正常出现.
6. 试着不点方法简化问题相同
7. 试着 文件存档UTF-8, UTF-8 BOM问题相同
作者: alex20092009    时间: 2023-6-11 12:54
本帖最后由 alex20092009 于 2023-6-11 12:55 编辑

1. mainmenu.lst子菜单是在这个\boot\grub4\grub_menu\目录下
2. 原以为是usb中毒,重新diskpart clean, usb重制问题相同
3. 尝试 usb fat32, usb ntfs 格式问题相同
4. usb ntfs 用 bootice 重制0.4.5c, 0.4.6a 问题相同
5. 经多日测试发现mainmenu.lst ,放至在\boot\grub\mainmenu.lst 画面可正常出现.
6. 试着不点方法简化问题相同
7. 试着 文件存档UTF-8, UTF-8 BOM问题相同

20230611_123917_00.jpg (427.21 KB, 下载次数: 78)

20230611_123917_00.jpg

bt2.png (41.04 KB, 下载次数: 80)

bt2.png

作者: alex20092009    时间: 2023-6-11 12:59
2011yaya2007777 发表于 2023-6-11 11:05
我测试没有问题。
你确认‘grub_menu’是目录吗?mainmenu.lst等等子菜单是在这个目录下吗?
在命令行执 ...

所有测试方法未用windows 虚拟机器测试
作者: 2011yaya2007777    时间: 2023-6-11 13:08
14#的截图已经说明问题。在grub_menu目录下,只有main_menu.lst和_mainmenu.lst,而没有mainmenu.lst。犯了一个低级错误。
作者: alex20092009    时间: 2023-6-11 13:14
2011yaya2007777 发表于 2023-6-11 13:08
14#的截图已经说明问题。在grub_menu目录下,只有main_menu.lst和_mainmenu.lst,而没有mainmenu.lst。犯了 ...

你好:
因無法讀取mainmenu.lst 會出現procesing 畫面才rename file
作者: alex20092009    时间: 2023-6-11 13:14
本帖最后由 alex20092009 于 2023-6-11 13:16 编辑

你好:
因無法讀取mainmenu.lst 會出現procesing 畫面才rename file

20230611_093830_00.jpg (329.05 KB, 下载次数: 87)

20230611_093830_00.jpg

作者: alex20092009    时间: 2023-6-11 13:32
2011yaya2007777 发表于 2023-6-11 13:08
14#的截图已经说明问题。在grub_menu目录下,只有main_menu.lst和_mainmenu.lst,而没有mainmenu.lst。犯了 ...

你好:
2011yaya2007777如果真的找不到问题点,我在试多几台PC/NB 找出问题点, Thanks
作者: dfw9    时间: 2023-6-11 13:46
alex20092009 发表于 2023-6-11 13:32
你好:
2011yaya2007777如果真的找不到问题点,我在试多几台PC/NB 找出问题点, Thanks

感谢测试。开发者已给出“比如g4d/g4e版本,主菜单,硬盘MBR/GPT情况(若有必要)”思路。
方法得当,事半功倍。
祝顺利。
作者: liuzhaoyzz    时间: 2023-6-11 14:59
本帖最后由 liuzhaoyzz 于 2023-6-11 15:27 编辑
2011yaya2007777 发表于 2023-6-11 13:08
14#的截图已经说明问题。在grub_menu目录下,只有main_menu.lst和_mainmenu.lst,而没有mainmenu.lst。犯了 ...

实测楼主反馈的问题属实。为了简化问题,实测结果如下:
grub4dos-0.4.6a-2023-06-10版本,menu.lst
title mainmenu.lst
find --set-root --ignore-floppies --ignore-cd --devices=hf /boot/grub4/grub_menu/mainmenu.lst
configfile /boot/grub4/grub_menu/mainmenu.lst



/boot/grub4/grub_menu/mainmenu.lst菜单,我确定存在,UTF-8无BOM格式。

title   DiskGenius
find--set-root /boot/program/DGDOS_ISO.iso
map /boot/program/DGDOS_ISO.iso (0xff) || map --mem /boot/program/DGDOS_ISO.iso
map --hook
chainloader (0xff)


vmware虚拟机测试,从主菜单进入子菜单直接死机了。
手工输入命令也是一样。
我感觉是configfile命令有问题。我记得原来sunsea超版针对g4e也提出过类似的问题,还有之前在高版本的ubuntu环境下编译,yaya自己也提出过类似的问题,不清楚是否与编译环境有关,不清楚yaya是否修复了该问题,请再次确认下。
http://bbs.wuyou.net/forum.php?m ... 5896&fromuid=298214

grub4dos-0.4.6a-2016-12-23版本测试,正常。√
grub4dos-0.4.6a-2023-03-29版本测试,死机。
grub4dos-0.4.6a-2023-03-06版本测试,死机。
grub4dos-0.4.6a-2023-03-01版本测试,死机。
grub4dos-0.4.6a-2023-02-28版本测试,死机。
grub4dos-0.4.6a-2023-02-23版本测试,死机。
grub4dos-0.4.6a-2022-12-22版本测试,正常。√
grub4dos-0.4.6a-2022-11-28版本测试,正常。√
grub4dos-0.4.6a-2022-10-26版本测试,正常。√
很显然,2023年之后的版本,从grub4dos-0.4.6a-2023-02-23开始,应该是引入了bug。

看了下changelog:
grub4dos-0.4.6a-2023-02-23.7z
发表于 2023-02-23
更新信息(update log):
2023-02-23 7173aed@yaya . 增加外部定时器。(应用之一,外部命令进度条ProgressBar)。
修正压缩菜单最后一行没有换行符而缺失的问题。
修正切换视频模式菜导致单框失误的问题。
调整函数的内存使用,解决屏幕分辨率大于1600*1200时覆盖字库的问题。现在字体尺寸、屏幕分辨率都不受限制。

好像有问题。

linux64 位-2023-06-11-14-46-10.png (5.14 KB, 下载次数: 95)

linux64 位-2023-06-11-14-46-10.png

linux64 位-2023-06-11-14-46-22.png (4.7 KB, 下载次数: 98)

linux64 位-2023-06-11-14-46-22.png

linux64 位-2023-06-11-15-03-29.png (5.3 KB, 下载次数: 85)

linux64 位-2023-06-11-15-03-29.png

作者: 2011yaya2007777    时间: 2023-6-11 15:20
2011yaya2007777如果真的找不到问题点,我在试多几台PC/NB 找出问题点, Thanks

问题已经重现。
qemu虚拟机测试,执行:
     configfile  /boot/grub4/grub_menu/mainmenu.lst
闪退。

目前你就把mainmenu.lst放在/boot/grub4/吧。
可能搜索4级目录有问题。
谢谢反馈!
作者: liuzhaoyzz    时间: 2023-6-11 15:49
2011yaya2007777 发表于 2023-6-11 15:20
问题已经重现。
qemu虚拟机测试,执行:
     configfile  /boot/grub4/grub_menu/mainmenu.lst
UEFI版本
grub4dos-for_UEFI-2022-12-27测试正常√
grub4dos-for_UEFI-2023-02-23虚拟机测试死机,提示异常并重启。
情况应该跟g4d类似,是configfile引入了bug。


QQ拼音截图20230611154456.png (12.61 KB, 下载次数: 114)

QQ拼音截图20230611154456.png

作者: 2011yaya2007777    时间: 2023-6-12 11:06
很显然,2023年之后的版本,从grub4dos-0.4.6a-2023-02-23开始,应该是引入了bug。

感谢liuzhaoyzz超级版主的精准定位。确实是由于增加外部定时器,挤占了配置文件的空间。配置文件+路径超过一定的字节,会出问题。现在可以确定,最长字节是52。位置有限,不可能再增大了。超出52字节会报错。
g4e 与 g4d 情况相同。

grldr.rar

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


作者: 不点    时间: 2023-6-12 11:30
2011yaya2007777 发表于 2023-6-11 11:35
不点大师,我是原样照抄的mainmenu.lst,可以出现子菜单界面。

在 legacy bios 的情况,grub4dos 里面的许多处理,我是比较了解的。

相关的问题,我觉得,有必要给您解释一下。

iftitle 命令是 chenall 添加的。它比 title 命令更灵活方便。但带来的问题也很棘手。

与 iftitle 相比,原来的 title 命令,我在这里就称之为 “静态 title 命令”。

静态的 title 命令,是直接处理,无需访问磁盘,所以,不会出问题。

而带有 if 的动态 title 命令,它有 “条件” 需要判断,而执行条件判断的时候,就可能是要访问磁盘了。而在访问磁盘时,是有可能死机的。

这里有个误区,就是,“我测试正常啊?怎么会死机呢?”

死机会发生在那一类 “不友好” 的电脑上。并非统统死机。

所以,用户会碰到不正常,然后用户来报告。

开发者不能够以 “自己的测试正常”,然后就认为没问题。

正确的代码,不一定能够正确地运行。这是以前多年来得到的经验教训吧。

其实这绝大多数都是封杀行为,就是,硬件故意设计成让某个软件转不起来。

由于 iftitle 命令有可能导致死机(在执行条件命令的时候因访问磁盘而死机),所以,我在准备处理菜单之前,先打印一条消息(英文的,中文意思是:)“正在处理 某某某 菜单……”

如果此时死机,那么,这条消息就能够被用户拍照,然后,开发者就知道,是处理菜单时死机了。也就是说,configfile 所指定的那个菜单,根本就无法处理。

如果没有死机,上述消息很快就消失了,用户通常也看不见,除非那电脑慢如蜗牛。

并非只有 iftitle 命令会导致死机。在那些有问题的电脑上,任何访问磁盘的命令,都可能导致死机。

iftitle 的特殊性在于,还没显示菜单,就已经死机了。

此时,用户甚至都无法用 pause 命令!因为 pause 命令(以及其他命令)

是在菜单显示之后才可能开始处理的。

所以,请大家尽量不要使用 iftitle 命令。虽然 “恶意攻击” 的电脑数量不太多,但那是存在的。使用 iftitle 命令,就会带来这种风险。任何一种有可能 “丧失启动成功率” 的做法,都是得不偿失的。

我写得长了,阅读起来,可能费劲。请各位在空闲的时候,仔细阅读,慢慢品味。

作者: liuzhaoyzz    时间: 2023-6-12 12:01
不点 发表于 2023-6-12 11:30
在 legacy bios 的情况,grub4dos 里面的许多处理,我是比较了解的。

相关的问题,我觉得,有必要给您 ...

不太像是iftitle引起的问题呀?

title   DiskGenius
find--set-root /boot/program/DGDOS_ISO.iso
map /boot/program/DGDOS_ISO.iso (0xff) || map --mem /boot/program/DGDOS_ISO.iso
map --hook
chainloader (0xff)

我在21楼给的简化菜单,就是为了排除这样子的特殊菜单问题,没有采用iftitle,照样死机啊。

        

作者: 不点    时间: 2023-6-12 12:35
liuzhaoyzz 发表于 2023-6-12 12:01
不太像是iftitle引起的问题呀?

title   DiskGenius

版主大人辛苦啦!您在 grub4dos 上的贡献,是无可替代的。深表敬意!

我没能讲清楚。其实,iftitle 只是导致死机的一种可能性。

死机的可能性有很多,不一定是 iftitle 导致的。

我只是说,请大家尽量不要使用 iftitle 命令,免得出了问题却毫无头绪。

无论是哪种可能性引起的死机,用户都可以看到 Processing menu ........

这条消息。

我看到 yaya 已经从技术层面定位了这个问题。您们都很辛苦,祝贺!

作者: liuzhaoyzz    时间: 2023-6-12 13:58
2011yaya2007777 发表于 2023-6-12 11:06
感谢liuzhaoyzz超级版主的精准定位。确实是由于增加外部定时器,挤占了配置文件的空间。配置文件+路径超 ...

用这个版本,我测了下,g4d可以进菜单了,还没有深度测试,我要开会了。
作者: liuzhaoyzz    时间: 2023-6-12 14:18
本帖最后由 liuzhaoyzz 于 2023-6-13 18:28 编辑
不点 发表于 2023-6-12 12:35
版主大人辛苦啦!您在 grub4dos 上的贡献,是无可替代的。深表敬意!

我没能讲清楚。其实,iftitle 只 ...

不点大太客气了,绵薄之力不足挂齿,开发者们才是贡献最大,付出最多的啊。


不点2003年创立了g4d分支,很多年了一直在与各种buggy主板作斗争。


bean让bootmgr支持直接启动grldr.mbr,还有很多贡献,比如NTFS驱动支持,pxe等,用fbinst加强了USB-CHS模式下启动成功率,完善了g4d的中文说明文档。


chenall给g4d带来了丰富的批处理扩展,改进了pxe/ipxe支持。现在从前台转向了后台,也在做贡献。


2007yaya7777一个人抗下了很多开发维护任务,多线作战,run模块/g4d/g4e。

wintoflash为g4e写了wimboot/NTLOADER,方便直接启动pe.iso/wim/vhd/RAMOS,将g4d/g4e带入了高版本gcc编译器,引入EFI handover协议让kernel/initrd可以启动linux,引入了loadfile2协议,为未来linux高版本内核做好了准备。


......



作者: alex20092009    时间: 2023-6-12 17:44
使用2011yaya2007777上传grldr.rar 读取mainmenu.lst画面正常显示


20230612_173747_00.jpg (291.62 KB, 下载次数: 99)

20230612_173747_00.jpg

作者: 不点    时间: 2023-6-12 17:52
liuzhaoyzz 发表于 2023-6-12 14:18
不点大太客气了,绵薄之力不足挂齿,开发者们才是贡献最大,付出最多的啊。

开发者们确实很尽力,很有水平,当然在某种程度上都是不可替代的。Gandalf 和 Roy 两位大神也亲自主持过开发维护工作【记忆力不好,可能会有遗忘】。我觉得,不同的人,在不同的时间,不同的地点,做了不同的事情。不管他是开发者、维护者,还是支持者、帮助者(问题报告者就属于支持者、帮助者),他都可能展现出他的智慧、水平。他都可能达到某种艺术的境界,都有着不可替代性。以前有个时空论坛,里面有很多高手,报告问题,帮我排错。那水平不是一般的,都是出神入化的境界。pseudo 对于 grub4dos 技巧的挖掘,我感觉,我作为开发者,都没有他对于 grub4dos 的理解有那么深入,确实很佩服。大家可能都有着某个共同的目标,或者有共同的需求,大家都很尽力。就像现实中的一个真正的家庭一样,每个成员,都在为家庭做贡献。
作者: liuzhaoyzz    时间: 2023-6-12 18:53
本帖最后由 liuzhaoyzz 于 2023-6-12 19:35 编辑
2011yaya2007777 发表于 2023-6-12 11:06
感谢liuzhaoyzz超级版主的精准定位。确实是由于增加外部定时器,挤占了配置文件的空间。配置文件+路径超 ...

怎么我测试,最长可以支持57个字符的长路径?/boot/grub4/grub_menu/grub_menu/grub_menu/mainmenu222.lst

title /boot/grub4/grub_menu/grub_menu/grub_menu/mainmenu222.lst
find --set-root --ignore-floppies --ignore-cd --devices=hf /boot/grub4/grub_menu/grub_menu/grub_menu/mainmenu222.lst
configfile /boot/grub4/grub_menu/grub_menu/grub_menu/mainmenu222.lst

超过57个字符的长路径,会提示“Select item cannot fit into memory”,这个提示容易引起歧义,什么叫做不能加载到内存,用户可能会问,我的内存大着呢,怎么会不能加载到内存呢?
建议修改为"Configfile path and filename is too long to load(<58)"之类的不会引起歧义的提示语。
如果汇编空间有限,可以精简为"Configfile path too long(<58)"



linux64 位-2023-06-12-19-22-07.png (15.53 KB, 下载次数: 74)

linux64 位-2023-06-12-19-22-07.png

linux64 位-2023-06-12-18-48-31.png (3.67 KB, 下载次数: 80)

linux64 位-2023-06-12-18-48-31.png

作者: liuzhaoyzz    时间: 2023-6-12 19:10
本帖最后由 liuzhaoyzz 于 2023-6-12 19:32 编辑
不点 发表于 2023-6-12 17:52
开发者们确实很尽力,很有水平,当然在某种程度上都是不可替代的。Gandalf 和 Roy 两位大神也亲自主持过 ...

Gandalf 和 Roy我不是很了解,没有过交流,他们也是前辈了。
“他们早已不在江湖,但江湖依旧流传着他们的传说”!
Gandalf的个人资料 - 上次活动时间2012-1-15 17:21
http://bbs.wuyou.net/home.php?mod=space&uid=50823&do=profile

http://bbs.wuyou.net/forum.php?m ... 3958&fromuid=298214
grub4dos 在解决内存冲突方面,作了多次的努力。最早的努力,是 gandalf 发现 grub4dos 总是莫名其妙地死机,然后,我们了解到,那是因为 gnu grub legacy 的保护模式堆栈位于较高内存地址造成的。当某些程序片段使用较多堆栈时,就要发生死机了。对此,我们作了两项改进,其一是把保护模式堆栈撤销,与实模式堆栈合并,只保留一个堆栈;其二是把c语言函数内的数组和局部函数都移出到函数体之外,不再占用堆栈。后来又作了一项改进,那就是,把递归函数修改成非递归的函数,用循环来代替递归,大大减轻了堆栈的负担。所以,后来再也没有出现莫名其妙死机的问题了。

http://bbs.wuyou.net/forum.php?m ... 1715&fromuid=298214
gandalf 提供的 scdrom 代码,好像存在内存冲突,不稳定,后来由我移植 smart boot manager 的 cdrom 代码,替换了 gandalf 的代码。同样是 gandalf,他所做的基于 vga 图形模式的中文化代码则非常稳定,我们一直保留了下来,直到我们彻底转向 vbe 之前。cdrom 驱动支持是 gandalf 首先引进的,他有首创之功,不可抹杀。

      

作者: 不点    时间: 2023-6-12 22:56
liuzhaoyzz 发表于 2023-6-12 19:10
Gandalf 和 Roy我不是很了解,没有过交流,他们也是前辈了。
“他们早已不在江湖,但江湖依旧流传着他 ...

中文支持是 gandalf 实现的。没有 gandalf,就没有中文支持。

中文支持,vga 图形代码的编写,都是很困难的,

我是不可能有这样的神力的,我会躲得远远的。

后来,我仔细研读了 gandalf 的代码,居然能看懂。

我仿照和学习了 gandalf 的 GB  码处理方法,

作出了 UTF8 的支持,配合 vbe 图形支持,

构成了如今我们正在使用的国际化字符显示支持框架。

我看到 yaya 后来也对 vbe 图形代码作出了改进完善。

其他几位维护者或多或少也都参与了国际化字符显示支持的工作。

Roy 的技术相当高超,有点像目前的 wintoflash,当然他俩肯定不是同一人。我只是类比,可能不太恰当。Roy 在如何使用Linux和gcc工具来编译grub4dos 方面,有着深厚的功底。Roy 最能吸引大家注意力的方面,是实现了对于几种 dos kernel 的 chainloading 支持。他对 dos 非常熟练。有了 Roy,grub4dos 对于 dos 的支持才达到了一个艺术的高度,非常美妙。




作者: 2011yaya2007777    时间: 2023-6-13 17:46
怎么我测试,最长可以支持57个字符的长路径?

实际测试,全路径,包括(HDx,y),可以有72个字符。错误提示修改了。
作者: liuzhaoyzz    时间: 2023-6-13 18:37
2011yaya2007777 发表于 2023-6-13 17:46
实际测试,全路径,包括(HDx,y),可以有72个字符。错误提示修改了。


前一个版本怎么我测试只支持57个字符?你改过的版本支持72个字符是吗?请传上来。我在官网没看到release
作者: 2011yaya2007777    时间: 2023-6-13 20:05
本帖最后由 2011yaya2007777 于 2023-6-13 20:31 编辑

我修改了一下限制字符0x41为0x49。你在命令行执行:
echo --img=0x8210=128
从0x8217至0x825f是配置文件到位置。0x8260是其他变量,不可覆盖。注意配置文件最后要有一个\0终止符。
0x8217起始是(hdx,y)。你的计数是从根符号开始的。但是不管你输入不输入(hdx,y),系统会自动补上。

作者: liuzhaoyzz    时间: 2023-6-13 21:25
2011yaya2007777 发表于 2023-6-13 20:05
我修改了一下限制字符0x41为0x49。你在命令行执行:
echo --img=0x8210=128
从0x8217至0x825f是配置文件 ...

你说的这些是程序内部的处理,不太懂。一般地用记事本编辑的菜单尾部会有\0字符吧?

作者: 2011whp    时间: 2023-6-13 22:25
不用 使用者 加 0x00字节

限制0x41:(hdx,y)计7字符  +  测试出的 57字符 + 0x00字节  = 65字符
限制0x49:(hdx,y)计7字符  +  测试出的 65字符 + 0x00字节  = 73字符


作者: 2011yaya2007777    时间: 2023-6-14 05:30
记事本编辑,结尾回车则有0x0d,0x0a。不回车则无。因为这个区域预先填充了0,可以不用考虑。
作者: liuzhaoyzz    时间: 2023-6-14 10:14
感谢两位答疑!
作者: rbwrbw    时间: 2023-10-25 11:17
问题解决了!!
作者: rbwrbw    时间: 2023-10-27 08:20
????
作者: wn168cn@163.com    时间: 2024-11-6 17:19
感谢分享




欢迎光临 无忧启动论坛 (http://wuyou.net./) Powered by Discuz! X3.3