无忧启动论坛

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

GRUB4DOS发现一个BUG问题!!!(chenall老师又有一个新问题帮忙看看!)

[复制链接]
跳转到指定楼层
1#
发表于 2010-4-10 10:19:05 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
chenall老师我在前几天向你请教过这方面的问题,下面是我当时的问题,你当时说我用的外部命令版本太旧!因为后来工作上忙这个就没有时间详细的实验!今天详细实验一下发现不是外部命令版本太旧,而是GRUB4DOS在加载字体文件后就会出现下面的情况,英文版的GRUB4DOS用UNIFONT /U16.bin命令加载中文字体后同样会出现下面的问题!(GRUB4DOS和外部命令都用的是最新版本的!)但功能并不受影响,如果一次性的输入正确的路径不修改的话可以正常使用!只是输入自定义文件名和路径时不能用删除键,每按删除键一下只是在输入错了的文件名后又加入了一个乱码符号!

还有一个问题,这个不是BUG问题,WENV 设置变量是不是有字符个数的限制啊?输入自定义路径和文件名过长是不是不行啊?如果有这样的限制具体这个限制是多少个字符啊?

---------------------------------------------------------------------------------------------------
我是要写一个加载一个可启动ISO光盘或可启动IMG软盘没有找到后也加入一个可以自定义路径和文件名的程序菜单!
现在测试在输入自定义文件名和路径时不能用删除键,不小心输入错了只能执行完后再从新输入!你的不这样的!
-------------------------------------------------------------------------------------------------------
我上面说的版本太旧是指你用的外部命令。
---------------------------------------------------------------------------------------------------


谢谢chenall老师帮助解决这个问题!也期待内置菜单使用UNIFONT的问题!你的最新回复和对WENV的升级我看到了,谢谢你了!辛苦了!

同时我在应用中又遇到一个问题希望你能帮忙看看!
关于WENV设置变量在应用时有一个问题!
WENV run map --mem ${F6} (fd0)
WENV run map --mem ${WinPE} (0xff)
map --hook
chainloader (0xff)
boot
在这种应用中有一个必须满足的要求才能成功,就是F6文件必须和WinPE文件在同一个分区内才会成功!这个条件是必须得满足的,如果这两个文件分别在两个不同的分区里启动就肯定会失败!请问能不能改进WENV来解决一样的问题啊?

[ 本帖最后由 thttht 于 2010-4-17 17:47 编辑 ]
46#
发表于 2010-4-21 12:24:29 | 只看该作者
还有一点忘了说了,
新的GRUB4DOS应该可以在内置菜单中使用UNIFONT显示中文了。
回复

使用道具 举报

45#
发表于 2010-4-21 08:47:50 | 只看该作者
原帖由 chenall 于 2010-4-20 17:23 发表
新版UNIFONT已经上传,麻烦测试一下。

INIFILE,现在好像用不上了。。


完美解决,感谢!

以前运行控制台有些乱码也不见了,现在非常正常。

现在的驱动都超大,hwid部分可能会超过65535B(64KB),得想法改进INIFILE或搞个替代品。
回复

使用道具 举报

44#
发表于 2010-4-20 17:23:10 | 只看该作者
新版UNIFONT已经上传,麻烦测试一下。

INIFILE,现在好像用不上了。。
回复

使用道具 举报

43#
发表于 2010-4-20 16:42:12 | 只看该作者
C大有空看看下面的,是不是可以取消INIFILE的65535B限制
http://www.cnblogs.com/strinkbug/archive/2008/12/18/1357801.html
回复

使用道具 举报

42#
发表于 2010-4-20 16:39:07 | 只看该作者
原帖由 zhaohj 于 2010-4-20 16:06 发表


那这个外部命令成功,其他外部命令怎办?
我觉得这样很好,放到内存万一冲突或覆盖也很麻烦。


当然没有那么简单了。

到时会在内存中开辟一个区域,根据需要(可以设定一个参数)把外部命令放到内存中(这样就相当于内部命令了),只要这个命令使用过一次以后就从内存读取。
回复

使用道具 举报

41#
 楼主| 发表于 2010-4-20 16:32:30 | 只看该作者
经测试的确是由于ISO文件和外部命令不在同一个分区,command --set-path又没有使用绝对路径导致在执行WENV set ISO=$input,Input new ISO file PATH: 时root根目录的改变使WENV外部命令找不到!下面的WENV run map --mem ${ISO} (0xff)也就失败了!这里提示的找不到文件的确是在执行WENV run map --mem时已经找不到外部命令WENV!ISO文件和外部命令在同一个分区时root根目录不会改变也就可以成功启动了!

