无忧启动论坛

标题: g4d bug回报 [打印本页]

作者: 求道者    时间: 2018-1-23 17:18
标题: g4d bug回报
2017-11-30 08:50 v0.4.6a
加入了这个bug
2017-11-18 23:01 v0.4.6a
还没有这个问题

会导致memtest86+5.01.bin无法启动
QEMU就能测试
QEMU下会直接程序报错
实机会重启
附上memtest86+5.01.bin的fba

test.7z

208.62 KB, 下载次数: 14, 下载积分: 无忧币 -2


作者: 求道者    时间: 2018-1-23 22:46
yaya不在?
作者: 不点    时间: 2018-1-23 22:55
求道者 发表于 2018-1-23 22:46
yaya不在?

你帮他找找毛病吧。yaya 好像不是天天都来的。


作者: 2011yaya2007777    时间: 2018-1-24 06:22
本帖最后由 2011yaya2007777 于 2018-1-24 10:18 编辑

知道了。请上传 img 格式的文件。
请上传 memtest86+5.01.bin 。解压缩错误。
作者: 求道者    时间: 2018-1-24 12:41
2011yaya2007777 发表于 2018-1-24 06:22
知道了。请上传 img 格式的文件。
请上传 memtest86+5.01.bin 。解压缩错误。

我这边7-zip解压没问题
我传个度盘吧
https://pan.baidu.com/s/1sniaKln
作者: 2011yaya2007777    时间: 2018-1-24 17:39
memtest86+5.01.bin.lzma 不能解压缩。你如何使用 7-zip 解压?
度盘吧没有 memtest86+5.01.bin
作者: 2011yaya2007777    时间: 2018-1-24 18:54
原来 memtest86+5.01.bin.lzma 就是 memtest86+5.01.bin
作者: 求道者    时间: 2018-1-25 08:33
2011yaya2007777 发表于 2018-1-24 18:54
原来 memtest86+5.01.bin.lzma 就是 memtest86+5.01.bin

对啊 我懒 解压后就没改名了
之前是以为是因为压缩了才不能运行
作者: 2011yaya2007777    时间: 2018-1-29 10:13
这几天鼓捣菜单跳转,却无意间解决了楼主报告的bug。
bug可能是编译时堆栈占用空间引起的冲突。

现在在菜单中可以相批处理一样,使用 goto :label
例:
title test
echo This is a test string
set /p os=Please Input:
if /i %os%==1 && goto :label1
if /i %os%==2 && goto :label2
echo -e \nInvalid input
goto :aaa
:label1
echo -e \nThis is a label1
goto :aaa
:label2
echo -e \nThis is a label2
:aaa
set os=
pause

请测试

grldr.rar

162.99 KB, 下载次数: 3, 下载积分: 无忧币 -2


作者: 求道者    时间: 2018-1-29 12:15
2011yaya2007777 发表于 2018-1-29 10:13
这几天鼓捣菜单跳转,却无意间解决了楼主报告的bug。
bug可能是编译时堆栈占用空间引起的冲突。


测试好像通过了
作者: chenall    时间: 2018-2-27 11:19
最新版本已经上传,编译环境改成gcc-4.6,我测试了启动memtest正常.你们再试试看
作者: 2011yaya2007777    时间: 2018-2-27 17:40
确实可以了.
作者: 不点    时间: 2018-2-27 20:26
如果是 gcc 版本的原因,那应该明确记录一下,比如说,写在 readme 里面,让大家都知道。

最好能试试最新版的 gcc,看看行不行。

还有一个思路,试试 clang,它完全兼容 gcc,我感觉 clang 非常棒。但我不知道 clang 能否用来编译 grub4dos (没试验过)。



作者: 求道者    时间: 2018-2-27 21:45
新版gcc的锅?
作者: 2011yaya2007777    时间: 2018-2-28 09:44
grub4dos_dev内部是: gcc-4.8,git-1.6,binutils-2.22,libssl-0.9.8,linux-3.0.1_api_headers。
作者: chenall    时间: 2018-2-28 11:54
2011yaya2007777 发表于 2018-2-28 09:44
grub4dos_dev内部是: gcc-4.8,git-1.6,binutils-2.22,libssl-0.9.8,linux-3.0.1_api_headers。


有问题的编译环境也是gcc-4.8 版本号是gcc (Ubuntu 4.8.4-2ubuntu1~14.04.4) 4.8.4

