无忧启动论坛

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

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

    [复制链接]
121#
发表于 2020-12-29 13:06:31 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-12-29 13:30 编辑
wintoflash 发表于 2020-12-28 20:56
稍微改了一下ntboot对磁盘的判定。
现在也可以用 ntboot 启动map出来的vhd里面的windows系统了。
在我 ...

2020-12-29日,报告下好消息,UEFI-RAMOS已被彻底攻克:
一、抛弃ntfs_x64.efi的情况下,grub2+ntboot已完成了通杀WIN7 8 10单镜像、双镜像通杀:
1、ntboot启动WIN7 8.1 10+基于svbus驱动的vhd到内存成功。
2、ntboot启动WIN7 8.1 10+基于primo驱动的RAMOS成功,包括单镜像、双镜像模式。
WIN7 8.1 10双镜像模式支持无压缩、compact压缩、wimboot压缩。
有个win7英文版遇到问题,但我怀疑可能是系统搞坏了,以后有空再验证下。


二、保留ntfs_x64.efi的情况下,g4e/grub2的map已完成了通杀WIN7 8 10单镜像、双镜像通杀:
1、map --mem启动WIN7 8.1 10+基于svbus驱动的vhd到内存成功。
2、直接map启动WIN7 8.1 10+基于primo驱动的RAMOS成功,包括单镜像、双镜像模式。
WIN7 8.1 10双镜像模式支持无压缩、compact压缩、wimboot压缩。
有个win7英文版遇到问题,但我怀疑可能是系统搞坏了,以后有空再验证下。

向Wintoflash、2011yaya2007777、sunsea等等等等各位大神,这么长时间的付出表示衷心的感谢!



点评

报告个好消息,WIN7英文版,单镜像测试没问题了,可能是系统搞乱了的问题,我重新做了个WIN7英文版测试,正常启动win7enpd-primo-ueif-ramos。ntboot和直接map都可以,没问题。  详情 回复 发表于 2020-12-31 07:36
回复

使用道具 举报

122#
发表于 2020-12-29 13:07:26 | 显示全部楼层
wintoflash 发表于 2020-12-29 10:56
加上 --highest=no 参数试试。默认是 highest=yes,也就是强制最高分辨率。
加上 --highest=no 参数试试。默认是 highest=yes,也就是强制最高分辨率。

加上--highest=no 参数之后,分辨率正常了,感谢!
回复

使用道具 举报

123#
发表于 2020-12-29 18:40:29 | 显示全部楼层
hilsonma 发表于 2020-12-29 18:33
你的电脑没有 \Windows 目录,那更简单了
你map了某个vhd后,就只有 (vd0) 的某个分区上有 \Windows , ...

不是,我要修改RAMOS批处理,上面只是举个例子,对于别人的电脑,可能有多个windows,对于我的电脑,没有那个关键字。情况不一而论。
回复

使用道具 举报

124#
发表于 2020-12-31 07:36:32 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2020-12-31 07:48 编辑
liuzhaoyzz 发表于 2020-12-29 13:06
2020-12-29日,报告下好消息,UEFI-RAMOS已被彻底攻克:
一、抛弃ntfs_x64.efi的情况下,grub2+ntboot已 ...

报告个好消息,WIN7英文版,单镜像测试没问题了,可能是系统搞乱了的问题,我重新做了个WIN7英文版测试,正常启动win7enpd-primo-uefi-ramos。ntboot和直接map都可以,没问题。

567楼截图中failed to load image,从此成了未解之谜。。。
http://wuyou.net/forum.php?mod=redirect&goto=findpost&ptid=417233&pid=4204394&fromuid=298214




g4e-grub2-win7enpd-primo-ueif-ramos.jpg (217.71 KB, 下载次数: 347)

g4e-grub2-win7enpd-primo-ueif-ramos.jpg
回复

使用道具 举报

125#
发表于 2021-1-21 11:22:30 | 显示全部楼层
wintoflash 发表于 2020-12-29 10:56
加上 --highest=no 参数试试。默认是 highest=yes,也就是强制最高分辨率。