[ 本帖最后由 thttht 于 2010-4-20 16:34 编辑 ]
回复

使用道具 举报

40#
发表于 2010-4-20 16:06:12 | 只看该作者
原帖由 chenall 于 2010-4-20 15:52 发表
对于外部命令
有空我会尝试一些改进。只要第一次执行这个命令成功,就把这个命令放到内存中。这样一般就不会找不到了。


那这个外部命令成功,其他外部命令怎办?
我觉得这样很好,放到内存万一冲突或覆盖也很麻烦。
回复

使用道具 举报

39#
 楼主| 发表于 2010-4-20 16:01:42 | 只看该作者
原帖由 chenall 于 2010-4-20 15:50 发表
找不到文件可能是提示找不到WENV文件。。
你必须保证wenv可以访问。

不建议使用
command --set-path=()/boot/grub/

因为这时如果执行了root命令那就可能会找不到外部命令。

所以你还是先试试使用绝对 ...



这个时候wenv应该是可以访问的,
WENV run find --set-root ${ISO} || WENV set ISO=$input,Input new ISO file PATH: && fallback --go 3
执行完这一步时都没有问题接下来就执行
WENV run map ${ISO} (0xff) || WENV run map --mem ${ISO} (0xff)
这一步时提示找不到文件,这之间没有在执行root命令,
我马上用命令行试试提示找不到文件到底是找不到WENV文件了还是找不到ISO文件!

我现在是按你的建议command --set-path使用了绝对路径,并且在使用了绝对路径后这个问题也的确是解决了!

================================================================================================
有空我会尝试一些改进。只要第一次执行这个命令成功,就把这个命令放到内存中。这样一般就不会找不到了。

不知道是不是可以把比较成熟稳定的外部命令加入到 GRUB4DOS中啊!

[ 本帖最后由 thttht 于 2010-4-20 16:05 编辑 ]
回复

使用道具 举报

38#
发表于 2010-4-20 15:52:52 | 只看该作者
对于外部命令
有空我会尝试一些改进。只要第一次执行这个命令成功,就把这个命令放到内存中。这样一般就不会找不到了。
回复

使用道具 举报

37#
发表于 2010-4-20 15:50:34 | 只看该作者
找不到文件可能是提示找不到WENV文件。。
你必须保证wenv可以访问。

不建议使用
command --set-path=()/boot/grub/

因为这时如果执行了root命令那就可能会找不到外部命令。

所以你还是先试试使用绝对路径像(bd)或(hd0,0)之类的。
回复

使用道具 举报

36#
 楼主| 发表于 2010-4-20 15:33:08 | 只看该作者
原帖由 zhaohj 于 2010-4-20 15:09 发表
失败的情况下,你返回到命令行查看一下
GRUB>command
我想一般(bd)是不会变的,你的主要问题还是大小写混合引起的。
G4D对大小写太敏感了,设备名都是小写,文件名扩展名包括路径要么全大写,要么全小写。
...



这个在你上次发帖说的时候这个问题我已经改了!现在看应该不完全是大小写的问题!我个人觉得还是command --set-path搜索并设置的根设备和后面WENV变量搜索储存的文件根目录产生了相互影响!command --set-path不用搜索设置而是直接指定使用绝对路径相同的菜单就不会出现这样的问题了!这个菜单如果你修改好大小写的问题在虚拟机里把GRUB4DOS和外部命令放在硬盘A分区,把要加载的ISO文件放在硬盘B分区,command --set-path这里用
find --set-root /boot/grub/fonts.gz 
command --set-path=()/boot/grub/

不直接指定使用绝对路径应该可以重现我说的现象!

点评

混沌剑神 www.aoswx.com/book/991.html 永生之门www.gmwxw.com/book/4185.html  发表于 2014-9-26 16:59
回复

使用道具 举报

35#
发表于 2010-4-20 15:09:55 | 只看该作者
失败的情况下,你返回到命令行查看一下
GRUB>command
我想一般(bd)是不会变的,你的主要问题还是大小写混合引起的。
G4D对大小写太敏感了,设备名都是小写,文件名扩展名包括路径要么全大写,要么全小写。
象这个 map --mem (fd3)/srs/srs_f6.IMG (rd)就不行,map --mem (fd3)/SRS/SRS_F6.img (rd)也不行
          map --mem (FD3)/srs/srs_f6.img (rd)就不行,map --mem (fd3)/SRS/SRS_F6.IMG (RD)也不行

         map --mem (fd3)/srs/srs_f6.img (rd)就行,map --mem (fd3)/SRS/SRS_F6.IMG (rd)也行
