无忧启动论坛

标题: 通过 grub4dos 调用grub2菜单, 然后引导linux失败? [打印本页]

作者: wengzhenquan    时间: 2020-9-27 11:23
标题: 通过 grub4dos 调用grub2菜单, 然后引导linux失败?
本帖最后由 wengzhenquan 于 2020-9-27 18:16 编辑

u盘有200多G,用grub2定制的引导菜单,同时支持EFI 64 32位级legacy。
legacy考虑到兼容性,想做ud版,grub2不支持ud,于是用grub4dos引导grub2菜单。

引导linux出现报错!!

找了许多资料,都是说修复grub2的,但是一旦修复grub2,grub4dos就消失了,ud也就没了




请问有没有大佬知道改如何解决?

问题已经解决,定制可用。
遇到的问题:
1、一开始core.img 不是自己生成的,其它的方东拼西凑的,导致引导之后版本和*.mod的版本不一致。
2、用BOOTICE重新制作成grub4dos的时候分区表设置错误。



如今使用 g2ldr  和 core.img 方式都可以引导

企业微信截图_16011769538073.png (221.82 KB, 下载次数: 114)

企业微信截图_16011769538073.png

QQ图片20200927111931.png (3.31 KB, 下载次数: 105)

QQ图片20200927111931.png

作者: xbmc    时间: 2020-9-27 12:40
kernel /boot/grub/grldr
这里的 grldr 是从哪弄来的?
这个错误,是因为你启动的 grub2 内核 (core.img) 和加载的模块 (*.mod) 版本不一致。
legacy考虑到兼容性,想做ud版,grub2不支持ud,于是用grub4dos引导grub2菜单。

如果考虑兼容性,那就不要用 grub2,因为 BIOS 下只有 ud + grub4dos 的兼容性最好。
作者: wengzhenquan    时间: 2020-9-27 12:57
本帖最后由 wengzhenquan 于 2020-9-27 18:11 编辑
xbmc 发表于 2020-9-27 12:40
kernel /boot/grub/grldr
这里的 grldr 是从哪弄来的?
这个错误,是因为你启动的 grub2 内核 (core.img) ...
grldr 是g2ldr  百度可以找到,制作方法如下:
copy /b \boot.img+\core.img \g2ldr
我grub4dos 是0.46a的  引导core.img ,通过 configfile 去加载下一个菜单的时候会失效,直接跳到主菜单
title [1-1] 启动 grub2 ◆ \n 引导G2LDR
find --set-root /boot/grub/grldr
kernel /boot/grub/grldr

title [1-2] 启动 grub2 ◆ \n 引导内核core.img
find --set-root   /boot/grub/Core.img
kernel  /boot/grub/Core.img
boot

title [1-3] 启动 grub2  ◆ \n 引导内核boot.img
find --set-root  /boot/grub/Core.img
kernel  /boot/grub/i386-pc/lnxboot.img
initrd  /boot/grub/Core.img
chainloader /boot/grub/i386-pc/boot.img
boot



menuentry "[1] PE 系统"                                                         --class=pe             --hotkey=1{
   configfile "${prefix}/Config/03_pe.cfg"
}

我用第二种方式调用成功 Core.img了 不过。。  没有加载grub.cfg

企业微信截图_20200927143230.png (7.07 KB, 下载次数: 107)

企业微信截图_20200927143230.png

作者: hilsonma    时间: 2020-9-27 15:58
wengzhenquan 发表于 2020-9-27 12:57
我也不记得哪儿弄来的了,最近找了太多东西,都是东拼西凑,你需要的话我可以给你。
我grub4dos 是0.46a ...

grub4dos调用grub2可以kernel core.img,当然加上正确的core.img路径。
没有加载grub.cfg的话,在grub2命令行输入set,查看prefix在哪个位置,然后将grub.cfg放到这个位置。
或者自己定制core.img,指定prefix,然后将grub.cfg放到指定位置。
作者: wengzhenquan    时间: 2020-9-27 17:27
本帖最后由 wengzhenquan 于 2020-9-27 17:47 编辑
hilsonma 发表于 2020-9-27 15:58
grub4dos调用grub2可以kernel core.img,当然加上正确的core.img路径。
没有加载grub.cfg的话,在grub2 ...

定制的配置如下:
search.file /boot/grub/grub.cfg root
set root=($root)
set prefix=($root)/boot/grub
configfile ($root)/boot/grub/grub.cfg

脚本信息如下:
set g2_setup=%~dp0bootconfig.cfg

