无忧启动论坛

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

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

    [复制链接]
跳转到指定楼层
1#
发表于 2023-2-23 11:39:46 | 显示全部楼层 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 wintoflash 于 2023-2-23 22:36 编辑

【仅供测试,请勿用于生产环境】
Github 上一位埃及的朋友提交了让 GRUB4DOS 在高版本 GCC 下也可以成功编译的 PR,
目前我测试 GCC 7.5, GCC 8.4, GCC 9.5, GCC 11.3 都能正常编译。
grub4dos-0.4.6a-2023-02-23-gcc-11.3.7z (311.17 KB, 下载次数: 88)
grub4dos-0.4.6a-2023-02-23-gcc-9.5.7z (311.06 KB, 下载次数: 34)
grub4dos-0.4.6a-2023-02-23-gcc-8.4.7z (309.7 KB, 下载次数: 34)
grub4dos-0.4.6a-2023-02-23-gcc-7.5.7z (309.97 KB, 下载次数: 36)
GCC 10.4 要稍微改一下才能通过编译。
grub4dos-0.4.6a-2023-02-23-gcc-10.4.7z (310.86 KB, 下载次数: 40)
有空的话大家可以测试一下,看看各项功能是否都正常。
https://github.com/chenall/grub4dos/pull/395
@chenall @求道者

点评

所有专业级高手的都不太活跃了 除了大大!哈哈  发表于 2023-2-24 12:44

评分

参与人数 5无忧币 +25 收起 理由
wuxin9712 + 5 赞一个!
879792799 + 5 很给力!
2011yaya2007777 + 5 赞一个!
freesoft00 + 5
holley2008 + 5 赞一个!

查看全部评分

2#
 楼主| 发表于 2023-2-23 15:03:26 | 显示全部楼层
我寻思这个帖子也不是资源分享啊,是请人来找茬的。回复“谢谢分享”的都是机器人?

点评

也别太苛求了。啊哈哈,向我这样水平的外行不懂的人很多,以为就是分享了新版。当成成品来用了。  详情 回复 发表于 2023-2-23 22:33
回复

使用道具 举报

3#
 楼主| 发表于 2023-2-23 20:22:06 | 显示全部楼层
2011yaya2007777 发表于 2023-2-23 20:16
其余版本问题相同:过了内置菜单,进不了外置菜单,光标一直闪烁。
菜单内容:
timeout 10

其余版本问题相同:过了内置菜单,进不了外置菜单,光标一直闪烁

是的,有很多地方要改的,慢慢研究。总是守着 GCC 4.x 也不是个办法。
回复

使用道具 举报

4#
 楼主| 发表于 2023-2-23 20:29:40 | 显示全部楼层
2011yaya2007777 发表于 2023-2-23 20:16
其余版本问题相同:过了内置菜单,进不了外置菜单,光标一直闪烁。
菜单内容:
timeout 10

另外,今天上传官网的补丁也编译不过,卡在那里了。

我重新执行了下编译任务,现在可以了:https://github.com/chenall/grub4dos/releases/tag/0.4.6a

@chenall: 构建过程中有这个警告:
Warning: The `set-output` command is deprecated and will be disabled soon. Please upgrade to using Environment Files. For more information see: https://github.blog/changelog/20 ... et-output-commands/
回复

使用道具 举报

5#
 楼主| 发表于 2023-2-23 22:37:33 | 显示全部楼层
Allreal 发表于 2023-2-23 22:33
也别太苛求了。啊哈哈,向我这样水平的外行不懂的人很多,以为就是分享了新版。当成成品来用了。

那我加上明显的警告。万一用于生产环境那就麻烦了。

点评

没太大所谓,不搞费BIOS和硬件就是胜利✌  详情 回复 发表于 2023-2-24 15:57
嗯嗯,楼主严谨。真不错。  详情 回复 发表于 2023-2-23 22:46
回复

使用道具 举报

6#
 楼主| 发表于 2023-2-23 23:22:09 | 显示全部楼层
求道者 发表于 2023-2-23 23:07
最近在弄ARM板,路由器OPENWRT移植,coreboot移植。
https://ticket.coreboot.org/issues/462
后者一直卡 ...

头一次听说arm上用coreboot的。为啥不用uboot或者直接上uefi?

点评

B75上搞,rk3399的设备树都还没完全弄好,驱动就别提了。 type-c的驱动都没弄好。 我确实想让arm上coreboot,因为coreboot能够用grub2负载。  详情 回复 发表于 2023-2-24 15:53
回复

使用道具 举报

7#
 楼主| 发表于 2023-2-24 19:36:42 | 显示全部楼层
2011yaya2007777 发表于 2023-2-24 18:42
gcc 8 以上是不是默认64位?

没加-m32吗?应该有吧。
回复

使用道具 举报

8#
 楼主| 发表于 2023-2-26 11:28:38 | 显示全部楼层
本帖最后由 wintoflash 于 2023-2-26 11:31 编辑
2011yaya2007777 发表于 2023-2-24 20:16
g4d没有加。32位g4e加了。

