无忧启动论坛

 找回密码
 注册
搜索
最纯净的「微PE装机优盘」UEPON大师作品系统gho:最纯净好用系统下载站数据恢复、数据保护、视频编辑
Win To Go 极致利器(IXUNCIS固态U盘)无忧启动网成立20周年!广告联系 QQ:184822951 微信:wuyouceo
楼主: zhaohj

GRUB4DOS更新建议、bug反馈专帖

    [复制链接]
发表于 2010-11-29 14:33:56 | 显示全部楼层
原帖由 zhaohj 于 2010-11-29 08:27 发表
11-27版本grldr测试,115#问题依旧存在



那就不是这个原因了。记得之前的0PE也是出现这样的问题。后面用defrag整一下就好了。
回复

使用道具 举报

 楼主| 发表于 2010-11-29 15:02:05 | 显示全部楼层
那为何在文件中最后写入一行就可以了呢?如:
echo -n ############## >> (fd1)/TXTSETUP.OEM
回复

使用道具 举报

发表于 2010-11-29 15:27:45 | 显示全部楼层
原帖由 zhaohj 于 2010-11-29 15:02 发表
那为何在文件中最后写入一行就可以了呢?如:
echo -n ############## >> (fd1)/TXTSETUP.OEM


不清楚,就像以前一样,直接写入启动失败,复制一下删除再改名就可以了。

这个问题我目前也没有办法。
回复

使用道具 举报

发表于 2010-11-29 15:39:18 | 显示全部楼层
是否文件格式有特殊要求?
在文件尾写入不同字符看看有什么变化,比如只写一个换行,或只写1、2、3...个#试试
echo -n >> (fd1)/TXTSETUP.OEM

