无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: wintoflash

[原创] GRUB2 UEFI 下的磁盘仿真

    [复制链接]
 楼主| 发表于 2019-11-20 17:44:58 | 显示全部楼层
ddsony 发表于 2019-11-20 15:01
强!VHDX有搞头了。顺带问一下:动态vhd和vhdx能够在深度隐藏分区map出来的虚拟盘里被ntboot启动吗?
好 ...

那要看你是怎么隐藏的。
首先,bootmgfw.efi要能读到vhd,
其次,里面的Windows要能读到自己。
具体能不能,不清楚。反正UD那种肯定不行
回复

使用道具 举报

 楼主| 发表于 2019-11-20 17:47:43 | 显示全部楼层
chenall 发表于 2019-11-20 14:42
借楼问一下GRUB2有没有比较好的学习教程.有时间我也想来学习下grub2

官网只是简单的介绍,有好多命令我看 ...

UEFI
BIOS下要用汇编,这个我玩不转。
GRUB2目前官方文档有点过时,确实是个问题。

我个人觉得GRUB2的脚本比GRUB4DOS简单。
语法类似bash shell,但是阉割了很多,比如不支持管道。
另外我修改的版本带Lua模块,可以用Lua写菜单。
回复

使用道具 举报

发表于 2019-11-20 23:59:10 | 显示全部楼层
wuwuzz 发表于 2019-11-20 07:36
为方便测试对比,营造了3光驱环境做实验:

第1 USBCD  装经典Win10PE V16

是光盘EFI程序本身的限制。
MS   的 boot*.efi  不支持 多光盘; 只支持第一个光盘。用Linux光盘,多少个都没问题。

点评

M大,请教一个问题。 wimboot启动wim,关闭安全启动,一切正常。开启安全启动,出现以下错误: [attachimg]405448[/attachimg] 如果不通过wimboot,是可以正常启动的。 如果使用Udm里面的grub2,runudm @bootx64.  详情 回复 发表于 2019-11-21 08:49
回复

使用道具 举报

 楼主| 发表于 2019-11-21 08:49:16 | 显示全部楼层
mdyblog 发表于 2019-11-20 23:59
是光盘EFI程序本身的限制。
MS   的 boot*.efi  不支持 多光盘; 只支持第一个光盘。用Linux光盘,多少 ...

M大,请教一个问题。
wimboot启动wim,关闭安全启动,一切正常。开启安全启动,出现以下错误:
深度截图_选择区域_20191121083831.png
如果不通过wimboot,是可以正常启动的。
如果使用Udm里面的grub2,runudm @bootx64.efi: .....启动也是正常的。
请问您是移植的wimboot吗,如果是的,请教一下做了什么修改才能正常通过安全启动?
----------------
用win7的bootmgfw.efi是正常的,因为它好像不会强制检验什么东西。


点评

默认 UDM中用的是 bootmgfw.efi。  详情 回复 发表于 2019-11-21 09:44
回复

使用道具 举报

发表于 2019-11-21 09:44:03 | 显示全部楼层
wintoflash 发表于 2019-11-21 08:49
M大,请教一个问题。
wimboot启动wim,关闭安全启动,一切正常。开启安全启动,出现以下错误:

默认 UDM中用的是 bootmgfw.efi。

点评

wimboot用win7的bootmgfw.efi,可以通过安全启动,用win8及以上的,不能通过安全启动。 UDm好像都可以。为什么呢?  详情 回复 发表于 2019-11-21 09:47
回复

使用道具 举报

 楼主| 发表于 2019-11-21 09:47:44 | 显示全部楼层
mdyblog 发表于 2019-11-21 09:44
默认 UDM中用的是 bootmgfw.efi。

wimboot用win7的bootmgfw.efi,可以通过安全启动,用win8及以上的,不能通过安全启动。
UDm好像都可以。为什么呢?
回复

使用道具 举报

发表于 2019-11-21 10:20:03 | 显示全部楼层
hi, good working.
but backgroundimage was not showed in my grub theme.

how to create grubx64.efi with mod? or set to grub.cfg?

my cfg .

terminal_output gfxterm
insmod part_msdos
insmod ntfs
insmod gfxmenu
insmod png
insmod font

insmod jpeg
insmod part_acorn
insmod part_amiga
insmod part_apple
insmod part_bsd
insmod part_gpt
insmod part_msdos
insmod part_sun
insmod part_sunpc
insmod ext2
insmod ntfs
insmod iso9660
insmod loopback

set icondir=$prefix/themes/icons

set theme=${prefix}/themes/oxygen/theme.txt
export theme

点评

gfxmode not set.  详情 回复 发表于 2019-11-21 11:27
回复