出于好奇的心理,想问下大神一个问题:
1、官方grub2源代码托管平台,好像是GNU自己搭建的是吗?在他们的官网上,http://www.gnu.org/software/grub/index.html
You can obtain the latest GRUB source from the GIT:
git clone https://git.savannah.gnu.org/git/grub.git
For developers with write access via ssh, use:
git clone <membername>@git.sv.gnu.org:/srv/git/grub.git
他们通过邮件列表来提交代码,反馈问题吗?
github的源代码托管我大概了解点,GNU GRUB的邮件列表,源代码托管我完全不懂。


点评

grub2 及其他很多 gnu 项目都托管在 Savannah http://savannah.gnu.org/ 讨论开发、反馈 bug、提问题都是用的邮件列表。 https://www.gnu.org/software/grub/grub-mailinglist.html  详情 回复 发表于 2021-1-21 11:43
回复

使用道具 举报

126#
发表于 2021-1-21 11:53:20 | 显示全部楼层
wintoflash 发表于 2021-1-21 11:43
grub2 及其他很多 gnu 项目都托管在 Savannah http://savannah.gnu.org/
讨论开发、反馈 bug、提问题 ...

搞不懂这个邮件列表,感觉不如github托管平台直观。

点评

我也不太会用。GNU 项目用这个,一是历史遗留问题,二是平台问题。托管 GNU 项目的平台本身必须保证开源,且不受制于一些商业公司。  详情 回复 发表于 2021-1-21 14:37
回复

使用道具 举报

127#
发表于 2021-6-17 11:00:38 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2021-6-17 11:08 编辑
wintoflash 发表于 2021-1-21 20:12
增加 "--vtoy" 参数,用来启动 ventoy vtoyboot 制作的 Linux vDisk,目前只支持 vhd 格式。
示例:

https://ftp.gnu.org/gnu/grub/
        grub-2.06-for-windows.zip        2021-06-08 13:21        12M         
大神,官方2.06版本已经正式发布了,可有什么值得借鉴的?


另外,想请问下,grub2的changelog在哪里?在官网https://www.gnu.org/software/grub/index.html没看到。


点评

我也是醉了。你下载 grub-2.06.tar.gz (或者 tar.xz),里面有个 NEWS。 [attachimg]481860[/attachimg]  详情 回复 发表于 2021-6-17 20:04
用来网启不错,可以支持proxydhcp了,哈哈  详情 回复 发表于 2021-6-17 15:45
回复

使用道具 举报

128#
发表于 2021-6-17 17:05:06 | 显示全部楼层
江南一根葱 发表于 2021-6-17 15:45
用来网启不错,可以支持proxydhcp了,哈哈

proxydhcp不是你心仪已久的吗?
你在哪里看到的?
有changelog吗?

点评

启动出来看过了,还没想好用啥姿势给ipxe传递性息。  详情 回复 发表于 2021-6-17 17:51
回复

使用道具 举报

129#
发表于 2021-6-17 21:24:47 | 显示全部楼层
wintoflash 发表于 2021-6-17 20:04
我也是醉了。你下载 grub-2.06.tar.gz (或者 tar.xz),里面有个 NEWS。

想看详细的,就看它的提交历 ...

哦,看到了,很详细的解释!
回复

使用道具 举报

130#
发表于 2021-12-21 08:15:12 | 显示全部楼层
wintoflash 发表于 2021-11-11 12:40
删掉efifwsetup就行了。
另外示例命令那个不叫编译。

大神有空请看下751楼,http://www.lucky8k.com/forum.php ... d=133372&pid=652600
到758楼http://wuyou.net/forum.php?mod=r ... 8229&fromuid=298214
是怎么回事?高分辨率2880x1800的MAC,找不到/boot/grub/grub.cfg
grubx64.efi是用默认的build.bat生成的。
回复

使用道具 举报

131#
发表于 2022-3-16 10:35:03 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2022-3-16 10:46 编辑
wintoflash 发表于 2021-11-11 12:40
删掉efifwsetup就行了。
另外示例命令那个不叫编译。

loopback启动菜单最下面一行的提示,因为默认没有加载字库,导致出现乱码现象,这怎么解决?
硬盘里面grub2的菜单/boot/grub.cfg相关内容如下:
set default=1
set fallback=1
set timeout=3
set pager=20
set grub_draw_border=1

#设定菜单字体及背景颜色
set menu_color_normal=white/black
set menu_color_highlight=white/blue

