无忧启动论坛

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

[讨论] 使用高版本 GCC 编译 GRUB4DOS

    [复制链接]
发表于 2023-3-6 18:23:24 | 显示全部楼层
看看 wintoflash 大神分享的帖子,学习一下软件小知识
回复

使用道具 举报

发表于 2023-3-31 03:35:57 | 显示全部楼层
感谢分享
回复

使用道具 举报

发表于 2023-3-31 13:54:19 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2023-3-31 14:08 编辑

支持wintoflash工作!虚拟机测试启动PE如下:
grub4dos-0.4.6a-2023-02-23-gcc-7.5,√
grub4dos-0.4.6a-2023-02-23-gcc-8.4,√
grub4dos-0.4.6a-2023-02-23-gcc-9.5,√
grub4dos-0.4.6a-2023-02-23-gcc-10.4,√
grub4dos-0.4.6a-2023-02-23-gcc-11.3,×无法启动PE。

之前grub4dos许多年都是在ubuntu14.04环境下gcc4.8这种上古编译环境下编译的,现在是不是可以与时俱进用新的ubuntu环境下编译了,这样的话g4d/g4e/grub2都可以在同一个ubuntu环境下编译了。太棒了!厉害!

看了下ubuntu20.10 64位版本,gcc -v gcc版本:10.2的。


title WINPE (WePE64_V2.2.iso)
calc *0x8278 > nul ;; set g4dver=%@retval%
if %@UEFI%==64  && echo g4e%g4dver% ! echo g4d%g4dver%
find --ignore-floppies --ignore-cd --set-root /boot/imgs/WePE64_V2.2.iso
map --mem --top /boot/imgs/WePE64_V2.2.iso (0xff)
map --e820cycles=-1
map --hook
chainloader (0xff)
#pause
linux-2023-03-31-13-53-35.png

点评

https://github.com/chenall/grub4dos/pull/395 你打上这里面的补丁之后,是可以直接在 Ubuntu 22.04 上编译的。 不过 G4E 的要稍微改下,而且编译出来的有点问题。  详情 回复 发表于 2023-4-1 09:31
回复

使用道具 举报

 楼主| 发表于 2023-4-1 09:31:57 | 显示全部楼层
liuzhaoyzz 发表于 2023-3-31 13:54
支持wintoflash工作!虚拟机测试启动PE如下:
grub4dos-0.4.6a-2023-02-23-gcc-7.5,√
grub4dos-0.4.6a ...
现在是不是可以与时俱进用新的ubuntu环境下编译了

https://github.com/chenall/grub4dos/pull/395
你打上这里面的补丁之后,是可以直接在 Ubuntu 22.04 上编译的。
不过 G4E 的要稍微改下,而且编译出来的有点问题。
回复

使用道具 举报

发表于 2023-5-20 11:17:45 | 显示全部楼层
在 ubuntu-20.4、gcc-7.5 环境下编译的  GRUB4DOS for UEFI。
请测试。

BOOTX64_gcc7.5.rar

144.16 KB, 下载次数: 23, 下载积分: 无忧币 -2

点评

这个版本根之前2023-05-07版本测试结果相同。绝大多数linux发行版,PE都可以启动。仍然有以下两个发现不能启动,在github.com国外网友反馈的一样。 title /linux1/AcronisTrueImage/AcronisTrueImage2021_39287.iso  详情 回复 发表于 2023-5-20 14:23
测试反馈: 为便于在ventoy合盘中使用,将grub4打包成ISO镜像格式由ventoy引导启动,主要使用RUN模块引导 RUN配置如图: [attachimg]526652[/attachimg] 1.0520版启动正常,在使用RUN引导WIM镜像PE  详情 回复 发表于 2023-5-20 13:50
回复

使用道具 举报

发表于 2023-5-20 13:05:59 | 显示全部楼层
在 ubuntu-20.4、gcc-7.5 环境下编译  GRUB4DOS  ,没有通过。
提示:
checking whether objcopy works for absolute addresses... no
configure: error: GRUB requires a working absolute objcopy; upgrade your binutils

