无忧启动论坛

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

[求助] 老版本源码的获取

[复制链接]
跳转到指定楼层
1#
发表于 2016-11-3 21:42:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这个是2013-04-19版本的源码获取地址
svn co -r 340 http://grub4dos-chenall.googlecode.com/svn/trunk grub4dos


记得之前是改成
svn  co  -r  340  https://github.com/chenall/grub4dos grub4dos
这样是可以获取的。
但是现在获取的不对了。。。。
2#
发表于 2016-11-3 22:08:18 | 只看该作者
谢谢 正需要这个东西呢
回复

使用道具 举报

3#
发表于 2016-11-3 23:05:13 | 只看该作者
老版本,我估计开发者、维护者是不愿意支持的,也没有精力去支持。就连 pseudo 的 0pe 都采用新版本了。

假如你一直采用老版本,那么,你制作的软件还有人敢用吗?我是说,了解这一情况的人还敢用吗?用起来放心吗?

点评

就想你一直追着XP不放手一样。总有这么点需求的。  详情 回复 发表于 2016-11-4 00:20
回复

使用道具 举报

4#
 楼主| 发表于 2016-11-4 00:20:01 | 只看该作者
不点 发表于 2016-11-3 23:05
老版本,我估计开发者、维护者是不愿意支持的,也没有精力去支持。就连 pseudo 的 0pe 都采用新版本了。

...

就想你一直追着XP不放手一样。总有这么点需求的。

点评

无言以对,我输了。  详情 回复 发表于 2016-11-4 01:41
回复

使用道具 举报

5#
发表于 2016-11-4 01:41:53 | 只看该作者
红毛樱木 发表于 2016-11-4 00:20
就想你一直追着XP不放手一样。总有这么点需求的。

无言以对,我输了。
回复

使用道具 举报

6#
发表于 2016-11-4 08:44:03 | 只看该作者
github 在国内访问不太顺畅

你可以看一下更新记录,正常情况下以前googlecode上的代码都有转到github上的。

用git来获取

点评

我看了下说明,git的地址是这样的 git clone git://github.com/chenall/grub4dos.git grub4dos_src 请问老地址 svn co -r 340 http://grub4dos-chenall.googlecode.com/svn/trunk grub4dos 怎么转换成git的地  详情 回复 发表于 2016-11-4 14:23
回复

使用道具 举报

7#
发表于 2016-11-4 09:21:47 | 只看该作者
随着时间一天天过去,新版的稳定性也在经历考验。时间每增加一天,新版的稳定性就更有保障,那么新版存在 bug 的几率就会降低。因为新版基本不会增加什么功能了,每次更新基本都是 bug 修复。

因此我认为,假如某个人可以用旧版而无法成功使用新版,那么,有很大的可能性是他自己的用法出了问题。举例来说,这种情况出现很多次,就是,有人在旧版上不需要 map --e820cycles=... 但在新版却必须使用这个控制参数。当他在新版 grub4dos 下用旧的(不含 map --e820cycles=...)的菜单时,启动 Windows 就可能出现蓝屏。当他不了解这一情况时,他认为新版有 bug。其实不是的,而是 Windows XP 下的某个(好像是 Intel 的吧,记不清了)显卡驱动程序的 bug。

grub4dos 的 bug 是否全部排除干净了?谁也不敢说这个话。因此,grub4dos 有可能仍然存在 bug,并且正好被某个用户撞上,或者说 “逮住”。这就有两条路可选。一条路是紧紧抓住 bug 的尾巴不让它逃脱(需要付出时间和耐力)。另一条路就是不去追究(没有时间和精力,或者没有兴趣),依旧使用某个旧版。至于说两条路要怎样选择,那完全在于每个人的意向了。我认为,趁着 grub4dos 现在还有人维护这个大好时机,应该选择第一条路。假如等到以后的某一天,grub4dos 停止维护了,那时候,你再想报告 bug、排解 bug,那时可能就得不到响应了。

回复

使用道具 举报

8#
 楼主| 发表于 2016-11-4 14:23:50 | 只看该作者
本帖最后由 红毛樱木 于 2016-11-4 15:16 编辑

现在可以了。。。
回复

使用道具 举报

9#
发表于 2016-11-4 15:01:43 | 只看该作者
本帖最后由 2011grassll 于 2016-11-4 15:03 编辑

