无忧启动论坛

 找回密码
 注册
搜索
WEPE笔记本电脑手机维修小包 IT发烧友的必备工具最纯净的「微PE装机优盘」UEPON大师作品系统gho:最纯净好用系统下载站
楼主: hilsonma

[分享] 使用Grub2定制UEFI启动 (bootx64.efi)

    [复制链接]
 楼主| 发表于 2019-8-8 14:10:04 | 显示全部楼层
gdck 发表于 2019-8-8 00:41
下官方原版的没有wimboo模块

建议下载wintoflash的新版
回复

使用道具 举报

发表于 2019-8-9 15:19:05 | 显示全部楼层
谢谢分享,正需要
回复

使用道具 举报

发表于 2019-8-12 10:32:46 | 显示全部楼层
非常感谢!
请问如何在菜单中显示中文?

点评

在菜单中直接使用中文,以UTF-8编码保存菜单文件grub.cfg 如果显示有问题就在grub.cfg中加上相关字体参数 set gfxterm_font=unicode set lang=zh_CN set locale_dir=$prefix/locale insmod gfxterm terminal_o  详情 回复 发表于 2019-8-12 15:04
回复

使用道具 举报

 楼主| 发表于 2019-8-12 15:04:18 | 显示全部楼层
本帖最后由 hilsonma 于 2019-8-12 15:19 编辑
2011shenql 发表于 2019-8-12 10:32
非常感谢!
请问如何在菜单中显示中文?


在菜单中直接使用中文,以UTF-8编码保存菜单文件grub.cfg

如果显示有问题就在grub.cfg中加上相关字体参数
set gfxterm_font=unicode
set lang=zh_CN
set locale_dir=$prefix/locale
insmod gfxterm
terminal_output  gfxterm
loadfont unicode

相应地,使用了以上语句,就要在相应的文件夹放置相应的文件,如:
语言文件 locale/zh_CN.mo
字体文件 fonts/unicode.pf2

由于使用了gfxterm模块,所以也要相应的模块文件 x86_64-efi/gfxterm.mod

为了简单,我很少使用中文,或者尽量使用默认显示没有问题的中文。
例如:”返回“ 的"返”默认显示有问题我就只使用一个字“回”,“搜索”显示有问题我就使用“查找”。
这样就不需要加字体语句。只要是utf-8编码,grub2一般都默认显示的。

点评

感谢回复 折腾了一下,没成功 选择了第三个菜单后,在路径中会显示中文,我以为很简单地增加一两条命令就可以在菜单中显示中文。。。 需要的文件太多太复杂,暂时不折腾了  详情 回复 发表于 2019-8-13 10:24
回复

使用道具 举报

发表于 2019-8-13 10:24:28 | 显示全部楼层
hilsonma 发表于 2019-8-12 15:04
在菜单中直接使用中文,以UTF-8编码保存菜单文件grub.cfg

如果显示有问题就在grub.cfg中加上相关字 ...

感谢回复
折腾了一下,没成功
选择了第三个菜单后,在路径中会显示中文,我以为很简单地增加一两条命令就可以在菜单中显示中文。。。
需要的文件太多太复杂,暂时不折腾了
回复

使用道具 举报

发表于 2019-8-15 15:29:28 | 显示全部楼层
大神啊,谢谢了。
回复

使用道具 举报

发表于 2019-8-15 17:07:06 | 显示全部楼层
大神你好,我改成这样了。改完后我希望我的grub.cfg中的配置能生效要怎么办呢。

在efi分区要目录加了你的efi目录,然后我加了自己的另外两个目录linux,pe结构是这样的。传不了图,我直接打出来
efi根目录文件:

efi,linux,pe,wepe.wim

efi目录主要是改了grub中的内容添加了几个文件grub的内容是

fonts,i386-pc,locale,themes,grub.cfg,grub32.cfg,grubenv,grubfm.cfg