回复

使用道具 举报

34#
 楼主| 发表于 2010-4-20 14:47:27 | 只看该作者
原帖由 chenall 于 2010-4-19 15:05 发表
对不起,我还是没有完全明白。
具体是什么失败,WENV执行失败?map命令失败?还是????

不过对于command --set-path建议使用一个绝对路径(尽量保证这个路径一直可以访问)



不好意思!我的这个菜单在执行时并不是WENV执行失败而是在执行map命令时失败的,执行这个菜单时手动输入的文件必须和外部命令在同一个分区不然在执行map命令时就会失败!说找不到文件!其实WENV执行手动输入的文件路径和文件名时已经通过并找到了文件后执行下一步map命令时会失败!在整个过程中WENV执行没有什么问题,问题出在WENV执行完进行下一步map命令时!如果外部命令和手动输入的文件在同一个分区里,目录路径不同也没有关系,就会成功启动!

在你的提示下我把command --set-path使用一个绝对路径后以上问题就没有了!看来还是因为我原来菜单command --set-path设置和后面的WENV执行手动输入的文件后并map时WENV变量的设备根目录和我原来菜单command --set-path设置的根目录有冲突吧?是不是在command --set-path没有用绝对路径而搜索到的路径和WENV变量搜索储存的文件根目录产生了混淆而导致map时是到command --set-path的根目录里找文件而没有在WENV变量手动输入的搜索到的文件根目录去map文件,这样路径相同但设备根目录已经改变导致map文件时找不到文件了!不知道这种问题应该是使用方法方面的错误还是属于WENV和command --set-path搜索设置路径方面冲突的BUG!!!

不过问题已经找到并按你的方法解决设置绝对路径!!!谢谢chenall老师!这个属于不属于BUG我不太清楚!同时也感谢zhaohj对我的帮助!谢谢!!!
回复

使用道具 举报

33#
发表于 2010-4-20 12:44:52 | 只看该作者
谢谢zhaohj .

明白了,晚上上传一个新版本

[ 本帖最后由 chenall 于 2010-4-20 13:11 编辑 ]
回复

使用道具 举报

32#
发表于 2010-4-20 09:05:59 | 只看该作者
在乱码情况下,write 0x400018  0xb 就不乱码了。
这就是说,0x400018需要保护或RESET.

现在解决办法是在UNIFONT前write 0x400018  0xb 确保不乱码(实际上也不能说乱码,是只写了半个汉字)。
回复

使用道具 举报

31#
发表于 2010-4-20 08:06:01 | 只看该作者
文件放在FTP://60.190.19.108/zhhsh/20100415正式版

我虚拟机VM7.0可以重现,不过要多试几次。

[ 本帖最后由 zhaohj 于 2010-4-20 08:13 编辑 ]

Snap2.jpg (108.76 KB, 下载次数: 109)

正常的

正常的

Snap1.jpg (97.76 KB, 下载次数: 94)

非正常的

非正常的
回复

使用道具 举报

30#
发表于 2010-4-19 23:35:22 | 只看该作者
能不能把你的菜单文件传给我一下,我看看有没有办法重现。

另外因为程序是在4M-6M中运行的,如果有其它程序修改了这其中的内存数据就有可能造成这种情况。
你试试在出现这种情况后进入命令行执行以下命令看看它的值是多少。
read 0x400018

程序没有对内存数据进行保护(因为我不懂,呵呵)。

[ 本帖最后由 chenall 于 2010-4-19 23:59 编辑 ]
回复

使用道具 举报

29#
发表于 2010-4-19 22:37:35 | 只看该作者
错误在所难免,发现错误才能改正错误。

上面都写了半个汉字(左半边),还有半个汉字(右半边)哪里去了?

用UNIFONT
回复

使用道具 举报

28#
发表于 2010-4-19 22:31:30 | 只看该作者
是用UNIFONT还是FONTFILE?
回复

使用道具 举报

27#
发表于 2010-4-19 18:08:07 | 只看该作者
原帖由 zhaohj 于 2010-4-19 17:49 发表
又发生字符错位了,不过不是每次


看来英文版GRUB加载中文字库的效果,不如中文版GRUB加载中文字库的显示效果稳定。
回复

