无忧启动论坛

标题: configfile (md)4+8不能立刻返回主菜单 [打印本页]

作者: hotdll    时间: 2011-9-29 14:12
标题: configfile (md)4+8不能立刻返回主菜单
执行 pause --wait=5 &&  configfile (md)4+8

结果 configfile (md)4+8
不会被执行

查了帮助和grub4dos文档,都没这个方面的提示。

经过测试,pause返回是 0 也就是真

用别的命令配合 configfile (md)4+8 只要是连接付 &&或者|| 都不会执行。

问题已经解决:
原因是gfxmenu /message,我的主菜单用它做的。

直接用fontfile (ud)/fonts.gz 去掉gfxmenu /message 解决。

不知道是不是BUG。

[ 本帖最后由 hotdll 于 2011-9-29 19:51 编辑 ]
作者: 不点    时间: 2011-9-29 14:22
你看看源代码吧。当 pause 返回 “假” 的时候,&& 后的 configfile 命令就不执行了。

如果您确认源代码有错误,你可以给 chenall 说一下。

你希望 pause 怎么样操作呢?是不是希望,在等待 5 秒期间,敲入按键时返回 “真”,不敲入按键就返回 “假” 呢?
作者: tingyue-wu    时间: 2011-9-29 16:21
标题: 回复 #1 hotdll 的帖子
configfile (md)4+8
写错了吧
应该是
configfile (md)4+8
作者: hotdll    时间: 2011-9-29 16:57
原帖由 tingyue-wu 于 2011-9-29 16:21 发表
configfile (md)4+8
写错了吧
应该是
configfile (md)4+8


没有错啊,是英文空格。
单独执行没问题。
作者: sratlf    时间: 2011-9-29 17:02
标题: 回复 #4 hotdll 的帖子
我测试没问题啊  pause --wait=5 && configfile (md)4+8   

5秒内敲回车 或者 等5秒过后都会执行
作者: hotdll    时间: 2011-9-29 17:02
原帖由 不点 于 2011-9-29 14:22 发表
你看看源代码吧。当 pause 返回 “假” 的时候,&& 后的 configfile 命令就不执行了。

如果您确认源代码有错误,你可以给 chenall 说一下。

你希望 pause 怎么样操作呢?是不是希望,在等待 5 秒期间,敲 ...


不点大大,测试的结果与pause无关。

应该是 && 或者|| 不能和 configfile (md)4+8 一起使用。

例如echo this is test && configfile (md)4+8 也同样只会执行前面的命令。

应该是个BUG?
作者: sratlf    时间: 2011-9-29 17:12
标题: 回复 #6 hotdll 的帖子
最新版grub测试没问题  可以得到执行  你用的什么时候的grub
作者: 不点    时间: 2011-9-29 17:14
楼上你们两人同时发帖。

我测试没问题啊  pause --wait=5 && configfile (md)4+8   

5秒内敲回车 或者 等5秒过后都会执行


有此,就证明错误在 hotdll。完毕。
作者: 不点    时间: 2011-9-29 17:18
没有错啊,是英文空格。
单独执行没问题。


光 “空格是英文的”,这是 远远不够 的。你的 “括号” 和 “加号” 等,也必须是英文的,这没得可以 “商量” 的。
作者: hotdll    时间: 2011-9-29 18:15
原帖由 不点 于 2011-9-29 17:18 发表


光 “空格是英文的”,这是 远远不够 的。你的 “括号” 和 “加号” 等,也必须是英文的,这没得可以 “商量” 的。

不点大大,我确定全部是英文的。因为我在命令行模式下直接输入 configfile (md)4+8是立刻返回到主菜单了。

我的GRUB4DOS版本是您发布的9.16

