无忧启动论坛

 找回密码
 注册
搜索

使用高版本 GCC 编译 GRUB4DOS

查看数: 12742 | 评论数: 93 | 收藏 5
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2023-2-23 11:39

正文摘要:

本帖最后由 wintoflash 于 2023-2-23 22:36 编辑 【仅供测试,请勿用于生产环境】 Github 上一位埃及的朋友提交了让 GRUB4DOS 在高版本 GCC 下也可以成功编译的 PR, 目前我测试 GCC 7.5, GCC 8.4, GCC 9.5, GC ...

回复

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

点评

也别太苛求了。啊哈哈,向我这样水平的外行不懂的人很多,以为就是分享了新版。当成成品来用了。  详情 回复 发表于 2023-2-23 22:33
wn168cn@163.com 发表于 2024-11-9 17:20:34
感谢分享
qhb 发表于 2024-11-9 17:10:50
赞赞
pduaje43125@cha 发表于 2023-10-17 09:26:07
帖后跳转到最后一页
312439374 发表于 2023-10-13 21:02:31
怎么编译啊? 我解压了,用make报错
wintoflash 发表于 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 来打开。
chesson 发表于 2023-6-19 22:48:04
小白一枚,借宝地求教个问题:几年前我学习细细哥的U盘启动VHD的帖子,随便找个成品PE,再借助FbinstTool就可以看到存在的UD分区,随便编辑菜单文件,现在新版的PE,为什么隐藏分区全都无法查看了?是需要什么新的软件工具才行吗?

点评

fbinst 1.6 和 1.7 版本是不兼容的。 现在用 fbinst 1.7 做的 ud,必须用 1.7 版本的 fbinst / FbinstTool 来打开。  详情 回复 发表于 2023-6-20 18:35
chenall 发表于 2023-6-18 16:30:28
wintoflash 发表于 2023-6-5 11:51
前面说了,这个得chenall来弄。
https://github.com/chenall/grub4dos-build/blob/main/start-grubdev.s ...

前一段时间刚好比较忙..

刚看到 yaya 已经处理好了

点评

能不能解决一下 efi 分支这个报错 [attachimg]528180[/attachimg]  详情 回复 发表于 2023-6-18 21:02
2011yaya2007777 发表于 2023-6-9 18:20:05
G4D,G4E 成功发布,可以从两个官网地址下载了。
wintoflash 发表于 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
2011yaya2007777 发表于 2023-6-5 11:16:19
把grub4dos推送上去了。
修改了 .github/workflows 及 .travis.yml,似乎没有起作用,仍然使用 ubuntu-18.04 编译。
卡在 “调用专用编译环境进行编译”

Run chenall/grub4dos-build@main
Run $GITHUB_ACTION_PATH/tmate.sh
Run cd $GITHUB_ACTION_PATH && chmod +x ./start-grubdev.sh && ./start-grubdev.sh
......
E: Unable to locate package gcc-4.8
E: Couldn't find any package by glob 'gcc-4.8'
E: Unable to locate package gcc-4.8-multilib
E: Couldn't find any package by glob 'gcc-4.8-multilib'
Error: Process completed with exit code 100.

chenall/grub4dos-build@main, $GITHUB_ACTION_PATH/tmate.sh,  ./start-grubdev.sh 这些都不在现有的文件包内。

点评

前面说了,这个得chenall来弄。 https://github.com/chenall/grub4dos-build/blob/main/start-grubdev.sh 他写死了 gcc 版本。  详情 回复 发表于 2023-6-5 11:51
liuzhaoyzz 发表于 2023-6-4 22:18:25
2011yaya2007777 发表于 2023-6-4 18:30
这个补丁我一起推上去。不知道还有没有其他问题,到时再请教你。

你们几个高手还是加个微信好了,github沟通感觉不太畅快啊。
liuzhaoyzz 发表于 2023-6-4 21:50:47
wintoflash 发表于 2023-6-4 18:10
grub4dos那边用的是chenall的编译脚本,写死了gcc版本。我给chenall提了issue,还没回复。
https://gith ...

破github又卡又墙,chenall没有看到这个issue吧。按说是有邮件提醒的呀?chenall没有注意到吧。
2011yaya2007777 发表于 2023-6-4 18:30:49
这个补丁我一起推上去。不知道还有没有其他问题,到时再请教你。

点评

你们几个高手还是加个微信好了,github沟通感觉不太畅快啊。  详情 回复 发表于 2023-6-4 22:18
wintoflash 发表于 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
2011yaya2007777 发表于 2023-6-4 18:00:21
好的。明天把我 grub4dos,grub4efi 推上去。

点评

grub4dos那边用的是chenall的编译脚本,写死了gcc版本。我给chenall提了issue,还没回复。 https://github.com/chenall/grub4dos-build/issues/1  详情 回复 发表于 2023-6-4 18:10
wintoflash 发表于 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 来编译。
2011yaya2007777 发表于 2023-6-4 16:58:37
@wintoflash
今天上传了外部命令补丁。
修改 ubuntu 为 22.04,gcc 为 11。
但是卡在初始化。
提示:
E: Failed to fetch http://azure.archive.ubuntu.com/ ... ubuntu2.1_amd64.deb  404  Not Found [IP: 40.119.46.219 80]
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?
Error: Process completed with exit code 100.

