无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
楼主: 2011yaya2007777
打印 上一主题 下一主题

[原创] GRUB4DOS for UEFI

    [复制链接]
1141#
发表于 2021-1-22 16:50:28 | 只看该作者
2011yaya2007777 发表于 2021-1-22 16:27
我提交补丁以后等了一会,见没有编译。
我是想下载官网编译的版本进行测试,成功后再放出其他补丁。
我 ...

grub4dos-for_UEFI-2021-01-22.7z

这个我试了不可以运行外部命令,估计是由于头文件改变的原因。

有可能的话还得整一个自动测试的功能。^_^

有问题好提早发现。
回复

使用道具 举报

1142#
发表于 2021-1-22 16:52:10 | 只看该作者
本帖最后由 chenall 于 2021-1-22 16:56 编辑

这些天先把grub4dos.chenall.net自动更新的先弄一下,后续有空的话再想想如何实现自动测试的功能(目前的想法还是使用qemu来测试,得先收集一些用于测试的命令)
另外目前使用的自动编译功能是模块化的,后续想换成64位的编译环境也比较容易,只需要修改自动编译的脚本就行了。

目前的编译环境是使用qemu运行tinycorelinux,编译速度比较慢,后续如果确认64位环境编译没有问题的话我再弄成直接编译的。

回复

使用道具 举报

1143#
发表于 2021-1-22 16:57:24 | 只看该作者
2011yaya2007777 发表于 2021-1-22 16:27
我提交补丁以后等了一会,见没有编译。
我是想下载官网编译的版本进行测试,成功后再放出其他补丁。
我 ...

更新头文件之后没问题了。
你将来还会改外部命令的格式吗?如果不改了的话,我就把外部命令头文件传到 grubutils 源码仓库里面。
回复

使用道具 举报

1144#
 楼主| 发表于 2021-1-22 17:01:44 | 只看该作者
本帖最后由 2011yaya2007777 于 2021-1-22 17:05 编辑

wintoflash 可以发一个你编译的版本吗?

如果64位环境编译成功的话,外部命令的格式就不会更改了。
回复

使用道具 举报

1145#
发表于 2021-1-22 17:08:14 | 只看该作者
2011yaya2007777 发表于 2021-1-22 17:01
wintoflash 可以发一个你编译的版本吗?

如果64位环境编译成功的话,外部命令的格式就不会更改了。

g4eext-src.7z (18.57 KB, 下载次数: 12)
g4eext-2021-01-22.zip (2.79 KB, 下载次数: 11)
回复

使用道具 举报

1146#
 楼主| 发表于 2021-1-22 17:13:34 | 只看该作者
我是想要一个64位环境编译的 grub4dos for uefi,即 bootx64.efi
回复

使用道具 举报

1147#
发表于 2021-1-22 17:19:00 | 只看该作者
2011yaya2007777 发表于 2021-1-22 17:13
我是想要一个64位环境编译的 grub4dos for uefi,即 bootx64.efi

grub4dos-for_UEFI-2021-01-22.7z (241.25 KB, 下载次数: 14)
回复

使用道具 举报

1148#
 楼主| 发表于 2021-1-22 17:24:19 | 只看该作者
本帖最后由 2011yaya2007777 于 2021-1-22 17:36 编辑

我修改了两个外部命令。

点评

WENV 编译报错。 gcc -Wl,--build-id=none -m64 -mno-sse -nostdlib -fno-zero-initialized-in-bss -fno-function-cse -fno-jump-tables -Wl,-N -fPIE -Iinclude/ wenv.c -o wenv.o wenv.c: In function ‘main’:  详情 回复 发表于 2021-1-22 17:34
回复

使用道具 举报

1149#
 楼主| 发表于 2021-1-22 17:31:16 | 只看该作者
亲自测试,64 位 linux 环境编译的 grub4dos for uefi ,工作不正常的问题圆满解决!
回复

使用道具 举报

1150#
发表于 2021-1-22 17:34:24 | 只看该作者
2011yaya2007777 发表于 2021-1-22 17:24
我修改了两个外部命令。