我刚写了个批处理,发现批处理里面好像也是不立即执行,需要等到程序执行完毕了才返回。


  1. !BATEX
  2. debug off
  3. #判断grubd4os版本是否支持
  4. checkrange 20110721:-1 read 0x8278 || clear && echo Grub4Dos Version Too Old. && echo You should use grub4dos-0.4.5b-2011-07-21 or above from && pause http://code.google.com/p/grub4dos-chenall/downloads/list && exit
  5. :INPUT
  6. set wincd=
  7. set /p /u wincd=请输入文件名:
  8. if not "%wincd%"=="" goto FISO
  9. pause --wait=5 没有发现任何输入5秒后请重新输入正确的文件名!
  10. goto INPUT
  11. exit
  12. :FISO
  13. find --set-root /%wincd% || goto NISO
  14. call SRSF6N FIRA
  15. map /%wincd% (0xff)
  16. map --hook
  17. chainloader (0xff)
  18. exit
  19. :NISO
  20. pause --wait=5 没有找到该文件请检查U盘根目录是否存在该文件!
  21. configfile (md)4+8
  22. exit

复制代码


如果输入错误的文件名,会执行到configfile (md)4+8 这句,但是不会立刻返回到主菜单,而是离开批处理。和用||以及&&连接符的结果一样。
但是把MENU里title下的命令执行完毕了,才会返回菜单,但是这个时候已经出现错误提示了,必须按任意键才能返回主菜单。
menu

  1. title 【 2 】启动WIN系统盘ISO安装系统
  2. echo - 安装说明:
  3. echo - 第一次执行该菜单应选择光盘启动。
  4. echo - 重启后再执行该菜单不做任何操作。
  5. echo - 请将系统盘ISO文件放在U盘根目录。
  6. echo - 请将文件名大写,如:WIN$.ISO
  7. echo - 请输入ISO文件名,如:WIN$.ISO
  8. checkrange 0x80 read 0x8280 && map (hd0) (hd1)
  9. checkrange 0x80 read 0x8280 && map (hd1) (hd0)
  10. FINDISO
  11. boot
复制代码

作者: hotdll    时间: 2011-9-29 18:24
刚去下载C大最新的9.28的版本也是如此?
作者: hotdll    时间: 2011-9-29 18:27
原帖由 sratlf 于 2011-9-29 17:12 发表
最新版grub测试没问题  可以得到执行  你用的什么时候的grub

你这样测试

  1. pause --wait=5 && configfile (md)4+8 && echo test1
  2. echo test2
复制代码


你看看结果

我要的是直接回主菜单,不要执行echo test2
作者: 不点    时间: 2011-9-29 18:40
你怎么解释,sratlf 执行成功了?

我弄不懂批处理,还是让 chenall 来说吧。
作者: 不点    时间: 2011-9-29 18:44
对了,configfile 是一条特殊命令,似乎程序确实对它进行了特殊处理。需要看看源代码。
作者: hotdll    时间: 2011-9-29 19:07
原帖由 不点 于 2011-9-29 18:40 发表
你怎么解释,sratlf 执行成功了?

我弄不懂批处理,还是让 chenall 来说吧。


不点大大您看楼上我发的哪个测试,可能是执行了,但是并没有立刻返回。
执行玩sratlf的哪个语句后没有立刻返回主菜单而是还继续执行下面的命令,如果是commandline输入的话,那么还是停留在commandline下的。
作者: 幸运的草    时间: 2011-9-29 19:08
标题: 回复 #12 hotdll 的帖子
我测试正常,首先我用你修改5.19NATIVE版的那个FB,在内置菜单中添加一菜单项。
title [3] test
configfile (ud)/ss.lst该菜单项在GRLDR内置菜单中。
然后在(ud)/建立一菜单文件,ss.lst,内容为:
pause --wait=5 && configfile (md)4+8
echo this is no configfile
启动后出现主菜单,选菜单3,调用ss.lst,出现倒计时5秒,完毕后返回主菜单。
以主测试在qemu中测试。grldr为9月18日版,即你的FB原版不动。
作者: 幸运的草    时间: 2011-9-29 19:11
注,以上测试是用简易启动测试器,直接加载FB文件在QEMU中测试的结果。
作者: hotdll    时间: 2011-9-29 19:32
原帖由 幸运的草 于 2011-9-29 19:11 发表
注,以上测试是用简易启动测试器,直接加载FB文件在QEMU中测试的结果。

我也是用的简易启动测试器啊。。。。
不是吧。同一个命令你测试的和我测试的结果相差这么大?

太邪门了。我发现我总是遇到这种邪门的问题,并且一弄就是一个下午。
作者: hotdll    时间: 2011-9-29 19:33
原帖由 hotdll 于 2011-9-29 19:32 发表

