无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 4467|回复: 10

[已解决] 通过 grub4dos 调用grub2菜单, 然后引导linux失败?

[复制链接]
发表于 2020-9-27 11:23:14 | 显示全部楼层 |阅读模式
本帖最后由 wengzhenquan 于 2020-9-27 18:16 编辑

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

QQ图片20200927111544.png 引导linux出现报错!!

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




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

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



如今使用 g2ldr  和 core.img 方式都可以引导
企业微信截图_16011769538073.png
QQ图片20200927111931.png
 楼主| 发表于 2020-9-29 10:21:10 | 显示全部楼层
hilsonma 发表于 2020-9-28 23:51
重新定制core.img,把你要用到的模块都包含进去。

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

已解决,谢谢
回复

使用道具 举报

发表于 2020-9-29 06:39:01 来自手机 | 显示全部楼层
我发现你很喜欢记事本编辑菜单,建议utf8保存菜单。既然用ud,可以用fbinsttool内置的编辑器编辑菜单,右键保存为utf8格式。
回复

使用道具 举报

发表于 2020-9-28 23:51:51 | 显示全部楼层
wengzhenquan 发表于 2020-9-28 16:58
现在可以调了,不过。。您看一下。

这是不兼容吗?

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

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

建议重新定制core.img

点评

已解决,谢谢  详情 回复 发表于 2020-9-29 10:21
回复

使用道具 举报

 楼主| 发表于 2020-9-28 16:58:08 | 显示全部楼层
hilsonma 发表于 2020-9-27 20:49
grub4dos调用grub2不需要 copy /b boot.img+core.img g2ldr ,直接使用core.img就可以了

定制core.img ...

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

这是不兼容吗?
企业微信截图_20200928165355.png

点评

重新定制core.img,把你要用到的模块都包含进去。 或者是把 i386-pc 这个模块文件夹整个复制到 grub.cfg 所在文件夹 然后在菜单前面加载相应的模块如 insmod echo insmod linux16 insmod initrd16 建议重  详情 回复 发表于 2020-9-28 23:51
回复

使用道具 举报

发表于 2020-9-27 20:49:46 | 显示全部楼层
本帖最后由 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 也是可以无损制作的

点评

现在可以调了,不过。。您看一下。 这是不兼容吗?  详情 回复 发表于 2020-9-28 16:58
回复

使用道具 举报

 楼主| 发表于 2020-9-27 18:14:39 | 显示全部楼层
问题已经解决,定制可用。
遇到的问题:
1、一开始core.img 不是自己生成的,其它的方东拼西凑的,导致引导之后版本和*.mod的版本不一致。
2、用BOOTICE重新制作成grub4dos的时候分区表设置错误。
回复

使用道具 举报

 楼主| 发表于 2020-9-27 17:27:49 | 显示全部楼层
本帖最后由 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
QQ图片20200927171905.png
企业微信截图_20200927174701.png
企业微信截图_20200927174636.png

点评

grub4dos调用grub2不需要 copy /b boot.img+core.img g2ldr ,直接使用core.img就可以了 定制core.img时,如果使用了 -c 就不要使用 -p 了 -p 是指定prefix (配置文件所在文件夹) -c 是使用预配置文件,而预配  详情 回复 发表于 2020-9-27 20:49
回复

使用道具 举报

发表于 2020-9-27 15:58:54 | 显示全部楼层
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放到指定位置。

点评

定制的配置如下: 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 gru  详情 回复 发表于 2020-9-27 17:27
回复

使用道具 举报

 楼主| 发表于 2020-9-27 12:57:30 | 显示全部楼层
本帖最后由 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

点评

grub4dos调用grub2可以kernel core.img,当然加上正确的core.img路径。 没有加载grub.cfg的话,在grub2命令行输入set,查看prefix在哪个位置,然后将grub.cfg放到这个位置。 或者自己定制core.img,指定prefix,然  详情 回复 发表于 2020-9-27 15:58
回复

使用道具 举报

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

如果考虑兼容性,那就不要用 grub2,因为 BIOS 下只有 ud + grub4dos 的兼容性最好。

点评

我也不记得哪儿弄来的了,最近找了太多东西,都是东拼西凑,你需要的话我可以给你。 我grub4dos 是0.46a的 引导core.img ,通过 configfile 去加载下一个菜单的时候会失效,直接跳到主菜单 menuentry "[1] PE 系  详情 回复 发表于 2020-9-27 12:57
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-4-16 23:01

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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