#插入动态模块:保存在$prefix/boot/grub2/i386-pc中
insmod vga
insmod vbe
insmod font
insmod gfxterm
insmod terminal
insmod linux
insmod linux16
insmod iso9660
insmod udf
insmod help
insmod echo
insmod ls
insmod cat
insmod chain
insmod configfile
insmod reboot
insmod halt
insmod gzio
insmod xzio
insmod tar
insmod loopback
insmod part_gpt
insmod regexp
insmod wimboot
insmod ntboot
insmod probe
insmod partnew
insmod test
insmod newc
insmod memdisk
insmod ntldr

set locale_dir=/boot/grub2/locale
set lang=zh_CN
loadfont /boot/grub2/fonts/unicode.pf2
set gfxterm_font=unicode
#set gfxmode=auto,800x600,1024x768
set gfxmode=1024x768,800x600,auto
set gfxpayload=keep
terminal_output gfxterm


menuentry "/linux/veket/v22.a-2022.02.02/veket_22.a.iso-loopback.cfg" "/linux/veket/v22.a-2022.02.02/veket_22.a.iso" {
terminal_output console
search --no-floppy --set --file $2
export iso_path=$2;loopback -d loop;loopback loop $2
set root=loop
configfile (loop)/boot/grub/loopback.cfg
}

上面的主菜单已经加载了字体loadfont /boot/grub2/fonts/unicode.pf2,但是进入loopback启动项之后,会加载iso里面的\grub\loopback.cfg菜单,iso里面的\grub\loopback.cfg内容如下:

loadfont /boot/grub/font.pf2

color_normal=cyan/black
#menu_color_highlight=black/light-gray
menu_color_highlight=yellow/red
menu_color_normal=light-gray/black

menuentry "veket 22.a" {
    linux /vmlinuz pfix=fsck pmedia=cd find_iso=${iso_path}
    initrd /initrd.gz
}

menuentry "veket 22.a - Copy SFS files to RAM" {
    linux /vmlinuz pfix=copy,fsck pmedia=cd find_iso=${iso_path}
    initrd /initrd.gz
}

menuentry "veket 22.a - Don't copy SFS files to RAM" {
    linux /vmlinuz pfix=nocopy,fsck pmedia=cd find_iso=${iso_path}
    initrd /initrd.gz
}

menuentry "veket 22.a - RAM only" {
    linux /vmlinuz pfix=ram,fsck pmedia=cd find_iso=${iso_path}
    initrd /initrd.gz
}

menuentry "veket 22.a - No X" {
    linux /vmlinuz pfix=nox,fsck pmedia=cd find_iso=${iso_path}
    initrd /initrd.gz
}

menuentry "veket 22.a - No KMS (Kernel modesetting)" {
    linux /vmlinuz nomodeset pfix=fsck pmedia=cd find_iso=${iso_path}
    initrd /initrd.gz
}

menuentry "veket 22.a - Ram Disk SHell" {
    linux /vmlinuz pfix=rdsh pmedia=cd find_iso=${iso_path}
    initrd /initrd.gz
}

menuentry "Shutdown" {
        halt
}

menuentry "Reboot" {
        reboot
}


第一行的loadfont /boot/grub/font.pf2,这是个英文字体,不是中文字体,因而显示这个\grub\loopback.cfg菜单二级菜单,左下角会出现乱码现象,如果font.pf2改成unicode.pf2字体,应该可以显示中文。但是问题是iso里面的\grub\loopback.cfg以及他所加载的字体是在iso中,而iso不受我的控制,所以我希望grub2左下角的提示能改成英文字符,而不是用中文字符提示,因为这不是个案,debian,ubuntu之类的可能也存在类似的现象,这个乱码提示虽然不影响启动,但是总觉得不美。

左下角这个提示能否改成英文?是不是需要重新编译grub2?还是有个我不知道的参数可以设置?


左下角乱码现象.png (8.26 KB, 下载次数: 219)

左下角乱码现象.png

QQ截图20220316103713.png (20.97 KB, 下载次数: 213)

QQ截图20220316103713.png

点评

