无忧启动论坛

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

[原创] GRUB4DOS for UEFI

    [复制链接]
 楼主| 发表于 2020-10-29 15:12:24 | 显示全部楼层
\bootx64.efi
如何加载引导PXE启动菜单

常规的 menu.lst。
现在版本不支持内置菜单。
回复

使用道具 举报

 楼主| 发表于 2020-10-29 15:29:45 | 显示全部楼层
据我所知,__attribute__((ms_abi)) 只支持 GCC4.7及以上版本,是用汇编解决的吗?

我使用的是 GCC4.8 版本。我就是把你贴的代码复制到头文件。
没有这段头文件,其他函数不影响,就是影响 block_io_protocol_t blockio_template。他传入的参数是 32 位的,且参数不对位。
另外 yaya 准备什么时候上传代码?

这个还请 chenall 定夺,是新开一个分支,还是怎样。这些我都不会。
目前一套代码怎样编译为 32 位或 64 位,我也不擅长,比较懵懂。

点评

爱心会员 32# 发表于 2 分钟前 | 只看该作者 2011yaya2007777 发表于 2020-10-29 15:29 我使用的是 GCC4.8 版本。我就是把你贴的代码复制到头文件。 没有这段头文件,其他函数不影响,就是影响 ... 另外,  详情 回复 发表于 2020-10-29 15:40
另外,我觉得--unmap功能还是要加上的。如果map了winpe的ISO,微软的bootmgfw.efi启动光盘上的文件时,直接找的是第一个光盘。如果机器本来就有光盘(比如usb量产的光盘),那就出问题了。  详情 回复 发表于 2020-10-29 15:35
回复

使用道具 举报

发表于 2020-10-29 15:31:04 | 显示全部楼层
好像很了不起的样子,先下载,再学习研究
回复

使用道具 举报

发表于 2020-10-29 15:40:58 | 显示全部楼层
本帖最后由 wintoflash 于 2020-10-29 15:42 编辑

我觉得--unmap功能还是要加上的。如果map了winpe的ISO,微软的bootmgfw.efi启动光盘上的文件时,直接找的是第一个光盘。如果机器本来就有光盘(比如usb量产的光盘),那就出问题了。

对于交换磁盘的功能,我目前还没有想好怎么弄,但是似乎是有这个需求的。
另外是否支持启动linux?如果支持,是通过传统方式启动,还是通过efi handover protocol?
回复

使用道具 举报

发表于 2020-10-29 15:44:57 | 显示全部楼层
非常好!支持uefi了!
回复

使用道具 举报

 楼主| 发表于 2020-10-29 15:45:36 | 显示全部楼层
另外,我觉得--unmap功能还是要加上的。如果map了winpe的ISO,微软的bootmgfw.efi启动光盘上的文件时,直接找的是第一个光盘。如果机器本来就有光盘(比如usb量产的光盘),那就出问题了。

这个我再看一看怎么卸载。
map了winpe的ISO,干了什么,肯定是干了什么,要不就不映射了。也就是没有启动前,使用他做了某些事情,然后卸载,去启动量产的光盘?

点评

要在map之前,卸载量产的光驱  详情 回复 发表于 2020-10-29 15:46
回复

使用道具 举报

发表于 2020-10-29 15:46:33 | 显示全部楼层
2011yaya2007777 发表于 2020-10-29 15:45
这个我再看一看怎么卸载。
map了winpe的ISO,干了什么,肯定是干了什么,要不就不映射了。也就是没有启 ...

要在map之前,卸载量产的光驱
回复

使用道具 举报

发表于 2020-10-29 17:36:55 | 显示全部楼层
6666666666666666666666666666
回复

使用道具 举报

 楼主| 发表于 2020-10-29 17:41:07 来自手机 | 显示全部楼层
那这个量产的光驱不是由map映射的,原先的grub4dos也不能卸载呀。

点评

这个确实查不到相关资料,但是我这样写的,经实践确实可以。 https://github.com/a1ive/grub/blob/68e6f41bdd84e1ea7132ac1393bdb90ebfa4a28b/grub-core/map/efi/map.c#L72 ventoy的做法是交换磁盘,可能更合理一  详情 回复 发表于 2020-10-29 18:18
回复

使用道具 举报

发表于 2020-10-29 18:00:09 | 显示全部楼层
希望能用好用
回复

使用道具 举报

发表于 2020-10-29 18:21:36 | 显示全部楼层
wintoflash,能否把这个消息贴到 reboot.pro 或者别的外网去?