grubcfg的配置改成了:
#################
## (1)特殊变量 ##
#################
#设置菜单的超时时间为5秒
set timeout=3600
#默认启动第4个菜单项众从0开始
set default=3
#
#set vt_handoff=vt.handoff=7
#
set menu_color_normal=cyan/blue
set menu_color_highlight=white/blue
#自动匹配分辨率
set gfxmode=auto
set timeout_style=menu
#将GRUB2设置为简体中文界面
set lang=zh_CN
set gfxterm_font=unicode

#################
## (2)公共模块 insmod module 载入名为"module"的GRUB2模块。 ##
#################
#两种最流行的磁盘分区格式(partmap.lst)
insmod part_gpt
insmod part_msdos
#常见文件系统驱动(fs.lst)
insmod fat
insmod exfat
insmod ntfs
insmod iso9660
insmod ext2
insmod xfs
#一次性加载所有可用的视频驱动
insmod all_video
#图形模式终端
insmod gfxterm
#背景图片支持
insmod png
insmod jpeg
#
insmod gettext
#可用于提供主题支持
insmod gfxmenu     
#将"file"文件映射为"device"回环设备   
insmod loopback        

#列出已经加载的所有模块
lsmod

#########################################
## (3)公共命令(必须放在模块和变量之后) ##
#########################################
#激活图形模式的输出终端,以允许使用中文和背景图
terminal_output  gfxterm
#加载字体文件
#loadfont (hd0,1)/efi/grub/themes/Vimix/unifont-regular-16.pf2 #设置字体
set theme=(hd0,1)/efi/grub/themes/Vimix/theme.txt #设置主题
#set theme=(hd0,1)/efi/grub/themes/breeze/theme.txt #设置主题
export theme

   
#################
## (4)菜单项   ##
# chainloader [--force] file :链式加载"file"文件。通常使用磁盘块表示法,例如用'+1'表示当前根分区的第一个扇区。
# linux file … 使用32位启动协议从"file"载入一个Linux内核映像,并将其余的字符作为内核的命令行参数逐字传入。
#--class 指定icon,在/themes/主题名/icons目录下有同名文件即可显示icon
#################

set root=(hd0,1)

menuentry "Windows 10 enterprise_x64 ISO" --class windows {
   
    chainloader +1
}

menuentry "ubuntu 18.04.2 desktop amd64 ISO " --class ubuntu --class gun-linux {
    set isofile=/linux/ubuntu_18_04/ubuntu-18.04.2-desktop-amd64.iso
    loopback loop0 $isofile
    linux (loop0)/casper/vmlinuz boot=casper iso-scan/filename=$isofile locale=zh_CN.UTF-8
    initrd (loop0)/casper/initrd
}

menuentry "Start WePE ISO " --class windows {
    set isofile=/pe/wepe/wepe_64.iso
    set g4d_dir="/efi/Grub4dos/"
    set cfgfile="find --ignore-floppies --ignore-cd --set-root $isofile; map --mem $isofile (0xff);map --hook;chainloader (0xff)"
    linux $g4d_dir/grub.exe --config-file=$cfgfile
}

#menuentry "hard disk boot" --class harddrive {
#    set root='hd1'
#    chainloader +1
#}

#menuentry "hard disk boot" --class harddrive {
#    set root='hd0,msdos5'
#    set g4d_dir="/Grub4dos/"
#    set cfgfile="map (hd0) (hd1);map (hd1) (hd0);map --hook;rootnoverify (hd0,0);makeactive;chainloader +1"
#    linux $g4d_dir/grub.exe --config-file=$cfgfile
#}

menuentry "Reboot" --class restart {
    reboot;
}

menuentry "ShutDown" --class shutdown {
    halt;
}


点评

定制efi文件的时候就定义了你的grub2路径 grub-mkimage -O x86_64-efi -p /efi/grub -o grubx64.efi part_msdos fat normal 这是最简单的定制,少了任何一项都无法进入普通模式,只会进入救援模式。 -O x86_8  详情 回复 发表于 2019-8-15 18:06
定制efi文件的时候就定义了你的grub2路径 grub-mkimage -O x86_64-efi -p /efi/grub -o grubx64.efi part_msdos fat normal 这是最简单的定制,少了任何一项都无法进入普通模式,只会进入救援模式。 -O x86_8  详情 回复 发表于 2019-8-15 18:04
回复