0.4.5c的2012-10-02版本起,等待timeout时间时,占用cpu很高.如果这个问题解决当然是要用新版的,不过不点大大已经说不可能了
另外,2012-06-19版只有二进制,似乎没法得到源码了?

点评

我考虑了一下,这个问题可以解决。 就是,增加一个控制位,相应地增加一个控制命令,解决这个问题。 这是个已知问题,报告此问题的人不多,所以,也就没有特别给予重视(或者说照顾)。 增加控制命令以后,  详情 回复 发表于 2016-11-4 15:17
svn co -r 301 https://github.com/chenall/grub4dos grub4dos  详情 回复 发表于 2016-11-4 15:16
回复

使用道具 举报

10#
 楼主| 发表于 2016-11-4 15:16:53 | 只看该作者
本帖最后由 红毛樱木 于 2016-11-4 15:19 编辑
2011grassll 发表于 2016-11-4 15:01
0.4.5c的2012-10-02版本起,等待timeout时间时,占用cpu很高.如果这个问题解决当然是要用新版的,不过不点大大 ...

svn  co  -r  301  https://github.com/chenall/grub4dos grub4dos


20120619源码.7z (697.47 KB, 下载次数: 7)

点评

谢谢.给的压缩包用./configure找不到stage2.c。用svn取的正确,只是在linux下和mingw32下,./configure都在检查objcopy时出错。看来我的工具链有些问题。  详情 回复 发表于 2016-11-4 16:03
回复

使用道具 举报

11#
发表于 2016-11-4 15:17:18 | 只看该作者
2011grassll 发表于 2016-11-4 15:01
0.4.5c的2012-10-02版本起,等待timeout时间时,占用cpu很高.如果这个问题解决当然是要用新版的,不过不点大大 ...

我考虑了一下,这个问题可以解决。

就是,增加一个控制位,相应地增加一个控制命令,解决这个问题。

这是个已知问题,报告此问题的人不多,所以,也就没有特别给予重视(或者说照顾)。

增加控制命令以后,默认时仍旧保持现在的状况。当执行控制命令时,恢复到旧版的状况。

如果这样处理的话,你觉得行不行?

点评

如果能解决那就太好了,也要谢谢各位大大  详情 回复 发表于 2016-11-4 15:36
回复

使用道具 举报

12#
发表于 2016-11-4 15:36:54 | 只看该作者
不点 发表于 2016-11-4 15:17
我考虑了一下,这个问题可以解决。

就是,增加一个控制位,相应地增加一个控制命令,解决这个问题。

如果能解决那就太好了,也要谢谢各位大大
回复

使用道具 举报

13#
发表于 2016-11-4 16:03:21 | 只看该作者
红毛樱木 发表于 2016-11-4 15:16
svn  co  -r  301  https://github.com/chenall/grub4dos grub4dos

谢谢.给的压缩包用./configure找不到stage2.c。用svn取的正确,只是在linux下和mingw32下,./configure都在检查objcopy时出错。看来我的工具链有些问题。
回复

使用道具 举报

14#
发表于 2016-11-4 17:29:37 | 只看该作者
我目前没有编译环境。我就说说究竟应该怎么做吧。具体的修改,让 chenall 或 yaya 去做。

我们在这里有个控制字节:

  1. . = EXT_C(main) + 0x5

  2.         /* control byte: pxe, DUCE, tune
  3.          * bit 0 = 1: disable pxe
  4.          * bit 1 = 1: disable keyboard intervention in boot process
  5.          * bit 2 = 1: disable the "unconditional command-line entrance" feature
  6.          * bit 3 = 1: disable geometry tune
  7.          * bit 4 = 1: disable startup cdrom drive look-up.
  8.          */
  9.         .byte        0
复制代码


这个控制字节在内存中的地址是 0x8205——这一点,chenall 和 yaya 都熟悉,就不解释了。

这个控制字节目前用到了 5 个位(位0 至 位4),还有 3 个位没有使用。我们这次就用位5 来控制吧。