仔细一看,你在菜单里面就切换到了文本模式: menuentry "/linux/veket/v22.a-2022.02.02/veket_22.a.iso-loopback.cfg" "/linux/veket/v22.a-2022.02.02/veket_22.a.iso" { terminal_output console search --no  详情 回复 发表于 2022-3-16 14:50
回复

使用道具 举报

132#
发表于 2022-3-16 15:45:33 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2022-3-16 15:48 编辑
wintoflash 发表于 2022-3-16 14:50
仔细一看,你在菜单里面就切换到了文本模式:
menuentry "/linux/veket/v22.a-2022.02.02/veket_22.a.is ...

必须用文本模式,这是因为veket.iso里面默认用的就是文本模式,这一点困扰了我很长的时间,百思不得其解,前面的帖子有讨论。puppy.iso也是类似。iso里面的菜单不受我控制,所以我只有修改硬盘的菜单去适应iso内部的二级菜单。

按照你的提示,我改成如下的菜单,亲测可行:
menuentry "/linux/veket/v22.a-2022.02.02/veket_22.a.iso-loopback.cfg" "/linux/veket/v22.a-2022.02.02/veket_22.a.iso" {
terminal_output console;set lang=en_US
search --no-floppy --set --file $2
export iso_path=$2;loopback -d loop;loopback loop $2
set root=loop
configfile (loop)/boot/grub/loopback.cfg
}

QQ截图20220316154612.png (8.8 KB, 下载次数: 240)

QQ截图20220316154612.png

点评

为什么? 图形模式下显示不出来东西?那说明linux内核配置有问题。  详情 回复 发表于 2022-3-16 16:31
回复

使用道具 举报

133#
发表于 2022-3-16 16:44:08 来自手机 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2022-3-16 17:11 编辑
wintoflash 发表于 2022-3-16 16:31
为什么?
图形模式下显示不出来东西?那说明linux内核配置有问题。

http://wuyou.net/forum.php?mod=redirect&goto=findpost&ptid=420085&pid=4243486&fromuid=298214
从300楼开始,到355楼,http://wuyou.net/forum.php?mod=r ... &fromuid=298214折腾了好长时间,最后就是改为文本模式,解决了问题。

图形模式也不是不行,如果修改iso内部的菜单为图形模式,和硬盘的菜单匹配,应该也可以的,我好像试过,忘记了。最主要的问题是各种iso经常更新,iso内部的菜单不受我的控制,所以只有我自己改适配iso。

点评

什么意思 没看懂  详情 回复 发表于 2022-3-16 17:00
回复

使用道具 举报

134#
发表于 2022-3-16 17:03:48 | 显示全部楼层

iso里面的\grub\loopback.cfg内容如下:
set gfxmode=1024x768,800x600,auto
set gfxpayload=keep
terminal_output gfxterm
loadfont /boot/grub/font.pf2

color_normal=cyan/black
#menu_color_highlight=black/light-gray
menu_color_highlight=yellow/red
menu_color_normal=light-gray/black

menuentry "veket 22.a" {
    linux /vmlinuz pfix=fsck pmedia=cd find_iso=${iso_path}
    initrd /initrd.gz
}
如果加上前面的3行黑体字,保存ISO,然后硬盘里面的菜单\boot\grub2\grub.cfg也用terminal_output gfxterm,好像可以启动,我记不清了。
回复

使用道具 举报

135#
发表于 6 天前 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2024-4-29 09:37 编辑
wintoflash 发表于 2021-6-17 20:04
我也是醉了。你下载 grub-2.06.tar.gz (或者 tar.xz),里面有个 NEWS。

想看详细的,就看它的提交历 ...

想请教下,对于你魔改的grub2和官方GNU grub2,对于启动linux方面,具体有哪些革命性的改进,就是说原来GNU grub2做不到的,你做到了?我感觉linxu用loopback+内核支持挂载iso的话,感觉很多都可以启动。map启动linux的话,感觉不能算是革命性的改进。map对于WINPE和RAMOS支持可以算是革命性的改进。
过安全启动支持算不算是改进?我对安全启动没怎么研究。

有优点尽管说!请不要谦虚!











点评

对于Linux的启动,基本没有什么改动。 各Linux发行版基本上都是用的grub2启动,grub2肯定对Linux的支持是最完善的,这也没什么改进空间啊。  详情 回复 发表于 6 天前
回复

使用道具 举报

136#
发表于 6 天前 | 显示全部楼层
wintoflash 发表于 2024-4-29 16:25
对于Linux的启动,基本没有什么改动。
各Linux发行版基本上都是用的grub2启动,grub2肯定对Linux的支持 ...

哦,了解了。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-5 05:15

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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