我也是用的简易启动测试器啊。。。。
不是吧。同一个命令你测试的和我测试的结果相差这么大?

太邪门了。我发现我总是遇到这种邪门的问题,并且一弄就是一个下午。


难道是因为我的菜单是内置菜单的原因?
作者: chenall    时间: 2011-9-29 19:37
有可能是BUG,,,不过接下来几天国庆比较忙,我没空去查了,改天再查一下。

目前你暂时尽量免避这样使用,可以换一种方式。
比如:
pause && goto :main_menu

:main_menu
configfile (md)4+8
作者: hotdll    时间: 2011-9-29 19:49
原帖由 chenall 于 2011-9-29 19:37 发表
有可能是BUG,,,不过接下来几天国庆比较忙,我没空去查了,改天再查一下。

目前你暂时尽量免避这样使用,可以换一种方式。
比如:
pause && goto :main_menu

:main_menu
configfile (md)4+8


晕!
找到原因了
我加载了gfxmenu /message的原因。
这个命令不支持gfxmenu /message返回。
作者: 幸运的草    时间: 2011-9-29 21:23
标题: 回复 #21 hotdll 的帖子
经测试,如果在内置菜单中,加载MESSAGE,执行该语句会出现你说的结果。但在外置菜单中,加载MESSAGE后,执行该语句,正常。
 是BUG?也不是BUG。
因为内置菜单=(md)4+8。
作者: sratlf    时间: 2011-9-29 22:13
原帖由 hotdll 于 2011-9-29 18:27 发表

你这样测试

pause --wait=5 && configfile (md)4+8 && echo test1
echo test2


你看看结果

我要的是直接回主菜单,不要执行echo test2



和幸运的草结果一样  无论怎样都是返回主菜单  没有出现你的状况  用的0928版
作者: 不点    时间: 2011-9-29 23:03
hotdll 可能是在菜单初始化命令组中使用 configfile。也就是说,在所有的 title 之前。

在那个时候,通常不应该使用 configfile 命令。因为 configfile 有特殊的用途,它是一个兼容手段。

此时遇到 configfile 命令,很可能暂时 “记住” 它,而等到其他初始化命令都执行完了之后,才真正执行它。

也就是说,有一个 “延迟执行” 的效果。

请避免这样使用。

如果确实想使用,请在 title 之后使用。

-------------------

请仔细想想,究竟是否有必要在 title 之前就使用带有条件的 configfile 命令?

想达到什么目的?

如果又与 gfxmenu 一起使用,则又意图达到什么效果?

你想让 gfxmenu 显示哪个菜单?
作者: hotdll    时间: 2011-9-30 08:07
标题: 回复 #24 不点 的帖子
1、title 之前没有使用带有条件的 configfile 命令
2、一级菜单,没有二级菜单
3、是想用户交互的时候输入参数错误导致批处理或者菜单执行错误的时候,给用户一个提示,等待5秒后返回到主菜单。
4、之所以这么做是因为我觉得一个健壮的程序是需要有错误返回机制的(java这点做的很好),一个好的利用程序做的批处理或者菜单也应该是健壮的。尽可能的去友好的提示错误的原因,给客户简单的提示和解决办法。并适当的给一个重新来过的机会。

[ 本帖最后由 hotdll 于 2011-9-30 09:50 编辑 ]
作者: mygamexxx    时间: 2011-9-30 08:34
标题: 回复 #24 不点 的帖子
原来是这样啊,怪不得在命令行状态下,configfile 无title的菜单文件总是返回到命令行,然后输入boot也没用,只有按Esc键才会执行,我总以为是菜单文件哪里有错误;以前configfile 使用有title的菜单总是直接执行了。

[ 本帖最后由 mygamexxx 于 2011-9-30 08:37 编辑 ]
作者: 幸运的草    时间: 2011-9-30 09:00
标题: 回复 #24 不点 的帖子
同一条这样的语句,如果是在内置菜单中,且加载message的情况下,即使放在title后执行也是如此。
而在外置菜单中却没问题。
命令状态下没问题。
是不是BUG,是不是特殊情况,我不知,但结果如此。
作者: chenall    时间: 2011-10-1 08:37
谁上传一个可以重现问题的测试文件,我没有用过GFXMENU.
作者: hotdll    时间: 2011-10-1 10:02
原帖由 chenall 于 2011-10-1 08:37 发表
谁上传一个可以重现问题的测试文件,我没有用过GFXMENU.

