无忧启动论坛

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

[原创] GRUB4DOS for UEFI

    [复制链接]
181#
 楼主| 发表于 2020-12-13 12:34:17 来自手机 | 显示全部楼层
既然是双分区,可否去除ntfs分区的bootx64.efi?

点评

我试过可以删除NTFS的bootx64.efi,但是没法用find的办法了吧,因为map --mem --top xxx.vhd之后,直接就启动了,控制权在g4e内部了。  详情 回复 发表于 2020-12-13 13:57
回复

使用道具 举报

182#
 楼主| 发表于 2020-12-13 13:16:15 来自手机 | 显示全部楼层
你在fat32建立文件fat.txt,搜索它设置根目录。
回复

使用道具 举报

183#
 楼主| 发表于 2020-12-13 14:29:26 来自手机 | 显示全部楼层
嗷,不能搜索查找了。可以 chainloadet (hd-1,n),其中n是fat32分区号。

点评

哦,明白了。一般地FAT32是第一个分区,那就是chainloader (hd-1,0) 了吧。  详情 回复 发表于 2020-12-13 15:25
回复

使用道具 举报

184#
 楼主| 发表于 2020-12-13 15:57:59 来自手机 | 显示全部楼层
不一定是第一分区。vol命令看一看,应当可以认定。

点评

map之后我用ls (hd2,0)/这样的命令看了,确实是第一个分区,当时调整分区的时候,我从NTFS分区的前年划分出了一个FAT32分区的。  详情 回复 发表于 2020-12-13 16:19
回复

使用道具 举报

185#
 楼主| 发表于 2020-12-14 12:14:32 来自手机 | 显示全部楼层
本帖最后由 2011yaya2007777 于 2020-12-14 12:32 编辑

外部命令我只是修改了头文件,修改了热键,可以作为参考。其他外部命令没有改动。

点评

只替换头文件,其他的什么都不改?  详情 回复 发表于 2020-12-14 15:56
回复

使用道具 举报

186#
 楼主| 发表于 2020-12-14 16:04:28 来自手机 | 显示全部楼层
需要改,只是我没有时间。
回复

使用道具 举报

187#
 楼主| 发表于 2020-12-15 13:14:54 来自手机 | 显示全部楼层
不错,又增加新功能了。
回复

使用道具 举报

188#
 楼主| 发表于 2020-12-15 22:37:05 来自手机 | 显示全部楼层
两个小时,太夸张了吧。我2Gb的内存,编译大概10秒。
回复

使用道具 举报

189#
 楼主| 发表于 2020-12-16 15:07:41 | 显示全部楼层
本帖最后由 2011yaya2007777 于 2020-12-16 15:15 编辑

[code]/*
* compile:
*
* gcc -Wl,--build-id=none -m64 -mno-sse -nostdlib -Wno-int-to-pointer-cast -fno-zero-initialized-in-bss -fno-function-cse -fno-jump-tables -Wl,-N -fPIE g4e_wb.c -o g4e_wb.o 2>&1|tee build.log
* generate executable:         objcopy -O binary g4e_wb.o g4e_wb
*
*/

#include "grub4dos.h"

//在此定义静态变量、结构。不能包含全局变量,否则编译可以通过,但是不能正确执行。
//不能在main前定义子程序,在main后可以定义子程序。

static void get_GRUB_IMGE (void);

/* 这是必需的,请参阅grubprog.h中的注释 */
#include "grubprog.h"
/* 请勿在此处插入任何其他asm行 */
//不能包含子程序,不能包含全局变量,否则编译可以通过,但是不能正确执行。

int main(char *arg,int key)
{
  get_GRUB_IMGE();
  if (!GRUB_IMGE)
    return 0;

  return printf ("g4e_wb_func,%s",arg);
}

//在内存0-0x9ffff, 搜索特定字符串"$INT13SFGRUB4DOS",获得GRUB_IMGE
static void get_GRUB_IMGE (void)
{
  int i, j;
for(i = 0x9F000; i >= 0; i -= 0x1000)
{
    for(j = 0; j < 0x1000 ; j += 16)
    {
      char *p = (char *)(unsigned long long)(int)(i+j);
      if (p[11]=='G' && p[12]=='R' && p[13]=='U' && p[14]=='B' && p[15]=='4' && p[16]=='D' && p[17]=='O' && p[18]=='S') //比较数据
      {
        GRUB_IMGE = *(unsigned long long *)(unsigned long long)(int)(i+j+32); //GRUB4DOS_for_UEFI文件地址
        return;;  //查到
      }
  }
}
  return;
}