grub-mkimage.exe -d %grub2p%/i386-pc -c %g2_setup% -O i386-pc -p /boot/grub -o %_temp%\core.img  biosdisk part_msdos fat exfat ntfs ext2 search_fs_file iso9660 udf configfile search help  reiserfs font linux chain
copy /b %boot_d%\boot\grub\i386-pc\boot.img+%_temp%\core.img %boot_d%\boot\grub\g2ldr
copy %_temp%\core.img %boot_d%\boot\grub /y


图片信息在附件上,指示在第二个mbr分区
(hd0,msdos2)。
正常来说,定制的信息search.file  应该文件在哪儿就会读哪儿,不会错才对
是不是不能使用 grub-mkimage.exe  -p命令?

企业微信截图_20200927172300.png (4.1 KB, 下载次数: 107)

企业微信截图_20200927172300.png

QQ图片20200927171905.png (12.89 KB, 下载次数: 107)

QQ图片20200927171905.png

企业微信截图_20200927174701.png (3.82 KB, 下载次数: 120)

企业微信截图_20200927174701.png

企业微信截图_20200927174636.png (21.26 KB, 下载次数: 111)

企业微信截图_20200927174636.png

作者: wengzhenquan    时间: 2020-9-27 18:14
问题已经解决,定制可用。
遇到的问题:
1、一开始core.img 不是自己生成的,其它的方东拼西凑的,导致引导之后版本和*.mod的版本不一致。
2、用BOOTICE重新制作成grub4dos的时候分区表设置错误。
作者: hilsonma    时间: 2020-9-27 20:49
本帖最后由 hilsonma 于 2020-9-27 21:09 编辑
wengzhenquan 发表于 2020-9-27 17:27
定制的配置如下:
search.file /boot/grub/grub.cfg root
set root=($root)

grub4dos调用grub2不需要 copy /b boot.img+core.img g2ldr ,直接使用core.img就可以了

定制core.img时,如果使用了 -c 就不要使用 -p 了
-p 是指定prefix (配置文件所在文件夹)
-c 是使用预配置文件,而预配置文件里通常会指定prefix,所以用了 -c 就不用 -p
如果 -c 的预配置结果是跟 -p 一样的话,就直接使用 -p 无需使用 -c
通常是使用 -p 定制,如果 -p 不能满足定制要求,才改用 -c 定制。

象你这个定制例子,如果core.img 跟 grub.cfg在同一个分区的,使用 -p 定制就可以了,如果需要 core.img 跟 grub.cfg 在不同的分区,就不使用 -p 定制而改用 -c 定制。
不管grub.cfg 跟core.img是不是同一个分区,按你的定制例子,grub.cfg都应该是放在 /boot/grub

现在趋向于uefi启动,一般都有EFI文件夹,所以我通常使用 -p /EFI/grub 定制,将grub.cfg 放在 /EFI/grub
而core.img我就放在 /EFI
当使用grub4dos引导时,如下转向grub2菜单:
find --set-root /EFI/core.img
kernel /EFI/core.img

这样,无论是uefi启动还是legacy启动,使用的都是同一个菜单。

至于使用bootice制作grub4dos引导,只是将mbr更改为grub4dos,不做其他操作是不会导致分区表错误的。
如果要使用ud也就是fbinst引导,只要不使用 --force 也是可以无损制作的
作者: wengzhenquan    时间: 2020-9-28 16:58
hilsonma 发表于 2020-9-27 20:49
grub4dos调用grub2不需要 copy /b boot.img+core.img g2ldr ,直接使用core.img就可以了

定制core.img ...

现在可以调了,不过。。您看一下。

这是不兼容吗?

企业微信截图_20200928165355.png (27.8 KB, 下载次数: 103)

企业微信截图_20200928165355.png

作者: hilsonma    时间: 2020-9-28 23:51
wengzhenquan 发表于 2020-9-28 16:58
现在可以调了,不过。。您看一下。

这是不兼容吗?

重新定制core.img,把你要用到的模块都包含进去。

或者是把 i386-pc 这个模块文件夹整个复制到 grub.cfg 所在文件夹
然后在菜单前面加载相应的模块如
insmod echo
insmod linux16
insmod initrd16

建议重新定制core.img
作者: my9823    时间: 2020-9-29 06:39
我发现你很喜欢记事本编辑菜单,建议utf8保存菜单。既然用ud,可以用fbinsttool内置的编辑器编辑菜单,右键保存为utf8格式。
作者: wengzhenquan    时间: 2020-9-29 10:21
hilsonma 发表于 2020-9-28 23:51
重新定制core.img,把你要用到的模块都包含进去。

或者是把 i386-pc 这个模块文件夹整个复制到 grub.c ...

已解决,谢谢




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