因此,把注释改成这样:

  1. . = EXT_C(main) + 0x5

  2.         /* control byte: pxe, DUCE, tune
  3.          * bit 0 = 1: disable pxe
  4.          * bit 1 = 1: disable keyboard intervention in boot process
  5.          * bit 2 = 1: disable the "unconditional command-line entrance" feature
  6.          * bit 3 = 1: disable geometry tune
  7.          * bit 4 = 1: disable startup cdrom drive look-up.
  8.          * bit 5 = 1: enable HLT instruction for checkkey idle loop.
  9.          */
  10.         .byte        0
复制代码


注释只是让人看的,光是改注释是不起作用的。因此,还要改代码。只需把该文件中的三条注释掉的 hlt 指令恢复出来,并改成 “有条件执行” 即可。

三条被注释的 hlt 指令都是类似于这样:

  1. // hlt
复制代码


把它们都改成

  1. call   conditional_hlt
复制代码


当然要写一个 conditional_hlt 的函数,如下:

  1. conditional_hlt:
  2.         // DS should already be 0, but ...
  3.         pushw        $0
  4.         popw                %ds                // just in case DS changed by buggy BIOS
  5.         testb                $0x20, 0x8205        // Enable HLT?
  6.         jz                1f                        // No. Skip the HLT instruction.
  7.         hlt                                        // Yes. Execute the HLT instruction.
  8. 1:
  9.         ret                                        // on return, DS=0
复制代码


至于说这个函数放在哪里呢?可以考虑放在这里:


  1.         .code16

  2. hard_stop:
  3.         sti
  4.         //hlt         <------ 这条被注释的指令,要改成 “call   conditional_hlt”
  5.         jmp hard_stop
  6. 【此处插入 conditional_hlt 函数的代码】
  7.         .code32
复制代码


注意,一定要放在 .code16 编译指令的下面,不可以放在 .code32 编译指令的下面;因为这是 16 位的实模式代码。

好了,代码就修改完成了。

下面说说用户如何使用。

在上述修改完成后,重新编译,发布新版。用户下载新版后,参照以下说明来使用这一功能。

用户在任何时候,只要把内存地址 0x8205 处的一个字节 "OR" 上 0x20, 就达到了 “启用 HLT 指令” 的目的了,也就等于说是恢复旧版的 “cpu 空闲等待” 的功能了。

具体如何使用,可参考 chenall 的 calc 命令的说明。这里的 “OR” 就是逻辑运算符的一种,另外一种逻辑运算符是 “AND”。可以在百度上找到这些资料。

很抱歉,我此刻记不得 calc 命令的用法了。请 chenall 或其它朋友给出具体的指令。
回复

使用道具 举报

15#
发表于 2016-11-4 19:04:40 | 只看该作者
等待timeout时间时,占用cpu很高

以前看到过反馈。
timeout使用在什么地方?应当是在启动菜单中吧。
实机启动,执行启动菜单是独一任务,cpu占用高也不会影响什么。
虚拟机启动,cpu占用高则有可能影响实机程序的运行速度。不过3-5秒就忍受不了?

点评

奇葩得很,reboot.pro 上也有人长时间工作在 grub4dos 命令行下(大概也在虚拟机下),他也需要这个功能。好像是说,要学习、研究 grub4dos 的命令。没办法,这个补丁还真得打上,反正也不影响我们普通人的正常使用  详情 回复 发表于 2016-11-4 19:17
回复

使用道具 举报

16#
发表于 2016-11-4 19:17:09 | 只看该作者
2011yaya2007777 发表于 2016-11-4 19:04
以前看到过反馈。
timeout使用在什么地方?应当是在启动菜单中吧。
实机启动,执行启动菜单是独一任务 ...


奇葩得很,reboot.pro 上也有人长时间工作在 grub4dos 命令行下(大概也在虚拟机下),他也需要这个功能。好像是说,要在命令行下学习、研究 grub4dos 的命令。没办法,这个补丁还真得打上,反正也不影响我们普通人的正常使用。

回复

使用道具 举报

17#
发表于 2016-11-4 19:22:00 | 只看该作者
好吧。
不过长时间工作在 grub4dos 命令行下(大概也在虚拟机下),他不可能不停地、重复地、循环地执行timeout命令。

点评

等待键盘输入的时候,其实就是在调用 checkkey 或 getkey,而 sti 和 hlt 指令就在 checkkey 和 getkey 当中。  详情 回复 发表于 2016-11-4 19:33
回复

使用道具 举报