[ 本帖最后由 tuxw 于 2010-11-29 15:40 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2010-11-29 16:30:22 | 显示全部楼层
我用cat --hex查看,对比DOS下生存的文件与grldr下生存的文件,没发现有差别。同样内容的文件,grldr下生存的txtsetup.oem就出错。
只要最后一行写入没有回车换行就行。
回复

使用道具 举报

发表于 2010-11-29 16:46:54 | 显示全部楼层
dos 下先将 txtsetup.oem 做好,保证它可正常使用

1.grldr 再用 fat 复制一份,看看是否正常

2. 先建一个大小跟正常 txtsetup.oem相同的文件,内容清空,分别用dd命令和 >> 复制,看生成的文件是否正常

慢慢确定问题在哪,如果这些方法都不正常,那就是这个文件要求尾部不能有空行吧

[ 本帖最后由 tuxw 于 2010-11-29 16:49 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2010-11-29 17:05:39 | 显示全部楼层
一楼的TEST6中,makeoem.lst及makeinf.lst最后都用echo -n写入,你可以用虚拟机测试一下分别启动一个PE
回复

使用道具 举报

发表于 2010-12-6 20:42:54 | 显示全部楼层
12-06 又出现了引号匹配问题,11-30 正常


这个是11-30的
1.png

下面是12-06的
2.png
跟以前一样,命令行下正常,批处理不正常

[ 本帖最后由 tuxw 于 2010-12-6 20:56 编辑 ]
回复

使用道具 举报

发表于 2010-12-6 21:29:31 | 显示全部楼层
原帖由 tuxw 于 2010-12-6 20:42 发表
12-06 又出现了引号匹配问题,11-30 正常


这个是11-30的
107150

下面是12-06的
107151
跟以前一样,命令行下正常,批处理不正常


我试了一下好像是正常的啊,之前是SKIP_TO的BUG,已经修正整合到源码中了。

麻烦你重新下载测试一下,注意一下日期是否正确。

否则可能是因为我添加参数支持时引发的BUG。
回复

使用道具 举报

发表于 2010-12-6 21:43:42 | 显示全部楼层
确认是 12-06 引起的,不一定是引号的问题

Test-2010-12-06-21-41-47.png


整数分区的批处理也不能运行了
Test-2010-12-06-21-57-58.png


11-30运行截图
Test-2010-12-06-22-00-35.png

[ 本帖最后由 tuxw 于 2010-12-6 22:01 编辑 ]
回复

使用道具 举报

发表于 2010-12-6 23:40:38 | 显示全部楼层
应该是找到原因了。

因为批处理命令行缓冲区不够,导致溢出。

重新编译了一个使用4K的缓存,除非是非常变态的命令否则应该都是够用了。
(嘻嘻为了节约代码所以在参数替换时没有进行长度限制)

先编译一个试一下,明天再重新上传。

[ 本帖最后由 chenall 于 2010-12-7 19:14 编辑 ]
回复

使用道具 举报

发表于 2010-12-7 08:22:46 | 显示全部楼层
能否添加个功能判断bios把U盘认作fd 还是hd
回复

使用道具 举报

发表于 2010-12-7 08:47:46 | 显示全部楼层

回复 #132 jianliulin 的帖子

usb-hdd的u盘都是识别为hdd   usb-zip的不好说  ud的是更没准
回复

使用道具 举报

发表于 2010-12-7 09:01:57 | 显示全部楼层
原帖由 jianliulin 于 2010-12-7 08:22 发表
能否添加个功能判断bios把U盘认作fd 还是hd


目前使用以下语句应该可以部份确定.
checkrange 0x8280 0 && echo fd
checkrange 0x8280 0x80 && echo hd
回复

使用道具 举报

发表于 2010-12-7 09:46:47 | 显示全部楼层
这样可能相对更准确:

calc *0x82b8>>8&0xff-0x80 && echo fd
calc *0x82b8>>8&0xff-0x80 && echo Hd
回复

使用道具 举报

发表于 2010-12-7 19:11:28 | 显示全部楼层
上传了一个测试版本。外部命令内置化。加快外部命令调用速度,如果需要频繁使用某个命令最好加载一下。只使用一次两次的就没有必要了。因为使用了链表结构所以可加载的外部命令个数没有限制(受限于可分配内存大小)


主要改动
添加了两个伪命令load 和 unload用于加载外部命令到内存和释放。
比如
把wenv命令加载到内存中,加载后不管这个磁盘有没有存在都可以使用该命令。
load (bd)/grub/wenv 或 load wenv 或 load (hd0,0)/grub/wenv

注:以上格式都是可以的。加载时只保留文件名。
使用方法
直接使用就好了,会自动从内存中加载.
wenv

卸载直接 unload 命令(不要使用路径,只要文件名).
unload wenv

另外重复加载无效。

注:加载的命令只能在当前环境中使用。批处理脚本也属于外部命令,所以也可以load

PS: 好像load和unload也不是很贴切,嘻嘻,有没有比较贴切的命令?

先放上来测试一下,改动比较大,涉及到所有外部命令和批处理执行的过程。可能会有BUG。
我小测了一下还没有发现BUG。

[ 本帖最后由 chenall 于 2010-12-7 19:14 编辑 ]
回复

使用道具 举报

发表于 2010-12-8 01:20:04 | 显示全部楼层
@chanall

为什么1207版  用--mem加载文件时的进度没有了  什么时候取消了

还有  怎么实现批处理里面的跳转

比如批处理里面两个title  用fallback --go 执行的是菜单的跳转  不是批处理里面的

[ 本帖最后由 sratlf 于 2010-12-8 01:33 编辑 ]
回复

使用道具 举报

发表于 2010-12-8 08:16:17 | 显示全部楼层
原帖由 sratlf 于 2010-12-8 01:20 发表
@chanall

为什么1207版  用--mem加载文件时的进度没有了  什么时候取消了

还有  怎么实现批处理里面的跳转

比如批处理里面两个title  用fallback --go 执行的是菜单的跳转  不是批处理里面的


有进度的啊??好像压缩文件才会没有进度条.新版lzma压缩我有加了进度.gz的没有.

批处理里面不能跳转.但可以跳出批处理,执行一个失败的命令就会跳出了..

要怎么样跳转?像批处理一个GOTO?有点麻烦.我有空再尝试一下.
回复

使用道具 举报

发表于 2010-12-8 08:36:26 | 显示全部楼层

回复 #138 chenall 的帖子

不是压缩,是map镜像到内存时,ima文件9.8M,用1128版会有进度,1207进度就没了,是虚拟机测试的,实机还没测

就是批处理的goto,昨天是想用fallback在批处理里面跳转的,后来怎么测试怎么不对,这才发现是跳转到菜单了
回复

使用道具 举报

发表于 2010-12-9 11:29:36 | 显示全部楼层
@chenall

load和unload两个命令目前没发现什么问题  执行没发现什么错误  当然都是很简单的菜单

两个命令名字改成 internal 和 external 怎么样

有时间把批处理的goto解决了吧  现在是一段一个批处理  写了N段  再批处理调用批处理  组合成一个完整批处理

补充  map进度条  几十M的文件加载没问题  10M左右的加载就没了  以前的版本没问题

[ 本帖最后由 sratlf 于 2010-12-9 11:33 编辑 ]
回复

使用道具 举报

发表于 2010-12-9 17:14:03 | 显示全部楼层
原帖由 sratlf 于 2010-12-9 11:29 发表
@chenall

load和unload两个命令目前没发现什么问题  执行没发现什么错误  当然都是很简单的菜单

两个命令名字改成 internal 和 external 怎么样

有时间把批处理的goto解决了吧  现在是一段一个批处理  ...


大于8M时才会显示进度,否则是不显示的.

先上传一个附件.

1.修正了部份可能会出错的地址.
2.load和unload改成了insmod和delmod
3.批处理脚本开始支持标签(有BAT用法一样)和goto命令.
4.支持call 标签可带参数.


注:新的版本执行批处理时至少占用12KB内存(作为标签缓存).以前的版本是+4KB.所以需要注意内存是否足够.
另外尽量不要在批处理中执行那些不可返回命令(会造成内存无法释放).
另外为了方便使用 goto label  不区分大小写的.

一个例子:
依次显示
start
echo enddddddd
test

  1. !BAT
  2. :start
  3. echo start
  4. goto End
  5. :test
  6. echo test
  7. goto :EOF
  8. :end
  9. echo enddddddd
  10. goto test
复制代码
edit:
已经上传新的测试版...
支持call/goto 标签.和批处理的语法一样.请大家测试,应该是比较完美了.
call 标签支持参数.

call只能调用批处理内部的标签.

[ 本帖最后由 chenall 于 2010-12-9 20:10 编辑 ]
回复

使用道具 举报

发表于 2010-12-9 20:53:27 | 显示全部楼层
再贴一个测试用的脚本.
比如保存为test.bat

test.bat a b c d e f g h i
以下脚本将会显示
1=1
2=2
..
9=9
对应call :test 1 2 3 4 5 6 7 8 9
然后再显示输入的参数.goto test
1=a
...
9=i



  1. !BAT
  2. goto :end
  3. :test
  4. echo 1=%1
  5. echo 2=%2
  6. echo 3=%3
  7. echo 4=%4
  8. echo 5=%5
  9. echo 6=%6
  10. echo 7=%7
  11. echo 8=%8
  12. echo 9=%9
  13. echo %%1 %~a %~ %ab
  14. goto :eof
  15. :end
  16. call :test 1 2 3 4 5 6 7 8 9
  17. goto test
复制代码
回复

使用道具 举报

发表于 2010-12-10 10:53:41 | 显示全部楼层
忘了说一下,目前只支持单语句的goto/call

如果没有什么问题的话,晚上应该能有一个全面支持的版本.

即像下面的
command1 || goto xxxx
回复

使用道具 举报

发表于 2010-12-10 10:58:18 | 显示全部楼层
chenall老师你好!请教个问题:
1、grub4dos-0.4.5b-2010-12-07-test.zip新版的这个在加载硬盘镜像IMG文件时不显示加载进度了,不过我在加载大些的软盘镜像和光盘镜像时显示加载进度啊?不知道是什么问题?(用的是中文版的,英文版的还没试)
刚看到你的解答“新版lzma压缩我有加了进度.gz的没有”不知道可以把.gz这个也加入进度显示吗?

2、grub4dos-0.4.5b-2010-12-07-test.zip新版的在用find新增参数--devices=[DEVICES],指定要查找的设备.我的菜单是: find --devices=uhcp  ,这时时不能找到硬盘隐藏分区里的文件,文件放到可见分区可以正常找到,用find --set-root --ignore-floppies 可以正常找到硬盘隐藏分区里的文件。不知道是我用法不对?还有请教nd设备代表什么?

[ 本帖最后由 thttht 于 2010-12-10 11:05 编辑 ]
回复

使用道具 举报

发表于 2010-12-10 12:09:48 | 显示全部楼层
原帖由 thttht 于 2010-12-10 10:58 发表
chenall老师你好!请教个问题:
1、grub4dos-0.4.5b-2010-12-07-test.zip新版的这个在加载硬盘镜像IMG文件时不显示加载进度了,不过我在加载大些的软盘镜像和光盘镜像时显示加载进度啊?不知道是什么问题?(用 ...



1.这个我没有改动,可能是由于LZMA补丁的原因吧..
大于8M的镜像才会显示进度,GZ文件不显示进度(不知之前的版本是怎样的,我稍后试一下)
LZMA会有一个进度.

2.nd ->Network Drive (没有使用,是之前的遗留)
你试试
find --devices=h
看看能不能列出你的隐藏分区.如果正常的话应该是可以找到的.因为这个参数和是否隐藏没有关系.

是不是你有加了其它的参数?
回复

使用道具 举报

 楼主| 发表于 2010-12-10 12:45:02 | 显示全部楼层
我记得批处理中冒号“:”是注释,加了标签功能后冒号功能应该改变了吧。
command1 || goto xxxx ,这个好,可以不用title了。期待晚上的版本。

GOTO命令内置了?

[ 本帖最后由 zhaohj 于 2010-12-10 12:49 编辑 ]
回复

使用道具 举报

发表于 2010-12-10 13:55:43 | 显示全部楼层

回复 #146 zhaohj 的帖子

都是批处理里使用的,菜单里可能还不行,现在批处理支持参数和用call和goto在批处理内跳转
回复

使用道具 举报

发表于 2010-12-10 14:14:04 | 显示全部楼层
goto/call 只能在批处理中使用,如果在菜单中使用会出现错误.
goto/call是一个伪命令,所以现在如果要使用外部命令goto就会麻烦些要用路径的方式.
以后再考虑让goto命令也能在菜单中使用,跳到某个菜单.
有了批处理功能,在菜单中跳转相对就不是那么重要了.

2010-12-10
1.改变了以下内存地址的定义(和之前的版本相反)
        0000:82A4        4 (DWORD)        no_decompression (no auto gunzip)
        改成了
        0000:82A4        4 (DWORD)        do_decompression (do auto gunzip)
2.0x8284的值的bit2如果为1则显示解压进度,否则不显示,默认不显示.
可以write 0x82a4 2来让它显示进度,
注:显示进度对文件读取的速度有影响.

3.完善了goto/call的功能
回复

使用道具 举报

发表于 2010-12-11 12:42:41 | 显示全部楼层
insmod/delmod 能否改成
outmod
outmod -i
outmod -u
查看已加载的模块、加载、卸载

最好还能增加一个判断某模块是否加载
outmod wenv,通过返回值判断wenv是否加载

这样在合盘时,不同菜单中跳转时可以判断当前环境

[ 本帖最后由 tuxw 于 2010-12-11 12:45 编辑 ]
回复

使用道具 举报

发表于 2010-12-11 14:56:32 | 显示全部楼层
insmod/delmod 好像是学unix/linux的命名,有出处的,方便顾名思义。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2021-3-5 15:03

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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