似乎是 binutils 版本低。
xxx-virtual-machine:~/grub4dos$ sudo apt-get install binutils
[sudo] fjy 的密码:
正在读取软件包列表... 完成
正在分析软件包的依赖关系树      
正在读取状态信息... 完成      
binutils 已经是最新版 (2.34-6ubuntu1.4)。
binutils 已设置为手动安装。
升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 1 个软件包未被升级。


再执行
xxx-virtual-machine:~/grub4dos$ sh ./build make 2>&1|tee build.log
仍然是:
configure: error: GRUB requires a working absolute objcopy; upgrade your binutils

奇怪,你们都能编译通过。
回复

使用道具 举报

 楼主| 发表于 2023-5-20 13:10:13 | 显示全部楼层
2011yaya2007777 发表于 2023-5-20 13:05
在 ubuntu-20.4、gcc-7.5 环境下编译  GRUB4DOS  ,没有通过。
提示:
checking whether objcopy works fo ...

  1. diff --git acinclude.m4 acinclude.m4
  2. index d508ad8..be7edfa 100644
  3. --- acinclude.m4
  4. +++ acinclude.m4
  5. @@ -61,7 +61,7 @@ for link_addr in 2000 8000 7C00; do
  6.    else
  7.      AC_MSG_ERROR([${CC-cc} cannot link at address $link_addr])
  8.    fi
  9. -  if AC_TRY_COMMAND([${OBJCOPY-objcopy} -O binary conftest.exec conftest]); then :
  10. +  if AC_TRY_COMMAND([${OBJCOPY-objcopy} --only-section=.text -O binary conftest.exec conftest]); then :
  11.    else
  12.      AC_MSG_ERROR([${OBJCOPY-objcopy} cannot create binary files])
  13.    fi
复制代码
回复

使用道具 举报

发表于 2023-5-20 13:50:56 | 显示全部楼层
2011yaya2007777 发表于 2023-5-20 11:17
在 ubuntu-20.4、gcc-7.5 环境下编译的  GRUB4DOS for UEFI。
请测试。

测试反馈:
  为便于在ventoy合盘中使用,将grub4打包成ISO镜像格式由ventoy引导启动,主要使用RUN模块引导

  RUN配置如图:
   1.png

  1.0520版启动正常,在使用RUN引导WIM镜像PE时报错000000e
    2.png

  2.0507测试版报错如上图

  3.0329版无法正常启动到菜单界面,桌面左上角显示一条白线卡死........
   3.png

  4.0319版启动引导均正常

回复

使用道具 举报

发表于 2023-5-20 14:23:18 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2023-5-21 04:56 编辑
2011yaya2007777 发表于 2023-5-20 11:17
在 ubuntu-20.4、gcc-7.5 环境下编译的  GRUB4DOS for UEFI。
请测试。

这个版本跟之前2023-05-07版本测试结果相同。绝大多数linux发行版,PE都可以启动。证明ubuntu20.4环境下编译很成功啊!
仍然有以下两个发现不能启动,在github.com国外网友反馈的一样。https://download.acronis.com/AcronisTrueImage2021.iso
title /linux1/AcronisTrueImage/AcronisTrueImage2021_39287.iso
debug 3
find --ignore-floppies --ignore-cd --set-root /linux1/AcronisTrueImage/AcronisTrueImage2021_39287.iso
map --mem --top /linux1/AcronisTrueImage/AcronisTrueImage2021_39287.iso (0xff)
#map --hook
#map --e820cycles=-1
chainloader (0xff)
pause

Ubuntu64-2023-05-20-14-13-56.png



Debian 所有版本下载地址
http://cdimage.debian.org/cdimage/archive/

Debian 7 iso 系统下载地址
http://cdimage.debian.org/cdimag ... 1.0-amd64-DVD-1.iso