以前的我没备份,我今天抽空给你重写一个。
作者: 不点    时间: 2011-10-1 10:28
不用测试,代码本来就是如此。

如果 configfile 位于 “初始化命令组” 中,则 configfile 延迟执行,直到全部初始化命令都执行完了,才执行 configfile 的动作(跳转到 restart_config 处)。

此时如果插入 gfxmenu 命令,则等到 gfxmenu 执行完了才执行 configfile 命令。

解决办法:不要使用 gfxmenu 命令。

我前面已经提问过了,没有得到 hotdll 的答复:gfxmenu 与 configfile 一起使用,你希望 gfxmenu 显示哪个菜单?

是显示当前菜单呢?还是显示 configfile 之后的菜单?

如果意图显示当前菜单,你就不要执行 configfile 命令。

如果意图显示configfile 指定的菜单,你就不要执行 gfxmenu 命令,而等到进入 configfile 的新菜单以后再执行 gfxmenu 命令。

问题根本不需要解决。

之所以要延迟 configfile 的执行,也是有原因的,这个逻辑也尽量不要随便改动。我印象中,如果不这样,则无法应付那些导致无限循环的 configfile 命令。请 chenall 斟酌吧。不是说绝对不能改,而是说,要小心一点。改动之后有可能出现一系列的问题。

有关 configfile 的执行,涉及到函数、变量以及 goto 标号,逻辑调节很精细、很复杂,弄不好顾此失彼,就要带来潜在问题了。因此,提醒到此,不要轻易更动。

[ 本帖最后由 不点 于 2011-10-1 10:35 编辑 ]
作者: chenall    时间: 2011-10-1 10:50
标题: 回复 #30 不点 的帖子
原来始此,那就不用试了,,老实说我从来没有用过GFXMENU.
作者: zxw    时间: 2011-10-1 13:50
将楼主的菜单简化了一下:

timeout 3
default 0
gfxmenu /message

title test1
configfile (md)4+8
commandline

title test2
configfile /menu.usr
commandline

这个菜单的两个菜单项均进入命令行。按不点的说法,因为configfile 有延迟。
但将gfxmenu语句删除,却没有进入命令行。此时说明configfile 却没有延迟。

综上,有gfxmenu时,configfile 才有延迟现象。

[ 本帖最后由 zxw 于 2011-10-1 14:31 编辑 ]
作者: 不点    时间: 2011-10-1 14:10
标题: 回复 #32 zxw 的帖子
你搞错了,只有当 configfile 位于 “初始化命令组” 之中的时候,它才有延迟执行的效果。延迟到其他初始化命令都执行完了之后再执行。

位于 title 之后的 configfile 命令,就和普通的 configfile 命令一样了,没有 “延迟执行” 的效果。

你的 configfile 命令 拼写错误
作者: 幸运的草    时间: 2011-10-1 14:25
标题: 回复 #33 不点 的帖子
经测试:以下菜单为GRLDR内置菜单。
timeout 3
default 0
gfxmenu /message

title test1
configfile /ss.lst

title test2
pause --wait=5 && configfile /ss.lst
commandline
而外置ss.lst中的内容
gfxmenu /message
pause --wait=5 && configfile /menu.usr
commandline

执行TEST1调用外置菜单SS。外置菜单中的语句不会出现延迟现象,5秒钟后返回主菜单。
执行TEST2即执行内置菜单,则出现延迟,5秒钟后进入命令行。
如果把主菜单中的gfxmenu /message这一句屏蔽,则一切正常。

结果:内、外菜单同一语句有别,且内与gfxmenu有关,外则无此问题。结果表明在TITLE后也是这种现象,与你的解释不符。
本想把测试标本上传,但传不上来。9月18日的GRLDR.在QEMU中测试。

[ 本帖最后由 幸运的草 于 2011-10-1 14:33 编辑 ]
作者: zxw    时间: 2011-10-1 14:45
标题: 回复 #33 不点 的帖子
实际测试并没有写错。