现在的编译环境使用的是https://travis-ci.org提供的.
作者: 求道者    时间: 2018-2-28 19:48
chenall 发表于 2018-2-28 11:54
有问题的编译环境也是gcc-4.8 版本号是gcc (Ubuntu 4.8.4-2ubuntu1~14.04.4) 4.8.4

现在的编译环境 ...

是GCC的BUG吗?
他们会修吗?
作者: 不点    时间: 2018-2-28 22:28
求道者 发表于 2018-2-28 19:48
是GCC的BUG吗?
他们会修吗?

他们修不修,似乎与我们关系不大。我估计没什么人去报告 bug,就算有人想去报告,可能也不知道该怎么报告。

我建议 “试试”,就是说,我们以 “试验” 的方式,来判断哪个版本有问题。那些经过试验判断 “有错误” 的版本,肯定不好,就被淘汰掉。只留下 “没有暴露出问题” 的版本。

所以,我觉得应该试试 gcc 的最新版,以及 clang 的最新版。

有鉴于 gcc 总在出问题,因此我建议各位考虑逐步采纳 clang。

作者: chenall    时间: 2018-3-1 00:53
我试着用clang编译,检测报错

configure: error: GRUB requires GAS .code16 addr32 support

作者: 不点    时间: 2018-3-1 09:07
本帖最后由 不点 于 2018-3-1 09:17 编辑
chenall 发表于 2018-3-1 00:53
我试着用clang编译,检测报错

configure: error: GRUB requires GAS .code16 addr32 support


搜到一些知识或方法,说明如下:

We disabled clang's integrated assembler (and rely on gas for linking)

                Reason:
                           no .code16 support
                           inline assembly handling

  1. arch/x86/boot/Makefile
  2. +# For clang we need to rely on no-integrated-as for .code16
  3. +ifeq ($(COMPILER),clang)
  4. +KBUILD_CFLAGS  +=  -Wno-unused-value -Wno-unused-parameter \
  5. +                    -mno-sse   $(call cc-option,-no-integrated-as,)
  6. +endif
复制代码


这不是针对 grub,但他的方法可以借鉴。

至于说 data32 和 addr32,这好办,它们只是指令修饰符(指令前缀),分别改成

.byte   0x66
.byte   0x67

即可。


【补充】在 asm 方面,可能困难比较多,看来目前还不能用 clang 来编译。

暂时放弃 clang 吧,看看 gcc 最新版行不行。

作者: chenall    时间: 2018-3-1 10:22
本帖最后由 chenall 于 2018-3-1 10:34 编辑

我测试了几个版本4.6-5.0,目前只有4.6的可以正常启动,其它版本都会异常.
作者: 不点    时间: 2018-3-1 11:42
chenall 发表于 2018-3-1 10:22
我测试了几个版本4.6-5.0,目前只有4.6的可以正常启动,其它版本都会异常.

最新版的 gcc 是 7.3,有机会可以试试。
作者: 不点    时间: 2018-3-1 12:56
chenall 发表于 2018-3-1 10:22
我测试了几个版本4.6-5.0,目前只有4.6的可以正常启动,其它版本都会异常.

我想请教 chenall 有关创建 cling 改进项目的问题。

cling 已经有 79 个 fork 了,我也不可能一个一个去检验 fork 以后的这 79 个版本是否有改进。

不过我也担心,假如我做了别人早就做好的工作,那是浪费。

我对 git 的东西也不是很熟,要学知识,而我确实懒惰,尤其到了我这岁数,更不想折腾。

目前我是有些纠结。

我看到 chenall 也很忙,因此,也不好意思总是给 chenall 添麻烦。

不过,如果 chenall 碰巧也对 cling 有兴趣的话,或许这不算太麻烦。

直说了吧,chenall 有没有可能开辟这个 cling 改造项目?

不需要经常更新,只要偶尔有空的时候,更新一下便可。我可以把补丁发在论坛上。

chenall 愿意投入时间进行开发,那最好了。如果不想投入开发,只要简单维护一下便可。

还有没有其他人愿意参加?都可以一起搞。


作者: gnuxwy    时间: 2018-3-1 12:57
如果最新版的gcc试过编译g4d仍然有问题,应该向gcc开发团队汇报bug,这也氏对gcc开发工作的支持。
大家都想用bug更少的编译噐,但只有汇报bug才有可能让开发团队解决问题啊。


作者: 不点    时间: 2018-3-1 13:11
gnuxwy 发表于 2018-3-1 12:57
如果最新版的gcc试过编译g4d仍然有问题,应该向gcc开发团队汇报bug,这也氏对gcc开发工作的支持。
大家都 ...

bug 难以描述。定位 bug 很不容易。