这个debian7,wintoflash说是EFI支持不全,可是grub2UEFI可以启动,Failed to load virtual disk image.80000000000003,好像不单单是UEFI问题啊?请yaya确认下。
title /linux1/debian/debian-7.11.0-amd64-DVD-1.iso
debug 3
find --ignore-floppies --ignore-cd --set-root /linux1/debian/debian-7.11.0-amd64-DVD-1.iso
map /linux1/debian/debian-7.11.0-amd64-DVD-1.iso (hd32)
map --hook
kernel (hd32)/install.amd/gtk/vmlinuz boot=install.amd findiso=/linux1/debian/debian-7.11.0-amd64-DVD-1.iso components locales=zh_CN.UTF-8 locale=zh_CN.UTF-8 timezone=Asia/Shanghai localtime=Asia/Shanghai
initrd (hd32)/install.amd/gtk/initrd.gz

Ubuntu64-2023-05-20-14-11-54.png


以上两个linux衍生版,用grub2_UEFI启动都没有问题。



Ubuntu64-2023-05-20-14-22-46.png

点评

Debian 7 是 10 年前的老古董了。那个时候 Linux 内核对 UEFI 的支持很差。 说明不了任何问题。linux 内核就算本身不支持 UEFI,也能被 GRUB2 启动。它根本就不鸟 UEFI 这一套。  详情 回复 发表于 2023-5-20 17:17
回复

使用道具 举报

发表于 2023-5-20 14:28:52 来自手机 | 显示全部楼层
@wintoflash  老外三个文件的补丁我已经打上了。
回复

使用道具 举报

发表于 2023-5-20 14:44:27 来自手机 | 显示全部楼层
@liuzhaoyzz  AcronisTrueImage2021_39287.iso看截图似乎没有问题,不知怎么boot出了问题。  debian-7.11.0-amd64-DVD-1.iso 内核版本20a,太低。以前版本低于20b的,打印错误信息后就退出了。现在改为使用loader2协议启动,估计启动不了。你说的GRUB2可以启动,W超级班主说是使用32位什么启动的,过于复杂,不想引入G4D。

点评

你们的那段讨论,我没看懂。现在你发的这个版本,全部是loadfile2?还有没有handover协议?我看github上面讨论还有个参数--handover和--loadfile什么的参数?现在还有没有呢? 那个破github.com,很难登录上去,F  详情 回复 发表于 2023-5-20 17:29
回复

使用道具 举报

发表于 2023-5-20 14:57:54 来自手机 | 显示全部楼层
@wintoflash  使用gcc9.5编译G4E,有地址对齐的问题,比如结构里面的变量'xxx'使用'&xxx'作为地址引用。是2?4?8?对齐,还没有测试。地方太多,挺麻烦的。也不知道不理会他如何。

点评