grub4dos-0.4.6a-2023-02-26-gcc10.4.7z (312.18 KB, 下载次数: 8)
grub4dos-0.4.6a-2023-02-26-gcc11.3.7z (312.38 KB, 下载次数: 5)
试试,我这里 GCC 10.4 的看起来没啥毛病, GCC 11.3 的有问题。

回复

使用道具 举报

9#
 楼主| 发表于 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 的要稍微改下,而且编译出来的有点问题。
回复

使用道具 举报

10#
 楼主| 发表于 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
复制代码
回复

使用道具 举报

11#
 楼主| 发表于 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
复制代码
回复

使用道具 举报

12#
 楼主| 发表于 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
回复

使用道具 举报

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

使用道具 举报

14#
 楼主| 发表于 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
回复

使用道具 举报

15#
 楼主| 发表于 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 网页 右上角。

回复

使用道具 举报

16#
 楼主| 发表于 2023-5-29 09:18:02 | 显示全部楼层
2011yaya2007777 发表于 2023-5-28 17:49
使用 gcc11.3 编译 g4eext,会在文件头部增加 16 字节:
00000000   04 00 00 00 10 00 00 00  05 00 00 0 ...

用 dd ?
  1. dd if=$< of=$@ bs=1 skip=16
复制代码

回复

使用道具 举报

17#
 楼主| 发表于 2023-5-31 22:05:19 | 显示全部楼层
2011yaya2007777 发表于 2023-5-30 16:53
奇怪了,W超版你可以使用gcc各版本编译成功grldr,而我只能使用gcc-11.3编译成。使用其他版本编译,错误提 ...

你是不是没装对应版本的 gcc-multilib
比如用的是 gcc-10,那就要装 gcc-10-multilib
我是用 update-alternatives 来切换 GCC 版本的。

点评

在一个系统里安装多个gcc版本?之前看过这种骚操作,感觉依赖冲突问题很不好处理啊?  详情 回复 发表于 2023-6-1 05:31
回复

使用道具 举报

18#
 楼主| 发表于 2023-6-1 10:04:21 | 显示全部楼层
2011yaya2007777 发表于 2023-6-1 09:30
是没有装。

sudo apt install -y gcc7-multilib gcc8-multilib gcc9-multilib gcc10-multilib

gcc-10-multilib
你写错了
回复

使用道具 举报

19#
 楼主| 发表于 2023-6-4 17:41:37 | 显示全部楼层
2011yaya2007777 发表于 2023-6-4 16:58
@wintoflash
今天上传了外部命令补丁。
修改 ubuntu 为 22.04,gcc 为 11。

现在编译通过了。
暂时禁止了 fbinst, loadbin, makemod, makerom, wee, weesetup 等 Windows 下工具的编译。这些玩意要用 mingw 来编译。
回复

使用道具 举报

20#
 楼主| 发表于 2023-6-4 18:10:17 | 显示全部楼层
2011yaya2007777 发表于 2023-6-4 18:00
好的。明天把我 grub4dos,grub4efi 推上去。

grub4dos那边用的是chenall的编译脚本,写死了gcc版本。我给chenall提了issue,还没回复。
https://github.com/chenall/grub4dos-build/issues/1

点评

破github又卡又墙,chenall没有看到这个issue吧。按说是有邮件提醒的呀?chenall没有注意到吧。  详情 回复 发表于 2023-6-4 21:50
回复

使用道具 举报

21#
 楼主| 发表于 2023-6-5 11:51:49 | 显示全部楼层
2011yaya2007777 发表于 2023-6-5 11:16
把grub4dos推送上去了。
修改了 .github/workflows 及 .travis.yml,似乎没有起作用,仍然使用 ubuntu-18. ...

前面说了,这个得chenall来弄。
https://github.com/chenall/grub4 ... in/start-grubdev.sh
他写死了 gcc 版本。

点评

前一段时间刚好比较忙.. 刚看到 yaya 已经处理好了  详情 回复 发表于 2023-6-18 16:30
回复

使用道具 举报

22#
 楼主| 发表于 2023-6-18 21:02:03 | 显示全部楼层
chenall 发表于 2023-6-18 16:30
前一段时间刚好比较忙..

刚看到 yaya 已经处理好了

能不能解决一下 efi 分支这个报错

点评

已处理,应该下次就不报错了.  发表于 2023-7-5 20:36
回复

使用道具 举报

23#
 楼主| 发表于 2023-6-20 18:35:07 | 显示全部楼层
chesson 发表于 2023-6-19 22:48
小白一枚,借宝地求教个问题:几年前我学习细细哥的U盘启动VHD的帖子,随便找个成品PE,再借助FbinstTool就 ...

fbinst 1.6 和 1.7 版本是不兼容的。
现在用 fbinst 1.7 做的 ud,必须用 1.7 版本的 fbinst / FbinstTool 来打开。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-15 03:36

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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