先用 “试验” 的办法,看看最新版是否解决了。如果最新版没问题,那就 OK 了。

如果最新版也有问题,那就难了。有可能最终只能转向 clang。

还有一个办法,就是,永远只使用某个版本的 gcc 来编译 grub4dos。

恕我直言,我怀疑 gcc 里面混有间谍搞破坏。若干年前我都开始怀疑了。

作者: chenall    时间: 2018-3-1 15:03
这个是用GCC-7编译的,大家可以先测测看有没有其它问题。

没有什么问题的话到时再把编译环境修改为gcc-7版本

grub4dos-0.4.6a-2018-03-01.7z

509.05 KB, 下载次数: 13, 下载积分: 无忧币 -2


作者: 2011yaya2007777    时间: 2018-3-2 09:41
测试memtest86+5.01.bin正常.
作者: gnuxwy    时间: 2018-3-2 13:05
屮从未在g4d的命令行环境执行过memtest。
若要测试的话氏直接在命令行执行系列命令,还氏修改menu.lst加入多行命令。
grub4dos的范例菜单没有提供运行memtest86的命令,屮看了下grub2的菜单条,居然这么多条命令。

menuentry 'Memory test (memtest86+, serial console 115200)' {
        insmod part_msdos
        insmod ext2
        set root='hd0,msdos8'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos8 --hint-efi=hd0,msdos8 --hint-baremetal=ahci0,msdos8  f30e6b8f-1999-41a1-98f9-256c644a0949
        else
          search --no-floppy --fs-uuid --set=root f30e6b8f-1999-41a1-98f9-256c644a0949
        fi
        linux16        /boot/memtest86+.bin console=ttyS0,115200n8
}

作者: 不点    时间: 2018-3-2 18:38
gnuxwy 发表于 2018-3-2 13:05
屮从未在g4d的命令行环境执行过memtest。
若要测试的话氏直接在命令行执行系列命令,还氏修改menu.lst加入 ...

在百度搜 “grub4dos memtest86” 找到的第一个网页就是:

http://www.rmprepusb.com/tutorials/memtest86

它里面的菜单如下:

  1. title memtest86+ v4.10
  2. find --set-root /memtest.img
  3. map /memtest.img (fd0)
  4. map --hook
  5. chainloader (fd0)+1
  6. rootnoverify (fd0)
  7. map --floppies=1
复制代码

作者: 2011yaya2007777    时间: 2018-3-3 12:09
管网又不能自动编译发布了!
作者: chenall    时间: 2018-3-3 13:24
我检查一下
作者: chenall    时间: 2018-3-3 14:01
2011yaya2007777 发表于 2018-3-3 12:09
管网又不能自动编译发布了!

已发布,另外编译环修改成gcc-7了
作者: gnuxwy    时间: 2018-3-6 19:06
不点 发表于 2018-3-2 18:38
在百度搜 “grub4dos memtest86” 找到的第一个网页就是:

http://www.rmprepusb.com/tutorials/memte ...

为什么grub2的菜单里,能直接用memtest86+.bin 这样的兵程序,
而g4d中却要映射一个memtest86.img成软盘,氏不氏那个软盘里氏dos,实际的氏memtest86.exe。
g4d以前听大师讲,也能直接支持运行程序的,那为什么不直接编译一个g4d环境可直接运行的memtest86.g4d

作者: 求道者    时间: 2018-3-11 20:09
gnuxwy 发表于 2018-3-6 19:06
为什么grub2的菜单里,能直接用memtest86+.bin 这样的兵程序,
而g4d中却要映射一个memtest86.img成软盘 ...

没问题啊
  1. title memtest86+
  2. find --set-root /memtest86+5.01.bin.lzma
  3. kernel /memtest86+5.01.bin.lzma
复制代码

memtest86+有内核版……
至于最后
那也得有人移植memtest86+过来啊
我觉得不如弄一发DOS for G4D
作者: 2011yaya2007777    时间: 2018-3-27 09:35
本帖最后由 2011yaya2007777 于 2018-3-27 10:12 编辑
已发布,另外编译环修改成gcc-7了

又有一个奇怪现象:
issues #168反映
版本2017-12-23正常。(但是,这个帖子反馈的问题依然存在。)
自动编译改成使用gcc-4.6版本后,版本2018-02-27正常。(这个帖子反馈的问题修正。)
编译环修改成gcc-7后,版本2018-03-03错误,版本2018-03-15错误,版本2018-03-24错误,版本2018-03-26错误。(这个帖子反馈的问题修正。)
然而我编译的版本正常。
附测试菜单。