记得结构是按里面最大的成员类型大小来对齐的。 你可以用 __attribute__((packed, aligned(X))) 来指定按多少字节对齐,比如 就是按4字节对齐。 就是按实际大小,紧凑排列。 如果结构体用了 __attribute__ (  详情 回复 发表于 2023-5-20 17:12
回复

使用道具 举报

 楼主| 发表于 2023-5-20 17:12:38 | 显示全部楼层
2011yaya2007777 发表于 2023-5-20 14:57
@wintoflash  使用gcc9.5编译G4E,有地址对齐的问题,比如结构里面的变量'xxx'使用'&xxx'作为地址引用。是2 ...

记得结构是按里面最大的成员类型大小来对齐的。
你可以用 __attribute__((packed, aligned(X))) 来指定按多少字节对齐,比如
  1. struct {
  2. ...
  3. }__attribute__((packed, aligned(4)))
复制代码

就是按4字节对齐。
  1. struct {
  2. ...
  3. } __attribute__ ((packed))
复制代码

就是按实际大小,紧凑排列。
如果结构体用了 __attribute__ ((packed 这种属性,在高版本 GCC 上取结构体成员的地址就会报警,比如
  1. struct aaa {
  2.   int a;
  3. } __attribute__ ((packed));

  4. int tmp = 2;
  5. struct aaa test;
  6. test.a = 1; // OK
  7. memcpy(&test.a, &tmp, sizeof(int)); // GCC 报警 taking address of packed member XXX may result in an unaligned pointer value
复制代码
回复

使用道具 举报

 楼主| 发表于 2023-5-20 17:17:11 | 显示全部楼层
本帖最后由 wintoflash 于 2023-5-20 17:18 编辑
liuzhaoyzz 发表于 2023-5-20 14:23
这个版本根之前2023-05-07版本测试结果相同。绝大多数linux发行版,PE都可以启动。证明ubuntu20.4环境下 ...
这个debian7,wintoflash说是EFI支持不全,可是grub2UEFI可以启动,Failed to load virtual disk image.80000000000003,好像不单单是UEFI问题啊?请yaya确认下。

Debian 7 是 10 年前的老古董了。那个时候 Linux 内核对 UEFI 的支持很差。
可是grub2UEFI可以启动

说明不了任何问题。linux 内核就算本身不支持 UEFI,也能被 GRUB2 启动。它根本就不鸟 UEFI 这一套。这一点我说过很多次了。

点评

我也发现是这样子哦。 你说了很多次?我真心没注意到。  详情 回复 发表于 2023-5-20 17:39
回复

使用道具 举报

发表于 2023-5-20 17:29:25 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2023-5-20 17:33 编辑
2011yaya2007777 发表于 2023-5-20 14:44
@liuzhaoyzz  AcronisTrueImage2021_39287.iso看截图似乎没有问题,不知怎么boot出了问题。  debian-7.11.0 ...

你们的那段讨论,我没看懂。现在你发的这个版本,全部是loadfile2?还有没有handover协议?我看github上面讨论还有个参数--handover和--loadfile2什么的参数?现在还有没有呢?我找不到那个帖子了。那个破github.com,很难登录上去,FQ也麻烦。

wintoflash说的32位的boot protocol协议,实现起来太麻烦。g4e还是不用考虑了,性价比不高,就算了,这个取舍是对的,支持。搞好handover/loadfile2,支持比较近的发行版,就行了。






回复

使用道具 举报

发表于 2023-5-20 17:39:20 | 显示全部楼层
wintoflash 发表于 2023-5-20 17:17
Debian 7 是 10 年前的老古董了。那个时候 Linux 内核对 UEFI 的支持很差。

说明不了任何问题。linu ...
linux 内核就算本身不支持 UEFI,也能被 GRUB2 启动。它根本就不鸟 UEFI 这一套。这一点我说过很多次了。


我也发现是这样子哦。

你说了很多次?我真心没注意到。
回复

使用道具 举报

发表于 2023-5-20 17:55:54 | 显示全部楼层
你们的那段讨论,我没看懂。现在你发的这个版本,全部是loadfile2?还有没有handover协议?我看github上面讨论还有个参数--handover和--loadfile2什么的参数?现在还有没有呢?我找不到那个帖子了。那个破github.com,很难登录上去,FQ也麻烦。

现在的逻辑是:支持handover协议,就按handover协议,否则按loadfile2。
增加两个参数是强制按指定的协议。
回复

使用道具 举报

发表于 2023-5-20 18:01:14 | 显示全部楼层
怪事真多。现在在efi环境使用gcc9.4,或者在bios环境使用gcc7.5/gcc9.4,都是提示:
configure: error: GRUB requires a working absolute objcopy; upgrade your binutils
不知道该如何了......
回复

使用道具 举报

发表于 2023-5-20 19:12:08 | 显示全部楼层
使用 gcc9.4 编译 bios 及 efi 已经成功。
但是仍然有问题待处理。

点评

yaya大辛苦啦!  发表于 2023-5-20 19:14
回复

使用道具 举报

 楼主| 发表于 2023-5-20 19:15:21 | 显示全部楼层
bios那边要不要直接合并埃及老哥的补丁?
回复

使用道具 举报

发表于 2023-5-20 19:44:54 来自手机 | 显示全部楼层
可以合并吧。这些补丁是不是要分别打在bios及efi?
回复

使用道具 举报

发表于 2023-5-20 22:51:12 | 显示全部楼层
先测试下谢谢
回复

使用道具 举报

发表于 2023-5-25 15:36:32 | 显示全部楼层
在 ubuntu-22.04、gcc-11.3 环境下编译的  GRUB4DOS。
请测试。

grldr.rar

162.34 KB, 下载次数: 21, 下载积分: 无忧币 -2

点评

BOOTX64_gcc7.5-2023-05-20版本,无法启动pentoo pentoo,用idm或者motrix可以全速下载 https://www.pentoo.ch/isos/ #grub4dos_BIOS可以启动,grub4dos_UEFI无法启动 title /linux2/pentoo/pentoo-amd64-hard  详情 回复 发表于 2023-5-27 20:16
我测试了手头的PE和linux,没有发现问题。 挺好的。  详情 回复 发表于 2023-5-25 19:23
回复

使用道具 举报

发表于 2023-5-25 16:35:51 | 显示全部楼层
W超级版主:
现在遇到一个问题,请帮忙。
以前在 windows7_32 环境,使用 chenall 的 grub4dos_dev 编译。
使用 git clone git@github.com:chenall/grub4dos.git 命令下载源码。编译后可以推送。
现在使用 ubuntu22.04 环境编译,当使用 git clone git@github.com:chenall/grub4dos.git 命令下载源码时,提示
正克隆到 'grub4dos'...
git@github.com: Permission denied (publickey).
fatal: 无法读取远程仓库。
请确认您有正确的访问权限并且仓库存在。

不能下载源码。当然可以使用 git clone --depth=1 https://github.com/chenall/grub4dos.git 下载。估计没有权限是不能推送的。

可以帮忙解决吗?
如果可以,请告诉的详细一些。
或者在消息里回复。

点评

你添加SSH key了吗? https://docs.github.com/en/authentication/connecting-to-github-with-ssh/checking-for-existing-ssh-keys https://docs.github.com/en/authentication/connecting-to-github-with-ssh/tes  详情 回复 发表于 2023-5-25 18:58
回复

使用道具 举报

 楼主| 发表于 2023-5-25 18:58:30 | 显示全部楼层
2011yaya2007777 发表于 2023-5-25 16:35
W超级版主:
现在遇到一个问题,请帮忙。
以前在 windows7_32 环境,使用 chenall 的 grub4dos_dev 编译 ...

你添加SSH key了吗?
https://docs.github.com/en/authe ... r-existing-ssh-keys
https://docs.github.com/en/authe ... your-ssh-connection
回复

使用道具 举报

发表于 2023-5-25 19:23:12 | 显示全部楼层
2011yaya2007777 发表于 2023-5-25 15:36
在 ubuntu-22.04、gcc-11.3 环境下编译的  GRUB4DOS。
请测试。

我测试了手头的PE和linux,没有发现问题。

挺好的。
回复

使用道具 举报

发表于 2023-5-26 10:52:20 | 显示全部楼层
你添加SSH key了吗?

卡在“向您的帐户添加新的SSH密钥”
1. clip < ~/.ssh/id_ed25519.pub  不起作用
如何使用文本打开 “/home/xxx/.ssh/id_ed25519”,提取密钥?
2. 提示:任何页面的右上角,单击您的个人资料照片,然后单击“设置”
这个“任何页面”指什么,我如何进入?

点评

然后手动复制即可。 就是 GitHub 网页 右上角。 [attachimg]527062[/attachimg] [attachimg]527063[/attachimg]  详情 回复 发表于 2023-5-26 11:18
回复

使用道具 举报

 楼主| 发表于 2023-5-26 11:18:05 | 显示全部楼层
2011yaya2007777 发表于 2023-5-26 10:52
卡在“向您的帐户添加新的SSH密钥”
1. clip < ~/.ssh/id_ed25519.pub  不起作用
如何使用文本打开 “/ ...
如何使用文本打开 “/home/xxx/.ssh/id_ed25519”,提取密钥?
  1. cat ~/.ssh/id_ed25519.pub
复制代码

然后手动复制即可。
提示:任何页面的右上角,单击您的个人资料照片,然后单击“设置”

就是 GitHub 网页 右上角。
1.png
2.png
回复

使用道具 举报

发表于 2023-5-26 15:13:17 | 显示全部楼层
然后手动复制即可。

多谢 wintoflash 超级版主,成功了!
回复

使用道具 举报

发表于 2023-5-27 20:16:58 | 显示全部楼层
本帖最后由 liuzhaoyzz 于 2023-5-27 21:52 编辑
2011yaya2007777 发表于 2023-5-25 15:36
在 ubuntu-22.04、gcc-11.3 环境下编译的  GRUB4DOS。
请测试。

BOOTX64_gcc7.5-2023-05-20版本,无法启动pentoo
pentoo下载地址:https://www.pentoo.ch/isos/
pentoo,用idm或者motrix可以全速下载,我记不清我的idm在哪里下载的了,大概是这个:IDM破解版下载-IDM(优秀下载工具)v6.40.1 完美破解版-ucbug软件站https://www.ucbug.com/soft/26392.html
https://www.pentoo.ch/isos/

g4d无法启动pentoo.png
#grub4dos_BIOS可以启动,grub4dos_UEFI无法启动
title /linux2/pentoo/pentoo-amd64-hardened-2023.0_p20230526.iso
find --ignore-floppies --ignore-cd --set-root /linux2/pentoo/pentoo-amd64-hardened-2023.0_p20230526.iso
map /linux2/pentoo/pentoo-amd64-hardened-2023.0_p20230526.iso (hd32)
map --hook
kernel (hd32)/boot/pentoo isoboot=/linux2/pentoo/pentoo-amd64-hardened-2023.0_p20230526.iso init=/linuxrc nox nodhcp secureconsole overlayfs max_loop=256 dokeymap video=uvesafb:mtrr:3,ywrap,1024x768-16 console=tty0 net.ifnames=0 scsi_mod.use_blk_mq=1 ipv6.autoconf=0 usbcore.usbfs_memory_mb=0 looptype=squashfs loop=/image.squashfs cdroot verify
initrd (hd32)/boot/pentoo.igz


#grub2_BIOS及grub2_UEFI均可启动
menuentry "/linux2/pentoo/pentoo-amd64-hardened-2023.0_p20230526.iso" "/linux2/pentoo/pentoo-amd64-hardened-2023.0_p20230526.iso" {
set gfxpayload=keep
search --no-floppy --set --file $2
loopback loop $2
linux (loop)/boot/pentoo isoboot=/linux2/pentoo/pentoo-amd64-hardened-2023.0_p20230526.iso init=/linuxrc nox nodhcp secureconsole overlayfs max_loop=256 dokeymap video=uvesafb:mtrr:3,ywrap,1024x768-16 console=tty0 net.ifnames=0 scsi_mod.use_blk_mq=1 ipv6.autoconf=0 usbcore.usbfs_memory_mb=0 looptype=squashfs loop=/image.squashfs cdroot verify
initrd (loop)/boot/pentoo.igz
}


第一次进系统,用户名pentoo,密码自己输入。
uname -a,linux kernel 6.3.3,这应该是非常新的linux内核了。
linux64 位-2023-05-27-20-13-17.png

对于g4e启动linux,我的意思是:
1、是否内核过旧,太老的内核没必要支持了,随它去吧。g4e只要支持比较新的内核即可。
2、是否是linux启动参数有问题,并非是g4e本身的问题,如果是linux发行版启动参数的问题,有请大家帮忙指导。
3、如果以上两条都不是,再看下是否是g4e本身的问题。










回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-4-17 05:16

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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