点评

现在编译通过了。 暂时禁止了 fbinst, loadbin, makemod, makerom, wee, weesetup 等 Windows 下工具的编译。这些玩意要用 mingw 来编译。  详情 回复 发表于 2023-6-4 17:41
2011yaya2007777 发表于 2023-6-1 12:55:18
试一试,要学的挺多。
liuzhaoyzz 发表于 2023-6-1 12:37:04
包名字可以模糊搜索
apt search package_name
或者
apt search package_name|grep "package_name"
2011yaya2007777 发表于 2023-6-1 10:39:54
本帖最后由 2011yaya2007777 于 2023-6-1 11:02 编辑

我不懂,是照抄埃及朋友的。
已经成功下载并编译成功!
谢谢wintoflash超级版主!
wintoflash 发表于 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
你写错了
2011yaya2007777 发表于 2023-6-1 09:30:45
你是不是没装对应版本的 gcc-multilib

是没有装。

sudo apt install -y gcc7-multilib gcc8-multilib gcc9-multilib gcc10-multilib
正在读取软件包列表... 完成
正在分析软件包的依赖关系树... 完成
正在读取状态信息... 完成                 
E: 无法定位软件包 gcc7-multilib
E: 无法定位软件包 gcc8-multilib
E: 无法定位软件包 gcc9-multilib
E: 无法定位软件包 gcc10-multilib

在网上搜了搜,说是更新源,添加了清华源还是不行。

点评

gcc-10-multilib 你写错了  详情 回复 发表于 2023-6-1 10:04
liuzhaoyzz 发表于 2023-6-1 05:31:55
本帖最后由 liuzhaoyzz 于 2023-6-1 06:45 编辑
wintoflash 发表于 2023-5-31 22:05
你是不是没装对应版本的 gcc-multilib
比如用的是 gcc-10,那就要装 gcc-10-multilib
我是用 update-al ...


在一个系统里安装多个gcc版本?之前看过这种骚操作,感觉依赖冲突问题很不好处理啊?高版本的ubuntu,低版本的gcc有的依赖根本就安装不上啊?
whatigo486 发表于 2023-5-30 17:28:29
学习
2011yaya2007777 发表于 2023-5-30 16:53:48
奇怪了,W超版你可以使用gcc各版本编译成功grldr,而我只能使用gcc-11.3编译成。使用其他版本编译,错误提示没有_start,然后退出。

点评

你是不是没装对应版本的 gcc-multilib 比如用的是 gcc-10,那就要装 gcc-10-multilib 我是用 update-alternatives 来切换 GCC 版本的。 [attachimg]527370[/attachimg]  详情 回复 发表于 2023-5-31 22:05
2011yaya2007777 发表于 2023-5-29 21:29:42
本帖最后由 2011yaya2007777 于 2023-5-30 05:00 编辑
用 dd ?

终于使用dd搞定了。各种因素综合考虑,比预想的复杂一些。

$< 是当前 .o 文件,$@ 是当前 .mod 文件。
wintoflash 发表于 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
复制代码

2011yaya2007777 发表于 2023-5-28 17:49:49
使用 gcc11.3 编译 g4eext,会在文件头部增加 16 字节:
00000000   04 00 00 00 10 00 00 00  05 00 00 00 47 4E 55 00            GNU
00000016   02 00 00 C0 04 00 00 00  03 00 00 00 00 00 00 00     ?     
这影响外置命令执行。

1. 编译时增加什么参数,避免这 16 字节。
2. 生成外部命令后使用脚本删除这 16 字节。

Makefile 文件内容如下:
ifeq ($(CC),cc)
     CC := gcc
endif
OBJCOPY := objcopy
RM      := rm
MV      := mv
MKDIR   := mkdir

DATE = $(shell date -u +%Y-%m-%d)

GCCVERSIONGTEQ5 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 5)

CFLAGS := -Wl,--build-id=none -m64 -mno-sse -nostdlib \
          -fno-zero-initialized-in-bss -fno-function-cse \
          -fshort-wchar -fno-jump-tables -Wl,-N

ifeq "$(GCCVERSIONGTEQ5)" "1"
        CFLAGS += -no-pie
else
        CFLAGS += -fPIE
endif

OBJECTS := $(patsubst %.c,%.o,$(wildcard *.c)) fat/fat.o
MODULES := $(patsubst %.c,%.mod,$(wildcard *.c)) fat/fat.mod

.PHONY: all
all: prepare $(MODULES)
        zip -9 -j ../g4eext-$(DATE).zip bin/*

%.o: %.c
        $(CC) $(CFLAGS) -Iinclude/ $< -o $@

%.mod: %.o
        $(OBJCOPY) -O binary $< $@
#        $(MV) $@ bin/$$(basename -s .mod $@)
        $(MV) $@ bin/$$(basename $@ .mod)

.PHONY: prepare
prepare:
        $(MKDIR) -p bin

.PHONY: clean
clean:
        $(RM) -f *.o *.mod bin/*

点评

用 dd ?  详情 回复 发表于 2023-5-29 09:18

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

闽公网安备 35020302032614号

GMT+8, 2024-11-23 02:57

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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