timeout 3
default 0
if not exist /message find --set-root /message
gfxmenu /message

title 1. test1
configfile (md)4+8
commandline

title 2. test2
if not exist /menu.usr find --set-root /menu.usr
configfile /menu.usr
commandline

其中menu.usr菜单外置。
这个菜单的两个菜单项均进入命令行。此时再按ESC键却进入了configfile的菜单。
但将gfxmenu语句删除,却没有进入命令行

综上,有gfxmenu时,title中的configfile 有延迟现象?

[ 本帖最后由 zxw 于 2011-10-1 15:08 编辑 ]
作者: 不点    时间: 2011-10-1 14:57
标题: 回复 #34 幸运的草 的帖子
实际上可能也正是你说的这种情况。内置菜单有延迟,外置没有延迟。

主要是防止由菜单的胡乱 configfile 而导致的无限循环的发生。

外置菜单似乎不容易引起无限循环,因此,可能正常对待了。

而内置菜单不是开玩笑的,它很关键。所以,对内置菜单采取了保护措施,延迟了 configfile 的执行。

其中是否存在 bug,我也不敢肯定。

(顺便说,在你的 ss.lst 中,gfxmenu 语句似乎应该放在初始化命令组的末尾。)

另外,我发现 configfile 命令也被 chenall 更改过,不知是否有影响。

你也没有贴出 /menu.usr 的内容。
作者: 不点    时间: 2011-10-1 15:05
标题: 回复 #35 zxw 的帖子
我倒是怀疑,gfxmenu 命令究竟能否与 configfile 共存?

换句话说,在 gfxmenu 的情况下,是否兼容 configfile 命令?

如果这是个 bug,请确定何年何月何日引入了此 bug?

--------

注意:在 gfxmenu 下,它不是一个正常的 grub4dos 环境。

gfxmenu 与 grub4dos 是 “两张皮”,因此,并非 grub4dos 的命令都能在 gfxmenu 下正常工作。

举例来说,password 之类好像就不行。

[ 本帖最后由 不点 于 2011-10-1 15:10 编辑 ]
作者: zxw    时间: 2011-10-1 15:11
标题: 回复 #37 不点 的帖子
在#35号的帖子又补充了一句。
这个菜单的两个菜单项均进入命令行。此时再按ESC键却进入了configfile的菜单。
  1. title test1
  2. configfile (md)4+8
  3. commandline
复制代码

按ESC键后回到了内置菜单。
  1. title test2
  2. configfile /menu.usr
  3. commandline
复制代码

按ESC键后这个菜单项进入了menu.usr菜单。
作者: zxw    时间: 2011-10-1 15:16
在测试批处理的某个时候,configfile 命令确实被 chenall 更改过。

gfxmenu毕竟是强行改造给予grub4dos 的一个功能,很多问题都与gfxmenu有关。gfxmenu不用也罢。

[ 本帖最后由 zxw 于 2011-10-1 15:30 编辑 ]
作者: 不点    时间: 2011-10-1 15:20
参见 37 楼后一段的说明。怀疑 gfxmenu 之下无法正常使用 configfile 命令。请全面测试,看看 0.4.4 的版本是否也存在类似问题。
作者: 幸运的草    时间: 2011-10-1 15:24
标题: 回复 #37 不点 的帖子
和ZXW进行了一番讨论,原SS.LST中的内容受gfxmenu命令的影响,执行无延迟,但这个测试好像不严格。
又把原来内置菜单中的内容完全放入外置SS.LST中,发现同内置菜单一样,出出现有延迟。
menu.usr是为测试而写的一个虚拟的文件名,实际并无真实的menu.usr。
测试结论是:configfile的延迟与gfxmenu命令有关。这样的延迟可能有好处,正如不点大所说。

不点大的回复好快。

[ 本帖最后由 幸运的草 于 2011-10-1 15:29 编辑 ]
作者: 不点    时间: 2011-10-1 15:31
不是延迟不延迟的问题,而是说,究竟 gfxmenu 与 configfile 命令能否 “兼容” 的问题。

configfile 要 “跑” 去执行另外一个 menu,而 gfxmenu 让不让它 “去” 的问题。