WENV 编译报错。
gcc -Wl,--build-id=none -m64 -mno-sse -nostdlib -fno-zero-initialized-in-bss -fno-function-cse -fno-jump-tables -Wl,-N -fPIE -Iinclude/ wenv.c -o wenv.o
wenv.c: In function ‘main’:
wenv.c:173:37: error: ‘BASE_ADDR’ undeclared (first use in this function)
#define VAR ((char (*)[MAX_VAR_LEN])BASE_ADDR)
                                     ^
wenv.c:195:43: note: in definition of macro ‘strcmp_ex’
#define strcmp_ex(arg,string) grub_memcmp(arg,string,0)
                                           ^
wenv.c:304:21: note: in expansion of macro ‘VAR’
  if( 0 != strcmp_ex(VAR[_WENV_], "?_WENV") )// 检查默认变量
                     ^
wenv.c:173:37: note: each undeclared identifier is reported only once for each function it appears in
#define VAR ((char (*)[MAX_VAR_LEN])BASE_ADDR)
                                     ^
wenv.c:195:43: note: in definition of macro ‘strcmp_ex’
#define strcmp_ex(arg,string) grub_memcmp(arg,string,0)
                                           ^
wenv.c:304:21: note: in expansion of macro ‘VAR’
  if( 0 != strcmp_ex(VAR[_WENV_], "?_WENV") )// 检查默认变量
                     ^
wenv.c: In function ‘check_Brackets’:
wenv.c:175:39: error: ‘BASE_ADDR’ undeclared (first use in this function)
#define ENVI ((char (*)[MAX_ENV_LEN])(BASE_ADDR + MAX_VARS * MAX_VAR_LEN))
                                       ^
wenv.c:178:40: note: in expansion of macro ‘ENVI’
#define QUOTE_CHAR (*(unsigned long *)(ENVI[_WENV_]+0x30))
                                        ^
wenv.c:321:18: note: in expansion of macro ‘QUOTE_CHAR’
   else if (*p == QUOTE_CHAR)
                  ^
wenv.c: In function ‘skip_next’:
wenv.c:175:39: error: ‘BASE_ADDR’ undeclared (first use in this function)
#define ENVI ((char (*)[MAX_ENV_LEN])(BASE_ADDR + MAX_VARS * MAX_VAR_LEN))
                                       ^
wenv.c:178:40: note: in expansion of macro ‘ENVI’
#define QUOTE_CHAR (*(unsigned long *)(ENVI[_WENV_]+0x30))
                                        ^
wenv.c:359:15: note: in expansion of macro ‘QUOTE_CHAR’
   if (*arg == QUOTE_CHAR)
               ^
wenv.c: In function ‘call_func’:
wenv.c:175:39: error: ‘BASE_ADDR’ undeclared (first use in this function)
#define ENVI ((char (*)[MAX_ENV_LEN])(BASE_ADDR + MAX_VARS * MAX_VAR_LEN))
                                       ^
wenv.c:623:10: note: in expansion of macro ‘ENVI’
  sprintf(ENVI[_WENV_], "0x%X", ret);
          ^
wenv.c: In function ‘reset_func’:
wenv.c:173:37: error: ‘BASE_ADDR’ undeclared (first use in this function)
#define VAR ((char (*)[MAX_VAR_LEN])BASE_ADDR)
                                     ^
wenv.c:650:33: note: in expansion of macro ‘VAR’
   for(j=0; j < MAX_USER_VARS && VAR[j][0] != '\0'; j++)
                                 ^
wenv.c: In function ‘check_func’:
wenv.c:175:39: error: ‘BASE_ADDR’ undeclared (first use in this function)
#define ENVI ((char (*)[MAX_ENV_LEN])(BASE_ADDR + MAX_VARS * MAX_VAR_LEN))
                                       ^
wenv.c:178:40: note: in expansion of macro ‘ENVI’
#define QUOTE_CHAR (*(unsigned long *)(ENVI[_WENV_]+0x30))
                                        ^
wenv.c:682:14: note: in expansion of macro ‘QUOTE_CHAR’
   if (*p2 == QUOTE_CHAR)
              ^
wenv.c: In function ‘trim_p’:
wenv.c:175:39: error: ‘BASE_ADDR’ undeclared (first use in this function)
#define ENVI ((char (*)[MAX_ENV_LEN])(BASE_ADDR + MAX_VARS * MAX_VAR_LEN))
                                       ^