我今天一整天都访问不了 reboot.pro 了。最近没去逛过,不知道是啥情况,是被 DDOS 了?还是死掉了?或者是 Wall 的原因?不清楚。

点评

是reboot.pro论坛的服务器挂了,前段时间也炸过一次,用梯子都访问不了,等过几天就好了。  详情 回复 发表于 2020-10-29 20:01
我已经通知easy2boot的开发者了。 因为他没法下载无忧论坛上的东西,所以我传到了谷歌网盘。 希望chenall能快点上线,给yaya弄个新分支或者其他的什么方法,这样可以方便所有人。  详情 回复 发表于 2020-10-29 18:35
回复

使用道具 举报

 楼主| 发表于 2020-10-29 18:24:31 | 显示全部楼层
本帖最后由 2011yaya2007777 于 2020-10-29 18:32 编辑
ventoy的做法是交换磁盘,可能更合理一些。

我使用的比较少,理解交换磁盘是为了从 0x80 或者说是出 (hd0) 启动。但是在 UEFI 环境,没有这个限制,
所以我觉得好像没有必要。是否还有其他用途?
这个确实查不到相关资料,但是我这样写的,经实践确实可以。
这些代码很有参考价值,谢谢。

点评

我只遇到两个 【可能】需要交换磁盘的地方: (1) 机器本来就有光驱或者U盘带量产,需要启动 winpe。 这个目前有解决方法,所以可以不用交换。 (2) 用移动硬盘上的 windows 安装镜像 安装 windows,windows【有一  详情 回复 发表于 2020-10-29 18:42
回复

使用道具 举报

发表于 2020-10-29 18:27:29 来自手机 | 显示全部楼层
这个帖子顿时让无忧老潜水员们高潮了

点评

哈哈,newbi  发表于 2020-10-30 13:10
回复

使用道具 举报

发表于 2020-10-29 18:32:45 | 显示全部楼层
终于等到你!值得纪念的一天。谢谢yaya兄!
回复

使用道具 举报

发表于 2020-10-29 18:35:04 | 显示全部楼层
不点 发表于 2020-10-29 18:21
wintoflash,能否把这个消息贴到 reboot.pro 或者别的外网去?

我今天一整天都访问不了 reboot.pro 了。 ...

我已经通知easy2boot的开发者了。
因为他没法下载无忧论坛上的东西,所以我传到了谷歌网盘。
希望chenall能快点上线,给yaya弄个新分支或者其他的什么方法,这样可以方便所有人。

点评

你应该很熟悉 github 的使用方法。 我不懂,尤其是现在,连 svn 的用法都忘却了,更不用说,本来就不熟悉 git。 我不知道 yaya 对 git 的操作是否熟练。 以下是 @yaya 我个人认为,只要 chenall  详情 回复 发表于 2020-10-29 18:50
回复

使用道具 举报

发表于 2020-10-29 18:36:40 | 显示全部楼层
围观、纪念。。。
回复

使用道具 举报

发表于 2020-10-29 18:37:04 来自手机 | 显示全部楼层
支持新作品,用的人越多,完善的越快!
回复

使用道具 举报

发表于 2020-10-29 18:42:47 | 显示全部楼层
2011yaya2007777 发表于 2020-10-29 18:24
我使用的比较少,理解交换磁盘是为了从 0x80 或者说是出 (hd0) 启动。但是在 UEFI 环境,没有这个限制,
...

我只遇到两个 【可能】需要交换磁盘的地方:
(1) 机器本来就有光驱或者U盘带量产,需要启动 winpe。
这个目前有解决方法,所以可以不用交换。
(2) 用移动硬盘上的 windows 安装镜像 安装 windows,windows【有一定几率】会把引导文件错误地安装到移动硬盘。
这个我只是遇到了 Steve 的报告,但是他也不能稳定重现。

Ventoy 的做法是 hook BS->LocateHandle。
https://github.com/ventoy/Ventoy ... /VentoyDebug.c#L168
回复

使用道具 举报

发表于 2020-10-29 18:50:24 | 显示全部楼层
wintoflash 发表于 2020-10-29 18:35
我已经通知easy2boot的开发者了。
因为他没法下载无忧论坛上的东西,所以我传到了谷歌网盘。
希望chena ...

你应该很熟悉 github 的使用方法。

我不懂,尤其是现在,连 svn 的用法都忘却了,更不用说,本来就不熟悉 git。

我不知道 yaya 对 git 的操作是否熟练。


以下是


@yaya

我个人认为,只要 chenall 给你有权限,你就可以使用他给你的那些权限来做事。