请测试 0.4.4,看看是否存在同样问题。

我一向对于 bug 比较看重,也比较敏感。

凡是有可能表现出 bug 的,我都会高度警惕。
作者: zxw    时间: 2011-10-1 15:39
标题: 回复 #40 不点 的帖子
测试了一下0.4.4 的版本,2009-12-03的版本。
问题同38#贴。


此时按ESC,才会回到主菜单。

[ 本帖最后由 zxw 于 2011-10-1 15:47 编辑 ]
作者: 不点    时间: 2011-10-1 15:45
如果可能的话,也测试一下 2009-03-31 的版本。

如果都是一样的,那说明,这是老问题了。

剩下的就要看,我们究竟有没有可能去解决它了。

我现在就准备去研究一下相关的源代码。
作者: zxw    时间: 2011-10-1 15:49
2009-03-31 的版本无处下载了。
作者: chenall    时间: 2011-10-1 15:59
早期的版本这里还可以下..

http://download.gna.org/grub4dos/
作者: zxw    时间: 2011-10-1 16:16
测试了一下2009-03-29版本,也是一样的问题。
作者: 不点    时间: 2011-10-1 16:52
新的测试版本刚刚上载到时空论坛,请测试。

将 configfile 和 gfxmenu 的优先级进行了调整。

当两者同时存在时,configfile 优先执行。

由于改动较大,属于 “部分不兼容” 改动,因此,请全面测试,确认没问题之后再采用。
作者: zxw    时间: 2011-10-1 17:16
gfxmenu有个特性,gfxmenu执行成功后,后面的语句不会执行。当菜单执行出错或按ESC退出gfxmenu后才会执行。

为防止出错后菜单乱码,目前坛内很多菜单,出现这样类似的语句:
gfxmenu /message
configfile (md)4+8
===========================
测试版将 configfile 和 gfxmenu 的优先级进行了调整,这个特性在这种菜单就“消失”了。测试版如再这样使用,呵,当然就形成无限循环了。
其它,包括本帖讨论的问题等暂时测试正常。

[ 本帖最后由 zxw 于 2011-10-1 17:30 编辑 ]
作者: shan    时间: 2011-10-1 17:21
仔细地看完了不点大大的分析,透亮了许多。
作者: 不点    时间: 2011-10-1 17:26
>>> gfxmenu有个特性,gfxmenu执行成功后,后面的语句不会执行。当菜单执行出错或按ESC退出gfxmenu后才会执行。

这是没办法的事情。本来就是 “两张皮”。

>>> 为防止出错后菜单乱码,目前坛内很多菜单,出现这样类似的语句:
>>> gfxmenu /message
>>> configfile (md)4+8

现在的新版本,不可以这样用了,因为 configfile 将优先于 gfxmenu 的执行。

更新:

最新的版本(17点30分以后的编译)保持兼容性,以往的菜单无须改变。

[ 本帖最后由 不点 于 2011-10-1 18:22 编辑 ]
作者: 不点    时间: 2011-10-1 17:43
在下午 17 点 30 分以后,又编译了一个版本。

这个版本不调整优先级,只解决冲突。这样可以保持兼容性。

试试看,估计这次没问题了。
作者: zxw    时间: 2011-10-1 17:50
标题: 回复 #52 不点 的帖子
呵,动作真快。包括0PE及一些批处理测试正常。

[ 本帖最后由 zxw 于 2011-10-1 17:54 编辑 ]
作者: 不点    时间: 2011-10-1 18:00
大家最好尽快测试,都来报告使用情况,好让 chenall 能够决定更新到 svn 上。
作者: 幸运的草    时间: 2011-10-1 18:09
测试正常,既不死循环也不冲突。

[ 本帖最后由 幸运的草 于 2011-10-1 18:12 编辑 ]
作者: zxw    时间: 2011-10-1 18:40
借此帖向不点大建议:
1.configfile (rd)+1不要改变启动设备。chenall已将configfile (md)*+*这样处置了。
2.增强目录是否存在的检测功能。
  目前,检测目录是否存在的方法大致有二:
(1)ls /test/                     缺点:目录下的文件太多时,一是影响显示,当然可以clear,但觉得有点不爽。
(2)cat --length=0 /test    缺点:分区为ntfs格式时就失灵了。
  故建议:给ls 增加一个参数,不显示目录下的文件。目录存在就返回真,否则返回假。
作者: 不点    时间: 2011-10-1 18:55
这些就让 chenall 做吧,我都不太熟悉。chenall 一直就在做这方面的工作。
作者: hotdll    时间: 2011-10-1 21:09
今天送我妈回家,本来说好上传代码的。想不到不点大大已经都解决了。并发布了新版本。

对我今天没兑现承诺表示歉意。

同时为不点的高效率喝彩。我就不上传我那不堪入目的代码了。
作者: 不点    时间: 2011-10-1 21:20
那其实是你们几位解决的。你们的劳动量比我还大。我由于身体差,只不过动动嘴皮子 “瞎指挥” 一通罢了。

无论如何,解决了就是好事。当然感谢你这个 “始作俑者” 了。没有你是不行的。
作者: hotdll    时间: 2011-10-2 12:00
原帖由 不点 于 2011-10-1 21:20 发表
那其实是你们几位解决的。你们的劳动量比我还大。我由于身体差,只不过动动嘴皮子 “瞎指挥” 一通罢了。

无论如何,解决了就是好事。当然感谢你这个 “始作俑者” 了。没有你是不行的。

不点大大,读懂 GRUB4DOS 的源代码需要哪些知识?我打算为grub4dos做点贡献。就当做是业余爱好。
作者: 不点    时间: 2011-10-2 12:40
编程语言:需要熟悉 C 语言,熟悉汇编语言。

底层技术:需要了解 BIOS 相关知识(中断调用,BIOS 数据区,等等)。需要懂得磁盘分区结构知识。

只要你掌握了这些,开发 grub4dos 完全顺手,不存在困难。
作者: hotdll    时间: 2011-10-2 13:00
原帖由 不点 于 2011-10-2 12:40 发表
编程语言:需要熟悉 C 语言,熟悉汇编语言。

底层技术:需要了解 BIOS 相关知识(中断调用,BIOS 数据区,等等)。需要懂得磁盘分区结构知识。

只要你掌握了这些,开发 grub4dos 完全顺手,不存在困难。

汇编在学习中 BIOS数据区哪里有资料的?磁盘分区结构这个好像零零碎碎的学了一些。哪里有具体的资料?

我曾弄了一段时间的51汇编,汇编我觉得挺有意思,非常灵活,完全按照自己的意思。
作者: chenall    时间: 2011-10-2 15:27
标题: 回复 #62 hotdll 的帖子
善用Google,基本我学习的资料都是从Google里面找出来的,基本的东西自己学习一下.

其它的东西从Google找就行了.

其实想加入GRUB4DOS开发是很简单的,熟悉一下C语言就可以开工了.

练手过程.(编译+测试环境是必须的)

首先你要有想去实现的功能,并且这个功能需要在你已知的知识中觉得有能力实现的.

刚开始可以先尝试一些比较简单的,慢慢了解,然后再接触复杂的东西.

然后要怎么样去实现.

尝试修改源码一步一步去实现.

我最早修改的源码是builtins.c(基本上GRUB4DOS的大部份功能都在这个中实现)

不能调用C语言的函数库,只能使用GRUB4DOS已经提供的,如果没有提供则需要自己编写实现.

碰到一个函数不了解它的用法,可以参考find stage2/*.c里面的相关调用的方法.基本上就了解了.
作者: 不点    时间: 2011-10-2 16:44
我在 61 楼所说的是开发 grub4dos 所需要的最高标准。不是最低标准。

最低标准,正如 chenall 所说,懂 C 语言就够了。

其他东西如果不懂,可以随便在 google 上搜,了解一些知识也就可以了。不懂也没关系。
作者: lihuai617    时间: 2011-10-2 18:59
哈哈,我今天才看到这个,我自作聪明,把4+8改的乱七八糟的,现在又改出来了
作者: hotdll    时间: 2011-10-2 20:13
标题: 回复 #63 chenall 的帖子 #64 不点的帖子
谢谢两位老大
C和汇编我都略懂一些,从明天开始我去读源代码,等我想到想要实现什么功能的时候就开帖讨论。




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