菜单:
title g4e_wb
g4e_wb abcdef
pause




回复

使用道具 举报

190#
 楼主| 发表于 2020-12-16 15:14:09 | 显示全部楼层
记得以前上传了一个外部命令编译环境,附带修改后的热键代码,怎么找不到了。
再上传一次。

g4e_wb.rar

8.95 KB, 下载次数: 25, 下载积分: 无忧币 -2

回复

使用道具 举报

191#
 楼主| 发表于 2020-12-16 20:28:41 来自手机 | 显示全部楼层
wintoflash:我是使用gcc4.8编译的。我编译的时候也报错。不影响使用。
回复

使用道具 举报

192#
 楼主| 发表于 2020-12-16 20:37:30 来自手机 | 显示全部楼层
wuwuzz: g4d支持ntfs,但是启动fixwtg.vhd后,它内部没有ntfs驱动,而UEFI固件也没有提供。
回复

使用道具 举报

193#
 楼主| 发表于 2020-12-18 13:36:21 来自手机 | 显示全部楼层
grub2的标识是什么?
回复

使用道具 举报

194#
 楼主| 发表于 2020-12-19 12:51:01 来自手机 | 显示全部楼层
还没有
回复

使用道具 举报

195#
 楼主| 发表于 2020-12-20 16:06:45 | 显示全部楼层
本帖最后由 2011yaya2007777 于 2020-12-20 16:37 编辑

试一试这一个。
这一个与前一个,我在qemu虚拟机以及实机测试,都正常,所以也不知问题在哪里。
我猜测是编译问题。

能写外部命令了就可以移植ntboot。
ntboot 好像不是使用外部命令编写的,使用的是批处理。



g4e_wb.txt

556 Bytes, 下载次数: 5, 下载积分: 无忧币 -2

回复

使用道具 举报

196#
 楼主| 发表于 2020-12-22 20:02:19 来自手机 | 显示全部楼层
g4d好像支持16个以下的碎片。SVBus不支持碎片,PRIMO支持碎片吗?
回复

使用道具 举报

197#
 楼主| 发表于 2020-12-22 20:37:22 来自手机 | 显示全部楼层
本帖最后由 2011yaya2007777 于 2020-12-22 20:42 编辑

我是不明白svbus与primo的作用和运行机理。既然primo是加载到内存,那为什么不使用--mem,而直接map。是你在上一个帖子提出碎片的话题。碎片与primo有什么关系?
回复

使用道具 举报

198#
 楼主| 发表于 2020-12-23 09:40:18 | 显示全部楼层
自动菜单不起作用

我使用你的菜单测试,没有任何问题。
你是不是简简单单的电脑直接启动G4E?
回复

使用道具 举报

199#
 楼主| 发表于 2020-12-23 10:16:44 | 显示全部楼层
好的。一直在等待。喜欢g4d的轻量高效。

修改了 G4E 外部命令模板,再测试一下。我这里正常。要使用里边那个 BOOTX64.EFI,是配套的。
另外我想了解一下,以前测试,是不是启动了 GRUB2,然后由 GRUB2 启动的 G4E?

g4e_wb-2020-12-23.rar

145.31 KB, 下载次数: 45, 下载积分: 无忧币 -2

回复

使用道具 举报

200#
 楼主| 发表于 2020-12-23 10:54:50 | 显示全部楼层
一、svbus搭配g4e/grub2有两种模式

谢谢你,这么详尽的解答,受教了!

1、在直接map模式下,要求被仿真的镜像必须在硬盘上连续存放

G4D早已实现了有碎片的文件直接map。这个理解有误会。

svbus是否支持“碎片”,这个问题感觉问得不对

