phyuzhoukai
发表于 2019-6-17 23:24:42
本帖最后由 phyuzhoukai 于 2019-6-17 23:46 编辑
问一下,efi下有没有办法利用自动生成菜单来直接引导vhdx文件?
以及自动生成菜单能生成二级文件目录里的文件名吗?
hilsonma
发表于 2019-6-18 11:49:03
本帖最后由 hilsonma 于 2019-6-18 12:03 编辑
phyuzhoukai 发表于 2019-6-17 23:24
问一下,efi下有没有办法利用自动生成菜单来直接引导vhdx文件?
以及自动生成菜单能生成二级文件目录里 ...
grub2文件浏览功能可以查看任意层次的文件夹的任意文件名,查看方式本身就是自动生成菜单,但是一键启动就要看支持的文件类型。
目前efi文件和支持uefi的wim文件可以一键启动,iso文件还不支持,vhdx文件应该是可以支持的,因为我之前很少用vhd,所以还没有设计去引导,但bcd菜单本身是支持引导vhdx的,你如果有兴趣可以从这个方向去自已设计。
phyuzhoukai
发表于 2019-6-18 17:06:11
hilsonma 发表于 2019-6-18 11:49
grub2文件浏览功能可以查看任意层次的文件夹的任意文件名,查看方式本身就是自动生成菜单,但是一键启 ...
好的,谢谢
ahxx
发表于 2019-6-30 21:53:44
先来感谢大神的热心分享,再来看文章{:1_186:}
lforl
发表于 2019-7-7 17:14:07
这个很像当初grub4dos那个简洁的启动风格了,我很喜欢,如果能自动(需要编程来判断了)搜索C盘根目录的PE.ISO加入到启动菜单里,那就妙哉。
pcfan120
发表于 2019-7-27 20:11:03
大师,现在选择的是Enroll hash 和 grubx64.efi,可以通过第一步的安全启动了,即出现了wepe,wim/efi 上下选择菜单,但接下来的菜单里,第一个菜单我选启动默认的wepe后,报错ox00000f,an unexpect error occurred,第二个菜单 我选择自定义pe下的wim 启动,出现蓝色error界面 ‘could not install securitu protocol (2)Invalid Parameter’
详细的信息我发消息给你了
pcfan120
发表于 2019-7-27 20:21:15
hilsonma 发表于 2019-6-18 11:49
grub2文件浏览功能可以查看任意层次的文件夹的任意文件名,查看方式本身就是自动生成菜单,但是一键启 ...
大师刚测试了,现在选择的是Enroll hash 和 grubx64.efi,可以通过第一步的安全启动了,即出现了wepe,wim/efi 上下选择菜单,但接下来的菜单里,第一个菜单我选启动默认的wepe后,报错ox00000f,an unexpect error occurred,第二个菜单 我选择自定义pe下的wim 启动,出现蓝色error界面 ‘could not install securitu protocol (2)Invalid Parameter’
详细的信息我发消息给你了
hilsonma
发表于 2019-7-27 21:26:02
pcfan120 发表于 2019-7-27 20:21
大师刚测试了,现在选择的是Enroll hash 和 grubx64.efi,可以通过第一步的安全启动了,即出现了wepe, ...
看来还是没有办法进行简化。谢谢你的帮助。
gdck
发表于 2019-8-8 00:41:06
下官方原版的没有wimboo模块
hilsonma
发表于 2019-8-8 14:10:04
gdck 发表于 2019-8-8 00:41
下官方原版的没有wimboo模块
建议下载wintoflash的新版
2011shenql
发表于 2019-8-9 15:19:05
谢谢分享,正需要
2011shenql
发表于 2019-8-12 10:32:46
非常感谢!
请问如何在菜单中显示中文?
hilsonma
发表于 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_outputgfxterm
loadfont unicode
相应地,使用了以上语句,就要在相应的文件夹放置相应的文件,如:
语言文件 locale/zh_CN.mo
字体文件 fonts/unicode.pf2
由于使用了gfxterm模块,所以也要相应的模块文件 x86_64-efi/gfxterm.mod
为了简单,我很少使用中文,或者尽量使用默认显示没有问题的中文。
例如:”返回“ 的"返”默认显示有问题我就只使用一个字“回”,“搜索”显示有问题我就使用“查找”。
这样就不需要加字体语句。只要是utf-8编码,grub2一般都默认显示的。
2011shenql
发表于 2019-8-13 10:24:28
hilsonma 发表于 2019-8-12 15:04
在菜单中直接使用中文,以UTF-8编码保存菜单文件grub.cfg
如果显示有问题就在grub.cfg中加上相关字 ...
感谢回复
折腾了一下,没成功
选择了第三个菜单后,在路径中会显示中文,我以为很简单地增加一两条命令就可以在菜单中显示中文。。。
需要的文件太多太复杂,暂时不折腾了
sarsqlg
发表于 2019-8-15 15:29:28
大神啊,谢谢了。
sarsqlg
发表于 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_outputgfxterm
#加载字体文件
#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;
}
hilsonma
发表于 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中指定新的配置文件
hilsonma
发表于 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平台中,你的改动已生效,引导已经到了你这个配置文件,但这个配置文件的内容导致启动无法继续下去。
sarsqlg
发表于 2019-8-15 21:46:43
hilsonma 发表于 2019-8-15 18:06
如果你定制时使用的参数是 -p /efi/grub
那么你修改 /efi/grub/grub.cfg 你的配置就会生效。
如果你 ...
大神,的确我的菜单生效了但点了后没有实际想要的效果,而且主题也没生效,我之前在BIOS的都可以生效,但我现在想要改成uefi的方式了。哪我现在要怎么改才能和bios一样的效果呢。还是通过guub引导的方式。
hilsonma
发表于 2019-8-15 22:46:45
sarsqlg 发表于 2019-8-15 21:46
大神,的确我的菜单生效了但点了后没有实际想要的效果,而且主题也没生效,我之前在BIOS的都可以生效,但 ...
我没有用过主题,也不懂
sarsqlg
发表于 2019-8-18 00:22:11
hilsonma 发表于 2019-8-15 22:46
我没有用过主题,也不懂
可以加载主题了,是我用了你定制的grub efi,但你定制的没有加载主题需要的模块所以没效果。我从新定制后可以加载了。现在遇到了新问题。我看了grubfm.cfg后有了想法。想搜索磁盘中按照一定规则的文件显示出来。但好像现本有些问题能帮我看看吗,脚本是这样的。
grub.cfg菜单中有项是这样的。
menuentry "2.wepe startup find, name [.wim .iso .efi]" --hotkey=2 --class windows {
export op='((\.wim)|(\.iso)|(\.efi))$'
configfile "${prefix}"/wepe_startup_find.cfg
}
解释:
export op='((\.wim)|(\.iso)|(\.efi))$' #传入一个正则表达式过滤出定制的文件
configfile "${prefix}"/wepe_startup_find.cfg#转到wepe_startup_find.cfg
wepe_startup_find.cfg 大概是这样的。
grubfm_init;
iftest -f "${op}"; then
echo "grubfm grubfm_open"
echo "op:${op}"
grubfm_open "${op}"
unset op;
else
echo "grubfm grubfm_find"
echo "op:${op}"
#set name_regexp="${op}"
grubfm_find "${op}"
unset op;
fi
#name_check
function name_check {
echo "name_check arg1:${1}";
set name_file="${1}";
if ! test -f "${name_file}"; then
unset name_file;
return false
fi
if ! regexp "${name_regexp}" "${name_file}"; then
unset name_file;
return false
fi
menuentry "${name_file}" "${name_file}" {
#$1=title,$2=
export op=$2;
configfile ${grub_fm};
}
unset name_file;
}
#dir_earch
function dir_earch {
echo "dir earch find arg1:${1}";
set dir="${1}";
for item in ${dir}/*; do
if test -d "${item}"; then
#dir_deep_3 "${item}"
else
name_check "${item}"
fi;
done;
unset dir;
}
# grubfm_find DIR
function grubfm_find {
set default=1;
set name_regexp="${1}"
menuentry ".." --class dir {
configfile "${grub_fm}";
}
#列出grub可见的设备
ls
for device in (*); do
echo "earch device:${device}"
if test -d "${device}"; then
#probe --set=fs -f "${device}";
#probe --set=label -l "${device}";
if regexp 'loop' "${device}"; then
continue;
elif test "${device}" = "(memdisk)" -o "${device}" = "(proc)"; then
continue;
fi;
fi;
for item in ${device}/*; do
#regexp --set=name '.*/(.*)$' "${item}";
if test -d "${item}"; then
dir_earch "${item}"
else
name_check "${item}
fi;
done;
done;
unset name_regexp;
}
sarsqlg
发表于 2019-8-18 00:22:53
wintoflash 发表于 2019-8-16 09:42
没有图片,我也看不出个所以然,只能假定你把需要加载的模块都加载了。
我一般是这样写的:
看起来你没 ...
恩,谢谢,的确是有些模块没加载,写脚本遇到了新问题帮忙看看哈。。
Sho
发表于 2019-8-23 09:08:25
请问楼主,运行build_grub.bat,编译grubx64.efi时出现错误:
grub-mkimage.exe: error: relocation 0x4 is not implemented yet.
efi32位和legacy都没有错误,是啥原因?
hilsonma
发表于 2019-8-23 09:40:43
Sho 发表于 2019-8-23 09:08
请问楼主,运行build_grub.bat,编译grubx64.efi时出现错误:
grub-mkimage.exe: error: relocation 0x4 i ...
我也不懂。
你可以尝试自己排查
先用最基本的参数试试
grub-mkimage -O x86_64-efi -p /efi/grub -o grubx64.efi part_msdos fat normal
如果没有问题再加上自己需要的模块,如我现在的
grub-mkimage -O x86_64-efi -p /efi/grub -o grubx64.efi part_msdos part_gpt fat exfat ntfs normal chain configfile probe regexp test search wimboot halt reboot help linux
Sho
发表于 2019-8-23 09:58:42
hilsonma 发表于 2019-8-23 09:40
我也不懂。
你可以尝试自己排查
先用最基本的参数试试
最基本的参数也试了,一样的错误,我再换台电脑试试吧
Sho
发表于 2019-8-23 10:45:58
wintoflash 发表于 2019-8-23 10:27
32位windows?
64位windows10 1903
晚上回家试试家里的电脑,再向老大汇报哈!
ksafei
发表于 2019-8-23 21:06:25
wintoflash 发表于 2019-8-23 10:27
32位windows?
W大,grub2_0812版在64位windows10_1809中运行build_grub.bat生成 的grubx64.efi 0k,之前版本则正常,请查验
Sho
发表于 2019-8-23 22:00:31
wintoflash 发表于 2019-8-23 10:27
32位windows?
W大,回家试了也是同样的错误,和楼上这位仁兄一样grubx64.efi 0k
看了国外的论坛,似乎有个patch要打补丁?请查验下,我也是下的0812的版本的
土老表
发表于 2019-8-25 19:32:39
1
zyy
发表于 2019-9-25 11:29:09
谢谢楼主的分享,学习中
页:
1
[2]
3
4
5
6
7
8
9
10
11