使用道具 举报

 楼主| 发表于 2019-8-15 18:04:35 | 显示全部楼层
sarsqlg 发表于 2019-8-15 17:07
大神你好,我改成这样了。改完后我希望我的grub.cfg中的配置能生效要怎么办呢。

在efi分区要目录加了你 ...

定制efi文件的时候就定义了你的grub2路径

grub-mkimage -O x86_64-efi -p /efi/grub -o grubx64.efi part_msdos fat normal

这是最简单的定制,少了任何一项都无法进入普通模式,只会进入救援模式。
-O x86_86-efi 定义生成的文件是用于64位EFI平台(注意是大写的O)
-p /efi/grub 定义生成的文件使用的grub2路径是 /efi/grub ,有关grub2的文件都放在这个文件夹里。(小写的p)
-o grubx64.efi 定义生成的文件为grubx64.efi (小写的o)
part_msdos 定义可识别的分区格式
fat 定义可识别的文件系统
normal 定义可使用的命令集
后面三个参数是模块文件列表,要包含的模块都可以在这里列出,如果使用没有包含在这里的模块就要将模块文件放在grub2文件夹中,在配置文件中使用insmod 命令导入。

默认的配置文件是grub2文件夹中的 grub2.cfg
要改变默认配置文件就要在定制时加上内置配置参数,如 -c my.cfg 然后在my.cfg中指定新的配置文件
回复

使用道具 举报

 楼主| 发表于 2019-8-15 18:06:28 | 显示全部楼层
本帖最后由 hilsonma 于 2019-8-15 18:40 编辑
sarsqlg 发表于 2019-8-15 17:07
大神你好,我改成这样了。改完后我希望我的grub.cfg中的配置能生效要怎么办呢。

在efi分区要目录加了你 ...


如果你定制时使用的参数是 -p /efi/grub
那么你修改 /efi/grub/grub.cfg 你的配置就会生效。
如果你直接使用我定制的grubx64.efi 那么修改 /efi/grub/grub.cfg 就会生效
当然前提是引导定制的grubx64.efi (或者已改名为bootx64.efi或grubfmx64.efi等等)


你在grub文件夹中添加的
i386-pc是用于bios平台的,efi启动用不到
grub32.cfg 必需在其他配置文件中引用
grubfm.cfg 原本我已在grub.cfg中引用

你修改的grub.cfg
insmod part_msdos
insmod fat
这两项一般不需要,引导文件正常已包含,除非不是fat分区启动。
你的菜单项中基本都是bios启动的,所以你的配置文件生效了,但无法启动

也就是说,你这个配置文件其实是bios启动平台的
定制时应该使用的参数是 -O i386-pc -p /boot/grub -o core.img
然后 Copy /B i386-pc\boot.img+core.img g2ldr
最后在bios引导中指向g2ldr这个引导文件才能引导成功
当然,相关的文件都要放到 /boot/grub 而不是 /efi/grub

至于uefi平台,你这个配置文件无法启动。
在uefi平台中,你的改动已生效,引导已经到了你这个配置文件,但这个配置文件的内容导致启动无法继续下去。
回复

使用道具 举报

发表于 2019-8-15 21:46:43 | 显示全部楼层
hilsonma 发表于 2019-8-15 18:06
如果你定制时使用的参数是 -p /efi/grub
那么你修改 /efi/grub/grub.cfg 你的配置就会生效。
如果你 ...

大神,的确我的菜单生效了但点了后没有实际想要的效果,而且主题也没生效,我之前在BIOS的都可以生效,但我现在想要改成uefi的方式了。哪我现在要怎么改才能和bios一样的效果呢。还是通过guub引导的方式。

点评

没有图片,我也看不出个所以然,只能假定你把需要加载的模块都加载了。 我一般是这样写的: 看起来你没有设置 color_normal 和 color_highlight 不知道这些奇怪的东西你是在哪里抄的。。  详情 回复 发表于 2019-8-16 09:42
我没有用过主题,也不懂  详情 回复 发表于 2019-8-15 22:46
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2019-12-10 14:58

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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