使用道具 举报

 楼主| 发表于 2019-11-21 11:27:19 | 显示全部楼层
2012apple3000 发表于 2019-11-21 10:20
hi, good working.
but backgroundimage was not showed in my grub theme.

gfxmode not set.

点评

Sorry, but i have "set gfxmode" if [ "$disable_gfxterm" != true ]; then insmod all_video gfxmode=1024x768 if terminal_output --append gfxterm then terminal_output --remove consol  详情 回复 发表于 2019-11-21 12:10
回复

使用道具 举报

发表于 2019-11-21 12:10:59 | 显示全部楼层
本帖最后由 2012apple3000 于 2019-11-21 12:13 编辑

Sorry, but i have "set gfxmode"

if [ "$disable_gfxterm" != true ]; then
  insmod all_video
  gfxmode=1024x768
  if terminal_output --append gfxterm
  then
      terminal_output --remove console
  fi
fi

set gfxmode=1024x768


my old grubx64.efi is good work.
but new compiled grubx64.efi with your grub-mkimage bat (with module(ntboot wimboot)), has display problem.
So , i think that i must add some mod in bat..
what problem?

my old grubx64.efi
https://youtu.be/xWVUTFx37Mw

new compiled efi
https://youtu.be/rdGuJy3PVGA

点评

how did you build 'grubx64.efi'? and what's the content of theme.txt  详情 回复 发表于 2019-11-21 12:58
回复

使用道具 举报

 楼主| 发表于 2019-11-21 12:58:25 | 显示全部楼层
2012apple3000 发表于 2019-11-21 12:10
Sorry, but i have "set gfxmode"

if [ "$disable_gfxterm" != true ]; then

how did you build 'grubx64.efi'?
and what's the content of theme.txt

点评

grub-mkimage -d x86_64-efi -p /boot/grub -o grubx64.efi -O x86_64-efi acpi affs afs all_video bfs bitmap bitmap_scale blocklist boot bsd btrfs cat chain cmp commandline configfile cpio crc date dateho  详情 回复 发表于 2019-11-21 13:20
回复

使用道具 举报

发表于 2019-11-21 13:20:41 | 显示全部楼层
wintoflash 发表于 2019-11-21 12:58
how did you build 'grubx64.efi'?
and what's the content of theme.txt

grub-mkimage -d x86_64-efi -p /boot/grub -o grubx64.efi -O x86_64-efi acpi affs afs all_video bfs bitmap bitmap_scale blocklist boot bsd btrfs cat chain cmp commandline configfile cpio crc date datehook dd disk dm_nv echo efi_gop efi_uga efifwsetup efiload eval exfat expr ext2 extcmd f2fs fat fb file font fshelp getenv getkey gfxmenu gfxterm gfxterm_background gfxterm_menu gptsync gzio halt hashsum help hexdump hfs hfsplus iso9660 jfs jpeg keystatus legacycfg linux linuxefi loadbios loadenv loopback ls lsacpi lua lvm lzopio mdraid09 mdraid09_be memdisk minicmd multiboot multiboot2 newc normal ntfs part_apple part_bsd part_gpt part_msdos partnew parttool png probe progress raid5rec raid6rec random read reboot regexp reiserfs sbpolicy search setenv shell sleep squash4 syslinuxcfg tar terminal terminfo test tga time true udf vhd video video_colors video_fb videoinfo wimboot xfs xnu xzio zfs map ntboot png

all theme same problem.

点评

can't reproduce  详情 回复 发表于 2019-11-21 14:22
回复

使用道具 举报

发表于 2019-11-21 14:20:59 | 显示全部楼层
chenall 发表于 2019-11-20 14:42
借楼问一下GRUB2有没有比较好的学习教程.有时间我也想来学习下grub2

官网只是简单的介绍,有好多命令我看 ...

我是看了这篇,然后就慢慢上手了。
http://www.jinbuguo.com/linux/grub.cfg.html

时不时也参考一下官方文档。
http://www.gnu.org/software/grub/manual/grub/grub.html

有时还需要网上搜索补充学习,如正则表达式。

点评

谢谢  发表于 2019-11-21 17:24
回复

使用道具 举报

 楼主| 发表于 2019-11-21 14:22:06 | 显示全部楼层
2012apple3000 发表于 2019-11-21 13:20
grub-mkimage -d x86_64-efi -p /boot/grub -o grubx64.efi -O x86_64-efi acpi affs afs all_video bfs  ...

can't reproduce
testx64.efi.7z (1.78 MB, 下载次数: 14)

点评