test2.rar

8.8 KB, 下载次数: 0, 下载积分: 无忧币 -2

grub4dos-0.4.6a-2018-03-26.7z.rar

289.31 KB, 下载次数: 0, 下载积分: 无忧币 -2


作者: 不点    时间: 2018-3-27 15:11
2011yaya2007777 发表于 2018-3-27 09:35
又有一个奇怪现象:
issues #168反映
版本2017-12-23正常。(但是,这个帖子反馈的问题依然存在。)

你的编译环境是啥?哪个 Linux 发行版?32-bit 环境,还是 64-bit?gcc 版本?

如果 gcc 实在搞不定的话,转到 clang 是一个不错的选项。clang 不支持某些 asm 指令,因此,某些 asm 代码需要手动改成

.byte .....
.byte .....

也就是说,不让编译器编译,而是直接写机器指令。



作者: chenall    时间: 2018-3-27 15:22
2011yaya2007777 发表于 2018-3-27 09:35
又有一个奇怪现象:
issues #168反映
版本2017-12-23正常。(但是,这个帖子反馈的问题依然存在。)

你编译的版本使用的编译环境是什么?
gcc -v
作者: chenall    时间: 2018-3-27 15:26
2011yaya2007777 发表于 2018-3-27 09:35
又有一个奇怪现象:
issues #168反映
版本2017-12-23正常。(但是,这个帖子反馈的问题依然存在。)

源码根目录下有一个 .travis.yml

修改里面的内容(共有三个地方)

gcc-7 修改为 gcc-4.6

更新之后就会使用gcc-4.6版本编译。

作者: chenall    时间: 2018-3-27 15:28
不点 发表于 2018-3-27 15:11
你的编译环境是啥?哪个 Linux 发行版?32-bit 环境,还是 64-bit?gcc 版本?

如果 gcc 实在搞不定的 ...

难怪,我之前测试使用clang编译失败。

另外可能grub4dos里面有使用了特定版本gcc的一些hack之类的代码,所以不同gcc版本会有差异。
作者: 2011yaya2007777    时间: 2018-3-27 15:47
我是在windows7(32位)下,使用chenall提供的grub4dos_dev编译的。

gcc -v    显示:
Traget: i486-Linux-gnu
gcc version 4.8.0 20130127

在.travis.yml ,可不可以修改 gcc-7 为 gcc-4.8.0 ? 难道是只能修改为 gcc-4.8 ?
作者: chenall    时间: 2018-3-27 16:07
本帖最后由 chenall 于 2018-3-27 16:12 编辑
2011yaya2007777 发表于 2018-3-27 15:47
我是在windows7(32位)下,使用chenall提供的grub4dos_dev编译的。

gcc -v    显示:


这个我回头再测试一下,
目前已知4.6的可以使用,可以先用4.6的

PS: 最早使用的是默认的4.8.4版本,本贴异常,后面修改为4.6之后才可以。



作者: freesoft00    时间: 2018-6-18 10:55
不点 发表于 2018-3-27 15:11
你的编译环境是啥?哪个 Linux 发行版?32-bit 环境,还是 64-bit?gcc 版本?

如果 gcc 实在搞不定的 ...


还记得 Zapcc 编译器吗?一个旨在减少编译时间的编译器,现在已正式开源。Zapcc 是基于 LLVM/Clang 的 C++ 编译器,自 2015 年开始,它就一直在致力于让自己成为比 Clang 本身更快的 C++ 编译器。Zapcc 采用激进的缓存策略(aggressive caching)和其他技术来显著加快编译时间,同时作为 GCC 或 Clang 的替代品。


Zapcc 为了做到比其他 C++ 编译器更快,采取的方法是将一些编译器的结构缓存在服务器上,从而大幅度提升编译速度。

去年 Zapcc 发布了 v1.0 里程碑阶段的版本,并于本周宣布开源。

来自 Zapcc 背后的公司 Ceemple 的人写道,他们分享了他们拥有的 Zapcc。由于用户的请求,这个更快的 C++ 编译器已在 LLVM 许可证下开源。他们希望 Zapcc 开源后能加速这款以速度为宗旨的 C++ 编译器的开发。

该项目的代码现在托管在GitHub,而构建过程/环境要求则和编译 Clang 的要求一样。此外,作者表示会努力为 Zapcc 添加一些新的测试基准。
https://github.com/yrnkrn/zapcc




欢迎光临 无忧启动论坛 (http://bbs.c3.wuyou.net/) Powered by Discuz! X3.3