wenv.c:178:40: note: in expansion of macro ‘ENVI’
#define QUOTE_CHAR (*(unsigned long *)(ENVI[_WENV_]+0x30))
                                        ^
wenv.c:837:12: note: in expansion of macro ‘QUOTE_CHAR’
  if (*p != QUOTE_CHAR || **p_str != QUOTE_CHAR)
            ^
wenv.c: In function ‘replace_str’:
wenv.c:175:39: error: ‘BASE_ADDR’ undeclared (first use in this function)
#define ENVI ((char (*)[MAX_ENV_LEN])(BASE_ADDR + MAX_VARS * MAX_VAR_LEN))
                                       ^
wenv.c:178:40: note: in expansion of macro ‘ENVI’
#define QUOTE_CHAR (*(unsigned long *)(ENVI[_WENV_]+0x30))
                                        ^
wenv.c:1379:45: note: in expansion of macro ‘QUOTE_CHAR’
  if ((flags & REPLACE_TRIM_QUOTE) && *in == QUOTE_CHAR)
                                             ^
In file included from wenv.c:161:0:
wenv.c: In function ‘show_config’:
wenv.c:175:39: error: ‘BASE_ADDR’ undeclared (first use in this function)
#define ENVI ((char (*)[MAX_ENV_LEN])(BASE_ADDR + MAX_VARS * MAX_VAR_LEN))
                                       ^
include/grub4dos.h:234:35: note: in definition of macro ‘printf’
#define printf(...) sprintf(NULL, __VA_ARGS__)
                                   ^
wenv.c:178:40: note: in expansion of macro ‘ENVI’
#define QUOTE_CHAR (*(unsigned long *)(ENVI[_WENV_]+0x30))
                                        ^
wenv.c:2041:30: note: in expansion of macro ‘QUOTE_CHAR’
   printf("QUOTE_CHAR:\t%c\n",QUOTE_CHAR);
                              ^
wenv.c: In function ‘config_func’:
wenv.c:175:39: error: ‘BASE_ADDR’ undeclared (first use in this function)
#define ENVI ((char (*)[MAX_ENV_LEN])(BASE_ADDR + MAX_VARS * MAX_VAR_LEN))
                                       ^
wenv.c:178:40: note: in expansion of macro ‘ENVI’
#define QUOTE_CHAR (*(unsigned long *)(ENVI[_WENV_]+0x30))
                                        ^
wenv.c:2054:4: note: in expansion of macro ‘QUOTE_CHAR’
    QUOTE_CHAR = *arg;
    ^
wenv.c: In function ‘exec_func’:
wenv.c:175:39: error: ‘BASE_ADDR’ undeclared (first use in this function)
#define ENVI ((char (*)[MAX_ENV_LEN])(BASE_ADDR + MAX_VARS * MAX_VAR_LEN))
                                       ^
wenv.c:2161:10: note: in expansion of macro ‘ENVI’
  sprintf(ENVI[_WENV_], "0x%X", ret);
          ^
Makefile:21: recipe for target 'wenv.o' failed
make: *** [wenv.o] Error 1

回复

使用道具 举报

1151#
 楼主| 发表于 2021-1-22 18:29:36 | 只看该作者
不好意思,搞乱了,重新上传。

g4dext.rar

30.24 KB, 下载次数: 18, 下载积分: 无忧币 -2

点评

wenv 测试 ok。 fat 测试死机。 [attachimg]473626[/attachimg] 我已经把wenv和我之前写的几个外部命令的源码传到 https://github.com/chenall/grubutils 了。 执行以下命令即可编译: 测试 gcc4.8, gc  详情 回复 发表于 2021-1-22 19:03
回复

使用道具 举报

1152#
发表于 2021-1-22 19:03:56 | 只看该作者
2011yaya2007777 发表于 2021-1-22 18:29
不好意思,搞乱了,重新上传。

wenv 测试 ok。
fat 测试死机。
  1. fat dir /
复制代码



我已经把wenv和我之前写的几个外部命令的源码传到 https://github.com/chenall/grubutils 了。
执行以下命令即可编译:
  1. cd g4eext
  2. make
复制代码