good work. do you use theme? is it inner grub.cfg? i want use myUSB:\boot/grub/grub.cfg would you show sample grub.cfg?  详情 回复 发表于 2019-11-21 14:40
回复

使用道具 举报

发表于 2019-11-21 14:40:29 | 显示全部楼层
本帖最后由 2012apple3000 于 2019-11-21 14:41 编辑

good work. do you use theme? is it inner grub.cfg? i want use myUSB:\boot/grub/grub.cfg
would you show sample grub.cfg?



2019-11-21_15-35-42.jpg
回复

使用道具 举报

发表于 2019-11-21 15:05:15 | 显示全部楼层
本帖最后由 2012apple3000 于 2019-11-21 15:11 编辑

this is my efi grub.cfg and theme

compiled_bootx64.efi(created with your bat commandline)


boot.7z

1.41 MB, 下载次数: 20, 下载积分: 无忧币 -2

回复

使用道具 举报

 楼主| 发表于 2019-11-21 15:08:38 | 显示全部楼层
2012apple3000 发表于 2019-11-21 14:40
good work. do you use theme? is it inner grub.cfg? i want use myUSB:\boot/grub/grub.cfg
would you ...
  1. set pager=0;
  2. set debug=off;
  3. export enable_progress_indicator=0;

  4. loadfont ${prefix}/fonts/unicode.xz;
  5. export locale_dir=${prefix}/locale;

  6. set lang=en_US

  7. export gfxmode=1024x768;
  8. export gfxpayload=keep;
  9. terminal_output gfxterm;

  10. export theme=$prefix/themes/slack/theme.txt;

  11. menuentry "menu 1" {
  12.   echo 1
  13. }
  14. menuentry "menu 2" {
  15.   echo 2
  16. }
复制代码

点评

I appreciate you. i changed yours.Good working.  详情 回复 发表于 2019-11-21 15:42
回复

使用道具 举报

发表于 2019-11-21 15:42:11 | 显示全部楼层

I appreciate you. i changed yours.Good working.
回复

使用道具 举报

发表于 2019-11-23 11:02:06 | 显示全部楼层
谢谢分享,非常给力
回复

使用道具 举报

发表于 2019-11-23 13:47:47 | 显示全部楼层
不错,太牛逼了!收藏!
回复

使用道具 举报

发表于 2019-11-23 14:02:31 | 显示全部楼层
好贴,收藏先。
回复

使用道具 举报

发表于 2019-11-23 16:04:15 | 显示全部楼层
本帖最后由 ggmm888 于 2019-11-23 20:00 编辑

set pager=0;
set debug=off;
export enable_progress_indicator=0;

loadfont ${prefix}/fonts/unicode.xz;
export locale_dir=${prefix}/locale;

set lang=en_US

export gfxmode=1024x768;
export gfxpayload=keep;
terminal_output gfxterm;

export theme=$prefix/themes/slack/theme.txt;

menuentry "menu 1" {
  echo 1
}
menuentry "menu 2" {
  echo 2
}

en_US语言,unicode.xz字体,这两个文件如何得来?

GRUB2 UEFI 下的磁盘仿真,grub2   下载:https://github.com/aIive/builds/archive/master.zip 这个文件里面没有,还是不适合使用中文?


还有一个问题,得到的bootx64.efi文件,在纯UEFI下启动ISO镜像,就是ISO镜像必须附合UEFI规范的才能启动,符合BIOS镜像不能启动,对吗?测试分区工具DG.ISO不能启动


启动ISO文件:
menuentry "启动ISO文件" {
search --file /neyan/grub/memdisk --set=root
linux16  /neyan/grub/memdisk  iso
initrd16 /rdtobot/DG.iso
}

上面的工具,启动ISO文件应如何写菜单,MAP菜单不能使用
回复

使用道具 举报

发表于 2019-11-24 22:16:24 | 显示全部楼层
grub.cfg 菜单喜欢显示中文

点评