你只要小心行事,别一不小心毁掉啥东西就行。

如果你想等 chenall 来商讨,也可以。但你可以把源代码暂时放到论坛上。

wintoflash 是 VIP 会员,有权下载附件。

当然,放到网盘上也可。不过,需要源码的人,不多。因此,没必要放在网盘上。
回复

使用道具 举报

发表于 2020-10-29 18:51:05 | 显示全部楼层
牛!支持您!!
回复

使用道具 举报

 楼主| 发表于 2020-10-29 18:53:34 | 显示全部楼层
我只遇到两个 【可能】需要交换磁盘的地方:

我的笔记本电脑有机械光驱,我从U盘以uefi模式启动,然后加载winpe10,可以正常启动。
不过增加 --unmap 也可以,只是麻烦一些,要从UEFI结构卸载,还要从map映射插槽卸载,还要从grub4dos磁盘结构(新增加的)卸载,还要从grub4dos分区结构(新增加的)卸载。

点评

光驱插个光盘试试。 我比较偷懒,unmap的时候没有从grub2磁盘结构里面卸载,因为我发现在grub2里还能正常访问,只是chainloader之后就不能访问了。  详情 回复 发表于 2020-10-29 19:03
回复

使用道具 举报

发表于 2020-10-29 19:01:26 | 显示全部楼层
NB!
是不是只能GRUB4DOS调用Bootmgr,不能bootmgr调用GRUB4DOS?
回复

使用道具 举报

发表于 2020-10-29 19:03:01 | 显示全部楼层
2011yaya2007777 发表于 2020-10-29 18:53
我的笔记本电脑有机械光驱,我从U盘以uefi模式启动,然后加载winpe10,可以正常启动。
不过增加 --unmap ...

光驱插个光盘试试。

我比较偷懒,unmap的时候没有从grub2磁盘结构里面卸载,因为我发现在grub2里还能正常访问,只是chainloader之后就不能访问了。
回复

使用道具 举报

发表于 2020-10-29 19:03:27 | 显示全部楼层
请问,菜单应该放在什么位置? 菜单默认文件名应该是什么?
回复

使用道具 举报

发表于 2020-10-29 19:06:40 | 显示全部楼层
大神厉害了辛苦
回复

使用道具 举报

 楼主| 发表于 2020-10-29 19:09:55 | 显示全部楼层
请问,菜单应该放在什么位置? 菜单默认文件名应该是什么?

/menu.lst
/grub/menu.lst
/boot/grub/menu.lst

点评

反馈个问题,yaya在57楼和81楼说的菜单搜索顺序似乎不对,优先级似乎是: /boot/grub/menu.lst /menu.lst /grub/menu.lst 因为我这几个目录都有menu.lst文件,在测试字体文件unifont.hex的时候发现,必  详情 回复 发表于 2020-11-4 09:21
多谢! 烦请您在休整一段时间后,再写一个教程。  详情 回复 发表于 2020-10-29 19:12
回复

使用道具 举报

发表于 2020-10-29 19:12:01 | 显示全部楼层
2011yaya2007777 发表于 2020-10-29 19:09
/menu.lst
/grub/menu.lst
/boot/grub/menu.lst

多谢! 烦请您在休整一段时间后,再写一个教程。
回复

使用道具 举报

发表于 2020-10-29 19:12:35 | 显示全部楼层
谢谢分享
回复

使用道具 举报

 楼主| 发表于 2020-10-29 19:13:33 | 显示全部楼层
我不知道 yaya 对 git 的操作是否熟练。

我不熟悉 git 。以前都是 chenall 告诉我一步一步怎么做,我不敢越雷池一步。哈哈

点评

先清理好工作区,记得先备份。然后创建分支。git branch efi git checkout efi 然后把你的改动加上去,最后上传你的分支 git apply ../xxx.patch ... ... git add . git commit -m "add efi support ...."  详情 回复 发表于 2020-10-29 19:23
回复

使用道具 举报

发表于 2020-10-29 19:23:29 | 显示全部楼层
2011yaya2007777 发表于 2020-10-29 19:13
我不熟悉 git 。以前都是 chenall 告诉我一步一步怎么做,我不敢越雷池一步。哈哈

先清理好工作区,记得先备份。然后创建分支。git branch efi
git checkout efi
然后把你的改动加上去,最后上传你的分支
git apply ../xxx.patch
...
...
git add .
git commit -m "add efi support ...."
git push -u origin efi
仅供参考,记得先备份。我也不确定你有没有上传分支的权限。


回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-3-28 20:43

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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