测试 gcc4.8, gcc-5, gcc-8 均可正常编译,且正常运行。
回复

使用道具 举报

1153#
发表于 2021-1-22 19:08:55 来自手机 | 只看该作者
怎么使用
回复

使用道具 举报

1154#
 楼主| 发表于 2021-1-22 19:50:00 来自手机 | 只看该作者
我明天看看fat是怎么回事。
回复

使用道具 举报

1155#
发表于 2021-1-23 06:59:40 | 只看该作者
本帖最后由 2011whp 于 2021-1-29 18:44 编辑

证明结果:
      1.    差分 vhd   不支持 固定大小的 主vhd  (  gd300.vhd试验了,不过也不需要支持,固定的vhd 用原来的map格式即可)
     2.    子VHD 类似 光盘刻录 是增量的(过程中,挂载子vhd 重新格式化盘,重新拷贝 svbusventoyPE,  子vhd大小翻倍了)
     3.     加载速度  确实快  (5GB 不到5秒)
     4.     结论:动态差分vhd装 SVbus系统,应该是绝配 (原来 固定大小的  加载预留无用扇区,慢)
                     能不能完成安装,待试。(估计用 bootmgfw能引导  主vhd完成安装,然后,再加个 子vhd)
                     即使能行,估计 性能 也不如 P驱。只是加快了 一些 启动速度  
                     (保留此功能,做工具盘什么的 可以考虑)

说明:5gb.vhd 是ventoy主盘    PE.iso是 200MB




回复

使用道具 举报

1156#
 楼主| 发表于 2021-1-23 09:46:04 | 只看该作者
外部命令 fat 比较难搞定。我这里测试 fat dir / 不是死机,而是显示帮助。
使用 fat 内部给出的
  1. gcc -Wl,--build-id=none -m64 -mno-sse -nostdlib -fno-zero-initialized-in-bss -fno-function-cse -fno-jump-tables -Wl,-N -fPIE -Wl,-Ttext -Wl,0 ./g4dext/fat/fat.c -o fat.o 2>&1|tee build.log
  2. sed -e '$s/\x00*$//' fat.tmp > fat
复制代码

进行编译,失败。

使用 sh ./build 编译,也失败。

我感觉 fat 自带目录,还有子目录,那么多文件,现在的编译方法,没有触及,肯定是编译方法不对。

点评

fat外部命令用的是老版本的 FatFs。 新版本的还支持 exFAT。 我以前把它移植到了 GRUB2:http://bbs.wuyou.net/forum.php?mod=viewthread&tid=418985 https://github.com/a1ive/grub/tree/master/grub-core/lib/f  详情 回复 发表于 2021-1-23 10:28
回复

使用道具 举报

1157#
发表于 2021-1-23 10:28:09 | 只看该作者
2011yaya2007777 发表于 2021-1-23 09:46
外部命令 fat 比较难搞定。我这里测试 fat dir / 不是死机,而是显示帮助。
使用 fat 内部给出的

fat外部命令用的是老版本的 FatFs。
新版本的还支持 exFAT。
我以前把它移植到了 GRUB2:http://bbs.wuyou.net/forum.php?mod=viewthread&tid=418985
https://github.com/a1ive/grub/tree/master/grub-core/lib/fatfs


回复

使用道具 举报

1158#
发表于 2021-1-23 10:30:44 | 只看该作者
好东西。谢谢分享
回复

使用道具 举报

1159#
发表于 2021-1-23 19:04:40 | 只看该作者
本帖最后由 2011whp 于 2021-1-24 13:26 编辑
2011yaya2007777 发表于 2021-1-20 18:49
支持差分VHD,请测试。
map --mem --parent-vhd-name="父VHD文件名称(带路径)“ 子VHD文件名称(带路径 ...

发现在  exit_g4d
     退回 开机Fx 菜单了, 希望保住 这个功能 (两台机有这 现象),成为机内引导 首选

效果小视频:g4e-Fx互切换 Video_2021-01-24_070126.rar (1.18 MB, 下载次数: 14)

?? 把g4e 调成 开机 直接启动项  时 exit_g4d  在 Fx菜单界面 停不下来。
回复

使用道具 举报

1160#
发表于 2021-1-24 13:21:45 | 只看该作者
现在 是不是  github 定型了, github action 64位