喜欢中文菜单就直接使用中文菜单,不需要特别设置: menuentry "菜单 1" { echo 1 } menuentry "菜单 2" { echo 2 } menuentry "启动ISO文件" { search --file /neyan/grub/memdisk --set=root linux  详情 回复 发表于 2019-11-25 15:12
回复

使用道具 举报

发表于 2019-11-25 15:12:12 | 显示全部楼层
本帖最后由 hilsonma 于 2019-11-25 15:20 编辑
ggmm888 发表于 2019-11-24 22:16
grub.cfg 菜单喜欢显示中文

喜欢中文菜单就直接使用中文菜单,不需要特别设置:
menuentry "菜单 1" {
  echo 1
}
menuentry "菜单 2" {
  echo 2
}
只是在虚拟机下有可能中文显示不全,实机一般都能显示的。

另外,这条菜单是bios平台下用的
menuentry "启动ISO文件" {
search --file /neyan/grub/memdisk --set=root
linux16  /neyan/grub/memdisk  iso
initrd16 /rdtobot/DG.iso
}
uefi平台下:
menuentry "启动ISO文件" "/rdtobot/DG.iso" {
        search -s -f $2
        map $2
        boot
}
但你这个DG.iso应该是不能在uefi平台下启动的,必须是支持uefi启动的iso文件才可以用上面这条菜单启动。
把/rdtobot/DG.iso 替换为你要启动的支持uefi的iso文件。
支持uefi的iso文件一般都有\efi\boot\bootx64.efi这样的文件,也可能是efi.img这样的文件。

回复

使用道具 举报

发表于 2019-11-25 16:13:20 | 显示全部楼层
我是在虚拟机中测试的,虚拟机中中文是??号,实机无条件测试。
多谢了

点评

关于中文显示请参考http://bbs.wuyou.net/forum.php?mod=redirect&goto=findpost&ptid=413597&pid=3910839&fromuid=586362  详情 回复 发表于 2019-11-30 22:37
回复

使用道具 举报

发表于 2019-11-30 22:37:34 | 显示全部楼层
ggmm888 发表于 2019-11-25 16:13
我是在虚拟机中测试的,虚拟机中中文是??号,实机无条件测试。
多谢了

关于中文显示请参考http://bbs.wuyou.net/forum.php?m ... &fromuid=586362
回复

使用道具 举报

发表于 2019-12-1 18:53:08 | 显示全部楼层
本帖最后由 ggmm888 于 2019-12-1 18:57 编辑

grub.cfg显示中文菜单,加入下面内容,使用utf-8编码
terminal_output  gfxterm
loadfont /boot/grub/fonts/unicode.pf2
set locale_dir=/boot/grub/locale
set lang=zh_CN
set gfxmode=auto,800x600,1024x768

添加
语言文件 locale/zh_CN.mo
字体文件 fonts/unicode.pf2

grub.cfg是显示中文菜单,但是执行菜单出现PE不能正常显示等问题?在运行菜单命令时,英文完全不显示。这是在虚拟机中测试结果。
回复

使用道具 举报

 楼主| 发表于 2019-12-10 10:35:26 | 显示全部楼层
本帖最后由 wintoflash 于 2019-12-10 10:38 编辑

20191209更新
添加--rw(-w)参数,可以启用写入支持
  • 只支持内存盘,不会向本地的文件实际写入内容。
  • 此参数对光盘无效。

添加--nb(-n)参数,加载虚拟盘后不立即启动
  • 虚拟盘在grub2中是不可见的
  • 支持加载多个虚拟盘,最后一个盘不加-n参数就能启动了

读虚拟盘的时候,不再显示进度
虚拟盘的UUID不再固定,而是随机生成
    UUID不再固定为 ebe35ad8-6c1e-40f5-aaed-0b919a46bf4b
使用GitHub Actions自动编译
回复

使用道具 举报

发表于 2019-12-21 17:16:19 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2019-12-21 17:33 编辑

问下wintoflash大神,你修改的grub2,UEFI下面怎么实现网启PE.ISO?能否支持http协议?

点评

map --mem (http)/xxoo.iso  详情 回复 发表于 2019-12-21 18:01
回复

使用道具 举报

发表于 2019-12-21 18:01:52 | 显示全部楼层
liuzhaoyzz 发表于 2019-12-21 17:16
问下wintoflash大神,你修改的grub2,UEFI下面怎么实现网启PE.ISO?能否支持http协议?

map --mem (http)/xxoo.iso

点评

引导文件选择编译出来的grubx64.efi?他会找本地配置文件/boot/grub/grub.cfg,不会找webserver上面的grub.cfg,怎么办,找不到就进入了rescue。 葱大可有详细点的教程?你分享的经验太多了,看得目不暇接啊!  详情 回复 发表于 2019-12-21 18:10
回复

使用道具 举报

发表于 2019-12-21 18:10:06 | 显示全部楼层

引导文件选择编译出来的grubx64.efi?他会找本地配置文件/boot/grub/grub.cfg,不会找webserver上面的grub.cfg,怎么办,找不到就进入了rescue。
葱大可有详细点的教程?你分享的经验太多了,看得目不暇接啊!

点评

首先要编辑 arch\x64\builtin.lst ,在最后添加 efinet http tftp 之类的,加上这些模块。后面我就不清楚了,我不会网启。以前葱也没教会我。  详情 回复 发表于 2019-12-21 18:32
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-3-29 04:54

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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