无论是直接map文件,还是map --mem文件到内存,都是由g4e/grub2这样的引导器所做的,这是对的。
svbus是个磁盘驱动,它获得了G4D映射插槽的信息。当它的上级windows访问磁盘时,它进行了拦截,利用G4D映射插槽的信息,转而调用SCSI指令直接访问磁盘,然后再传回上级。
在这点上,类似于G4D的map仿真。就和grub4dos-0.4.5c一样,只支持文件连续的仿真。它完全可以做到有碎片仿真。
我没有仔细研究,如果它自己又新建了一个仿真盘,而没有使用map --mem的内存盘,那是极大的内存浪费。如果是这样,那就更应当支持碎片仿真了。

我还有一个疑问。就是RAMOS是内存操作系统,那就是要把文件也好,镜像也好,加载到内存,那就应当使用map --mem ,为什么有时候还要单独使用 map?
回复

使用道具 举报

201#
 楼主| 发表于 2020-12-23 12:57:28 来自手机 | 显示全部楼层
wintoflash: 外部命令测试,是死机了,还是可以回到命令行?
回复

使用道具 举报

202#
 楼主| 发表于 2020-12-23 17:22:37 | 显示全部楼层
在UEFI环境下,g4e/grub2直接map模式仿真出一个虚拟磁盘→windows从这个虚拟磁盘启动→加载primo驱动→primo驱动把vdf直接加载到内存→完成后续windows启动流程。

map仿真出来的虚拟磁盘是vdf吗?然后从vdf启动?是像svbus一样,首先引导windows,由windows加载驱动,如svbus或者primo,然后由primo驱动把vdf直接加载到内存(在此处与svbus的工作内容不同)。
回复

使用道具 举报

203#
 楼主| 发表于 2020-12-23 17:28:10 来自手机 | 显示全部楼层
liuzhaoyzz: 钻研精神值得学习!我觉得这次对G4E的解读非常到位。
回复

使用道具 举报

204#
 楼主| 发表于 2020-12-23 21:57:18 来自手机 | 显示全部楼层
本帖最后由 2011yaya2007777 于 2020-12-23 21:58 编辑

如果差不多,那就可以进一步讨论了。vdf启动后,它读自己这个虚拟盘,是通过G4E的。如果vdf有碎片,此事不影响读虚拟盘。问题是如果vdf有碎片,不能成功启动windows。原因在于读虚拟盘的任务,由G4D交给了primo。而primo不支持有碎片的磁盘仿真。它有改进的余地。
回复

使用道具 举报

205#
 楼主| 发表于 2020-12-24 10:58:50 | 显示全部楼层
我看过前面论述primo的贴子,提到vdf有碎片,g4e就会抛出too many fragments这样的错误。
可是到底有没有碎片,没有确切的答案。
最好是遇到有碎片,并且提示too many fragments时,重启,进入命令行,执行 blocklist /xxx.vdf 看看,到底有没有碎片,或者有几个碎片。

在保证有碎片,且 g4e 不报错,即 g4e 完成他的加载使命,然后才能讨论有碎片时,primo 表现如何。
回复

使用道具 举报

206#
 楼主| 发表于 2020-12-25 10:26:51 | 显示全部楼层
再次测试G4E外部命令。

g4e_wb-2020-12-25.rar

143.31 KB, 下载次数: 44, 下载积分: 无忧币 -2

回复

使用道具 举报

207#
 楼主| 发表于 2020-12-25 10:29:33 | 显示全部楼层
本帖最后由 2011yaya2007777 于 2020-12-25 10:49 编辑
对于g4e,我发现如果优先查找NTFS里面的bootx64.efi会出错

你使用905楼的bootx64.efi测试一下,这次是优先从MBR活动分区查找。
回复

使用道具 举报

208#
 楼主| 发表于 2020-12-25 12:53:51 来自手机 | 显示全部楼层
执行debug 3,截图,看看是否从fat32分区加载的。
回复

使用道具 举报

209#
 楼主| 发表于 2020-12-25 13:45:00 来自手机 | 显示全部楼层
2011whp:不明白你这是要启动什么。
回复

使用道具 举报

210#
 楼主| 发表于 2020-12-25 15:18:00 | 显示全部楼层
本帖最后由 2011yaya2007777 于 2020-12-25 16:42 编辑

liuzhaoyzz :
抱歉,修改后的测试版本没有上传。上传的是打了官方补丁,又修改了外部命令的版本。
稍后我再上传一个吧。


回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-4-29 21:54

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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