wiki  http://grub4dos.chenall.net/  也正常了

回复

使用道具 举报

1161#
发表于 2021-1-24 17:28:45 来自手机 | 只看该作者
目前的自动编译环境还是32位的,明天有空的话我准备弄成64位的,编译速度会快很多。
回复

使用道具 举报

1162#
发表于 2021-1-24 19:01:06 | 只看该作者
2021.01.22 版本,执行如下语句后,
graphicsmode -1 640
splashimage /EFI/Grub/Menu.jpg
font       /EFI/Grub/Unicode.gz

再执行 graphicsmode -1 会死机。如 无 splashimage /EFI/Grub/Menu.jpg  则执行顺利。

注:Menu.jpg 是 640x480x24 的图片。
回复

使用道具 举报

1163#
 楼主| 发表于 2021-1-24 19:13:15 | 只看该作者
为什么要运行2次
graphicsmode?

点评

第一次是菜单界面显示时用的。 第二次是启动 ACRONIS 时,用 graphicsmode -1 获得最大分辨率。然后,使用 kernel+initrd 语句,分别 kernel 它的 kernel , initrd 它的2个 initrd 文件,可使 acronis 的运行界面  详情 回复 发表于 2021-1-24 19:21
回复

使用道具 举报

1164#
发表于 2021-1-24 19:21:00 | 只看该作者
2011yaya2007777 发表于 2021-1-24 19:13
为什么要运行2次
graphicsmode?

第一次是菜单界面显示时用的。

第二次是启动 ACRONIS 时,用 graphicsmode -1 获得最大分辨率。然后,使用 kernel+initrd 语句,分别 kernel 它的 kernel , initrd 它的2个 initrd 文件,可使 acronis 的运行界面分辨率最高。
回复

使用道具 举报

1165#
 楼主| 发表于 2021-1-25 17:53:41 | 只看该作者
支持启动多级差分VHD。不需要指定父文件名。

BOOTX64.rar

136.47 KB, 下载次数: 28, 下载积分: 无忧币 -2

回复

使用道具 举报

1166#
发表于 2021-1-25 19:26:56 | 只看该作者


@2011yaya2007777

原来的命令 参数  parent 不能用了
回复

使用道具 举报

1167#
 楼主| 发表于 2021-1-25 19:44:21 来自手机 | 只看该作者
本帖最后由 2011yaya2007777 于 2021-1-25 20:02 编辑

父vhd是固定的,还是动态的?子vhd是使用什么软件修改的?有可能覆盖或破坏了父vhd的内容。

点评

动态的, 上次试 2021-1-20那个用的 xaio.vhd 2M xiao.z.vhd 4M 这两个用, 2021-1-20版 是可以的  详情 回复 发表于 2021-1-25 19:59
回复

使用道具 举报

1168#
发表于 2021-1-25 19:59:28 | 只看该作者
2011yaya2007777 发表于 2021-1-25 19:44
父vhd是固定的,还是动态的?

动态的,  上次试 2021-1-20那个用的

xaio.vhd   2M
xiao.z.vhd  4M
这两个用, 2021-1-20版 是可以的
回复

使用道具 举报

1169#
 楼主| 发表于 2021-1-25 20:04:16 来自手机 | 只看该作者
打包给我发过来。

点评

又试了下固定的 : 这个是实际 全部加载 读盘慢 然后,chainloader (hd-1) 死机了(另说,这个 死机 是哪 抛出的,最好能 响应 三键 热启动,要不得按电源键 才能关机) 打包差分 xiao.vhd  详情 回复 发表于 2021-1-25 20:15
回复

使用道具 举报

1170#
发表于 2021-1-25 20:15:25 | 只看该作者
本帖最后由 2011whp 于 2021-1-26 08:43 编辑

又试了下固定的 :  这个是实际 全部加载  读盘慢
然后,chainloader  (hd-1)  死机了(另说,这个 死机 是哪 抛出的,最好能 响应 三键 热启动,要不得按电源键 才能关机)

打包差分 xiao.vhd    xiao.zip (243.58 KB, 下载次数: 19)

是bootice建的, 回退至 2020-1-20版 ,能用的,里边是个refind



回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-13 02:09

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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