18#
发表于 2016-11-4 19:33:45 | 只看该作者
2011yaya2007777 发表于 2016-11-4 19:22
好吧。
不过长时间工作在 grub4dos 命令行下(大概也在虚拟机下),他不可能不停地、重复地、循环地执行ti ...

等待键盘输入的时候,其实就是在调用 checkkey 或 getkey,而 sti 和 hlt 指令就在 checkkey 和 getkey 当中。
回复

使用道具 举报

19#
发表于 2016-11-4 20:00:37 来自手机 | 只看该作者
明白了
回复

使用道具 举报

20#
发表于 2016-11-5 11:01:15 | 只看该作者
本帖最后由 2011yaya2007777 于 2016-11-5 12:01 编辑

已经编译上传。还请 chenall 帮忙发布一下。

grub4dos-0.4.6a-2016-11-05.7z

283.68 KB, 下载次数: 7, 下载积分: 无忧币 -2

回复

使用道具 举报

21#
发表于 2016-11-5 13:50:04 | 只看该作者
用yaya的编译包,在虚拟机里试了下,read 0x8205的值是0xff00e000,
在menu.lst中,timeout前加: write 0x8205 0xff00e020,确实不占CPU了
不知道0x8205 0xff00e020是不是所有机器都通用的?

点评

read和write好像是读写 4字节。建议你学习一下 calc 命令,只写入该写的字节,不要写入不该写的字节。  详情 回复 发表于 2016-11-5 14:28
回复

使用道具 举报

22#
发表于 2016-11-5 14:28:10 | 只看该作者
2011grassll 发表于 2016-11-5 13:50
用yaya的编译包,在虚拟机里试了下,read 0x8205的值是0xff00e000,
在menu.lst中,timeout前加: write 0x820 ...

read和write好像是读写 4字节。建议你学习一下 calc 命令,只写入该写的字节,不要写入不该写的字节。

点评

学习了一下calc,似乎也是4字节,用calc确实更好,现在这么用: calc *0x8205=*0x8205|0x20  详情 回复 发表于 2016-11-11 08:46
回复

使用道具 举报

23#
发表于 2016-11-9 14:07:38 | 只看该作者
目前对github的封锁好像越来越厉害了。。。

点评

时好时坏的状态。  详情 回复 发表于 2016-11-9 17:09
回复

使用道具 举报

24#
 楼主| 发表于 2016-11-9 17:09:39 | 只看该作者
chenall 发表于 2016-11-9 14:07
目前对github的封锁好像越来越厉害了。。。

时好时坏的状态。
回复

使用道具 举报

25#
发表于 2016-11-11 08:46:52 | 只看该作者
不点 发表于 2016-11-5 14:28
read和write好像是读写 4字节。建议你学习一下 calc 命令,只写入该写的字节,不要写入不该写的字节。

学习了一下calc,似乎也是4字节,用calc确实更好,现在这么用:
calc *0x8205=*0x8205|0x20
回复

使用道具 举报

26#
发表于 2016-11-11 09:43:24 | 只看该作者
想问一下calc *0x8205=*0x8205|0x20是不是在总菜单中用一次以后永远有效?如果这样是不是可以放默认菜单中?

点评

控制字节一旦设定,永久有效,直到用 chainloader 或 kernel 加载另一个 grldr 或 grub.exe 之前。 chainloader 或 kernel 加载 grldr 或 grub.exe 后,控制字节就成为默认值(=0)了。 但 configfile 命令不  详情 回复 发表于 2016-11-11 10:04
回复

使用道具 举报

27#
发表于 2016-11-11 10:04:47 | 只看该作者
hhh333 发表于 2016-11-11 09:43
想问一下calc *0x8205=*0x8205|0x20是不是在总菜单中用一次以后永远有效?如果这样是不是可以放默认菜单中 ...

控制字节一旦设定,永久有效,直到用 chainloader 或 kernel 加载另一个 grldr 或 grub.exe 之前。

chainloader 或 kernel 加载 grldr 或 grub.exe 后,控制字节就成为默认值(=0)了。

但 configfile 命令不改变控制字节。使用 configfile 加载新的 menu,那么,控制字节仍保持先前的值,不会被强制修改成默认值。

回复

使用道具 举报

28#
发表于 2016-11-16 12:58:04 | 只看该作者
很好!很强大!












重庆民间道士道法驱邪,收徒弟
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-13 17:10

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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