使用道具 举报

26#
发表于 2010-4-19 17:49:52 | 只看该作者
又发生字符错位了,不过不是每次

Snap1.jpg (130.88 KB, 下载次数: 88)

Snap1.jpg
回复

使用道具 举报

25#
发表于 2010-4-19 16:21:07 | 只看该作者
http://chenall.net/2010/04/grub4dos_unifont/

呵呵,我忘了给unifont加帮助提示信息了,本身有卸载功能的
--unload
回复

使用道具 举报

24#
发表于 2010-4-19 15:17:04 | 只看该作者
报告C大,新版WENV解决了input图形模式下的输入问题。感谢!

另外,UNIFONT及FONTFILE有什么办法卸载?能不能做个参数 --u
回复

使用道具 举报

23#
发表于 2010-4-19 15:10:36 | 只看该作者
一:外部命令不能调用外部命令;
二:太多的find不是一个好习惯,反而会造成更多的失败;G4D不是高级语言,很多受硬件制约。
三:上面WENV run find --set-root ${ISO},如不成功,执行WENV set ISO=$input,Input new ISO file PATH: && fallback --go 3,肯定无条件转到3
      如果WENV run find --set-root ${ISO}成立,下面的语句肯定会执行的。

四:WENV set ISO=/boot/PE.ISO写法有问题,要么全大写,要么全小写。find中也是。大小写混合肯定失败。
回复

使用道具 举报

22#
发表于 2010-4-19 15:05:52 | 只看该作者
对不起,我还是没有完全明白。
具体是什么失败,WENV执行失败?map命令失败?还是????

不过对于command --set-path建议使用一个绝对路径(尽量保证这个路径一直可以访问)
回复

使用道具 举报

21#
 楼主| 发表于 2010-4-19 08:50:34 | 只看该作者
原帖由 chenall 于 2010-4-17 18:00 发表


不太明白你指的是什么?

如果你的F6和WINPE都是绝对路径,应该都是要成功的吧.


find --set-root /boot/grub/fonts.gz || find --set-root /grub/fonts.gz
command --set-path=()/boot/grub/ || command --set-path=()/grub/

pxe detect
configfile
default 4
timeout 10


WENV init
debug off
#初始化并设置默认参数。
write 0x60000 0
write 0x60100 0
WENV set ISO=/boot/PE.ISO

find --set-root /BOOT/grub/fonts.gz || find --set-root /grub/fonts.gz || find --set-root /BOOT/fonts.gz || find --set-root /fonts.gz
fontfile /BOOT/grub/fonts.gz || fontfile /grub/fonts.gz || fontfile /BOOT/fonts.gz || fontfile /fonts.gz

title 【 04 】 查找并运行《 PE.ISO 光盘 》 \n\n\查找/boot/PE.ISO文件,如果没有找到提示用户输入一个文件路径,并返回重新查找。
WENV get ISO || fallback --go 14
WENV run ECHO find ${ISO} on your hard disk drive..
WENV run find --set-root ${ISO} || WENV set ISO=$input,Input new ISO file PATH: && fallback --go 3
WENV run map ${ISO} (0xff) || WENV run map --mem ${ISO} (0xff)
map --hook
chainloader (0xff)
boot

在这样的时候必须要PE.ISO文件在和grub程序及外部命令文件在同一个分区内才会成功!这个条件是必须得满足的,如果这两个文件分别在两个不同的分区里,启动就肯定会失败!不知道我这回的意识说明白了吗?

不知道是我菜单那里有问题才出现这样的错误!还是现在就有这样的限制!请chenall老师帮我看看我这个问题出在那里?

[ 本帖最后由 thttht 于 2010-4-19 11:39 编辑 ]
回复

使用道具 举报

20#
发表于 2010-4-19 08:23:30 | 只看该作者
"find 命令添加一个 --ignore-oem 参数"是什么意思?
回复

使用道具 举报

19#
发表于 2010-4-17 18:19:01 | 只看该作者
这个我虚拟机可以重现,明天截个图看看。
花屏后,菜单的英文字符都不对齐了。
回复

使用道具 举报

18#
发表于 2010-4-17 18:03:28 | 只看该作者
原帖由 zhaohj 于 2010-4-17 17:54 发表
虚拟机测试,UNIFONT第一次正常,第二次启动有时会花屏。
关闭虚拟机再次打开运行又正常,感觉不太稳定。


我还没有发现这样的情况.....
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2025-8-28 08:11

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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