无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: zhaohj
打印 上一主题 下一主题

GRUB4DOS更新建议、bug反馈专帖

    [复制链接]
391#
发表于 2011-9-5 16:05:30 | 显示全部楼层
批处理 call :标签
有带标号是正规的语法(批处理里面也是一样的)

因为之前的call只有一个单一的功能,所以并没有强制要":"

8.8修改的,强制性要":"

经常写WINDOWS批处理的人就会习惯有带":",像我自己从一开始就有带标号,这样比较清析,知道这是一个标签调用.
回复

使用道具 举报

392#
发表于 2011-9-5 20:28:38 | 显示全部楼层
批处理的goto和C语言一样可以不需要冒号.因为它总是跳到一个标签.

但call不一样.call 有可能是一个标签函数,也有可能是另一个程序.

你可使用WINDOWS自带的批处理试一下就知道了.

目前GRUB4DOS的批处理是仿WINDOWS的批处理进行设计的.
回复

使用道具 举报

393#
发表于 2011-9-5 21:54:55 | 显示全部楼层
chars_per_line
顾名思义,就是一行里面有几个字符.

这个是指当前显示模式一行最多可以显示几个字符数.
回复

使用道具 举报

394#
发表于 2011-9-5 22:28:32 | 显示全部楼层

回复 #1215 zxw 的帖子

要理解这些函数可以自己查看一下相关的源代码比如

getxy在源代码中就可以看到使用的实例.

getxy 返回如下值
0xXXYY
比如以下命令
clear && echo -n abcd && call Fn.4
肯定会返回0x0400
因为clear清空的屏幕,而且只显示了4个字符,所以光标位置在0x0400处.
如果是以下命令
clear && echo abcd && call Fn.4
则会返回
0x0001
具体原因自己去研究.
回复

使用道具 举报

395#
发表于 2011-9-6 16:59:14 | 显示全部楼层

回复 #1218 zxw 的帖子

回复

使用道具 举报

396#
发表于 2011-9-7 21:08:59 | 显示全部楼层

回复 #1223 hhh333 的帖子

修改GRLDR.MBR除了已知的方法之外,好像没有什么更好的办法了,建议使用WEE...
回复

使用道具 举报

397#
发表于 2011-9-7 23:38:27 | 显示全部楼层
在批处理里面%i要改成%%i

不过不建议使用WENV,直接使用批处理内置的功能就可以了.

好像本身就已经具备可移植性了吧??preload.bat是由menu.lst调用的,你这个又是要做什么的.
回复

使用道具 举报

398#
发表于 2011-9-8 23:15:19 | 显示全部楼层

回复 #1229 zhaohj 的帖子

想象力太丰富了汗....

这个只是可以不使用原来的名字,比如insmod (bd)/grub/fatmini fat
这样会把fatmini加载为fat
回复

使用道具 举报

399#
发表于 2011-9-8 23:17:19 | 显示全部楼层

回复 #1228 2011_dihuo0 的帖子

本来是2KB刚好的,我偷懒了,没有改..
回复

使用道具 举报

400#
发表于 2011-9-9 23:24:20 | 显示全部楼层
好像在GRUB4DOS中(xx)/aa.txt和(xx)//aa.txt都可以访问,你可以自己试一下.
回复

使用道具 举报

401#
发表于 2011-9-11 18:09:52 | 显示全部楼层
主菜单用UNIFONT

如果了菜单的编码非UTF-8那肯定乱码...

应该是你的两个菜单文件编码不一致..如果是其它情况请截图.
回复

使用道具 举报

402#
发表于 2011-9-11 21:48:57 | 显示全部楼层
好像wee127的map只支持映射交换...

比如
map (hd0) (hd1)
map (hd1) (hd0)
回复

使用道具 举报

403#
发表于 2011-9-12 11:34:17 | 显示全部楼层

回复 #1239 hhh333 的帖子

好像wee127的map --mem有一些机子不支持.

你可以在WEE的命令行中输入map --mem xxxx (fd0)

会有提示..

如果要使用memdisk来仿真用WEE63就够了.

直接(hdx,y)/path/memdisk (hdx,y)/path/file.img
回复

使用道具 举报

404#
发表于 2011-9-12 14:37:42 | 显示全部楼层
wee和GRUB4DOS的使用方法不太一样的.

不行应该是你的文件有误.

你要确认以上文件存在.

我试了一切正常

只需要一条命令

(hdx,y)/path/memdisk (hdx,y)/path/filename.img
它就直接启动了.
回复

使用道具 举报

405#
发表于 2011-9-13 09:09:21 | 显示全部楼层

回复 #1244 hhh333 的帖子

建议你使用命令行手工输入完整的路径试试.

闪一下那肯定是文件不存在,如果文件正常存在的话那就会直接启动MEMDISK了.
回复

使用道具 举报

406#
发表于 2011-9-13 14:43:12 | 显示全部楼层
汗,,又发现一个BUG,上次改错了..

附件的版本修正了以下BUG.
直接insmod filename时,如果这个filename在默认的path目录下时,会失败.

另外新的版本对于输出重定向也有一些变动..

一个比较实用的例子(命令行下)
set a=b
set b=12345
call echo %%a%%
将会得到12345


先放着测试一下,晚上再上传.

grldr.rar

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

回复

使用道具 举报

407#
发表于 2011-9-14 11:32:47 | 显示全部楼层

回复 #1256 hhh333 的帖子

可以使用变量控制菜单是否可用的.比如以下菜单.

比较简单的判断,只是让菜单执行失败了..exit命令因为菜单不支持这个命令所以就失败了.

if exist (hd0,0)/windows/system32/version.dll && set title0=exit
if exist (hd0,1)/windows/system32/version.dll && set title1=exit

title 0. (hd0,0) test
%title0%
chainloader (hd0,0)+1

title 1. (hd0,1) test
%title1%
chainloader (hd0,0)+1

隐藏菜单,只能隐藏菜单文字,同样使用变量
像下面的例子只要设置title的值为空菜单文字就不显示了,但用处不大.

title %title%
xxxx
xxx
回复

使用道具 举报

408#
发表于 2011-9-14 17:12:19 | 显示全部楼层

回复 #1259 hhh333 的帖子

你可能没有测试过吧,我上面提供的是菜单的而不是一个批处理,可能你看到开头的批处理就没有去试了.

用我上面的方法可以使个某个菜单(失败)

至于强化,我目前没有什么好的办法,如果你愿意的话可以写一个补丁.
回复

使用道具 举报

409#
发表于 2011-9-15 15:42:13 | 显示全部楼层

回复 #1270 zxw 的帖子

你又犯了常识性错误。。变量在执行一行前就替换了。。。

[ 本帖最后由 chenall 于 2011-9-15 15:43 编辑 ]
回复

使用道具 举报

410#
发表于 2011-9-19 20:25:08 | 显示全部楼层

回复 #1281 hhh333 的帖子

直接用root (cd)检测不就行了?
root (cd) && echo Boot From Cdrom....
也可以这样
cat --length=1 (cd)+1 && echo Boot From Cdrom....

只有从CD启动时才会有(cd)设备.
回复

使用道具 举报

411#
发表于 2011-9-19 20:47:46 | 显示全部楼层

回复 #1283 hhh333 的帖子

嗯,if %@root%==(cd) 这个倒是不错的办法.

同时存在,只有启动盘才是(cd)
回复

使用道具 举报

412#
发表于 2011-9-19 21:29:50 | 显示全部楼层

回复 #1287 hhh333 的帖子

这个自己去想办法解决,办法有N多种....
回复

使用道具 举报

413#
发表于 2011-9-26 17:54:15 | 显示全部楼层

回复 #1297 hhh333 的帖子

configfile (hd0,0)/boot/menu.lst

这时bd=(hd0,0)

使用ud启动时内置菜单  bd=(ud)
如果从ud启动之后再转(hd0,0)启动,这是因为ud设备还是有存在的,
如果内置菜单的话bd=(ud)..

因为当初写代码是我只是简单的判断了一下如果(ud)设备存在就认为是从ud启动的.

这一句也许应该这样理解
不是说(bd)总是menu.lst菜单所在的设备,如果内置的,就是被调用的grldr所在的设备

bd boot drive 即启动设备.

一般是指第一启动设备,使用configfile 会改变启动设备.

当然了前面关于从fbinst启动GRLDR,再加载另一个GRLDR,可以算是一个BUG吧.也可以不算是BUG.因为ud和可见区其实是同一个磁盘.

[ 本帖最后由 chenall 于 2011-9-26 17:55 编辑 ]
回复

使用道具 举报

414#
发表于 2011-9-28 11:56:21 | 显示全部楼层
新版本已经编译上传.
修正了Yonsm报告的问题
http://bbs.wuyou.net/forum.php?m ... &extra=page%3D1

建议更新..
回复

使用道具 举报

415#
发表于 2011-9-29 08:27:17 | 显示全部楼层

回复 #1309 dihuo0 的帖子

虽然说是BUG,但没有办法解决,只能修改FBINST.

当时没有考虑都那么多情况,只是为了方便所以才改的.

我看还是恢复原样好了,下个版本的GRUB4DOS将不在处理fb的启动设备...

即启动后.内置菜单
bd=root=可见区
回复

使用道具 举报

416#
发表于 2011-9-29 09:03:03 | 显示全部楼层

回复 #1311 zxw 的帖子

我考虑了一下,还是觉得改一下比较好

如前面贴子所说,目前也没有办法判断是否真的从(fb)启动的.
回复

使用道具 举报

417#
发表于 2011-10-3 08:32:30 | 显示全部楼层
试试这个

另外没有可见区,访问的应该是(ud)的内容.没有可见区时分区号是0,所以访问的应该是整个磁盘的内容即(ud)

你们可以试一下,因为后面的版本有直接支持fb的文件系统,即使不从fb启动也可以访问.

[ 本帖最后由 chenall 于 2011-10-3 08:33 编辑 ]

grub4dos-0.4.5b-2011-10-03.7z

263.3 KB, 下载次数: 65, 下载积分: 无忧币 -2

回复

使用道具 举报

418#
发表于 2011-10-4 08:24:51 | 显示全部楼层
原帖由 不点 于 2011-10-3 12:44 发表
我想把 dd 的默认缓冲区移动到扩展内存上

关于内存使用,我们以前有这样的描述:
引用:
现在 grub4dos 本身对常规内存的占用情况如下:

00000~10000 被 grub4dos 的程序代码和堆栈占用。
10000~20000 为 grub4dos 将来的代码和数据保留。
20000~30000 被 dd 命令的磁盘缓冲区占用。grub4dos 内核中的自动几何参数探测的缓冲区也占用这个区域。
30000~38000 被 grub4dos 内核中的常规磁盘读写缓冲区占用。
38000~40000 保留给 grub4dos 将来的扩展。

用户程序可以使用 0x40000 以上的空间。但建议只使用少量的空间,例如几个 KB。
但是现在发现,这样做不太安全。由于 geometry 命令有可能破坏 0x20000 处的内容,所以,使用 dd 命令的时候,就不安全了。

因此,想把 dd 命令的默认缓冲区移动到扩展内存中。

在扩展内存中,位于 3M 开头的一部分空间,目前是不是没有使用?我不知道 chenall 使用了没有。

这样,0x20000 处的空间,就专门供 geometry 使用了。

这样就安全了,因为 很多命令都可能调用 geometry ,如果 geometry (擅自)修改了内存,很容易引起冲突。尤其是 dd 命令也有可能调用 geometry 命令。打开文件,读写文件,都可能有调用 geometry 的动作。

而让这个空间被 geometry 专用,就不会冲突了。

原帖由 不点 于 2011-10-3 14:24 发表
已经把 dd 的 buffer 从 0x20000 挪动到 0x100000 (即 1M 处)了。

希望别的代码没有使用 1M 处的 64K 空间。

顺便说,也终于把 0x50000 - 0x5FFFF 的空间腾出来了,可供用户使用了。

测试一下吧。  


http://bbs.znpc.net/viewthread.p ... fromuid=29#pid48944

[ 本帖最后由 chenall 于 2011-10-4 08:27 编辑 ]
回复

使用道具 举报

419#
发表于 2011-10-5 13:53:38 | 显示全部楼层

回复 #1334 zxw 的帖子

我的测试是正常的...??
回复

使用道具 举报

420#
发表于 2011-10-5 14:36:40 | 显示全部楼层
这个是正确的,因为进入命令行时还是处于批处理的进程中。

这时再从这个进程里面启动批处理,执行CONFIGFILE。

因为configfile命令需要没有任何进程的情况下才会启动。

如果是在批处理中会自动退出所有进程。但是COMMANDLINE需要用户手工退出。

你的第一个测试按C进入命令行之后这时的批处理还没有退出,
再次启动一个批处理,执行了configfile,它就直接返回前一个批处理的环境,只要退出了这个批处理configfile才会被执行。

之前的版本没有处理这个问题,所以可以启动,但是前一个进程占用的内存和环境就无法释放了。

configfile命令比较特殊,它是不可返回的命令,为了尽量减小影响,要求没有任何进程运行时才会执行。

[ 本帖最后由 chenall 于 2011-10-5 14:39 编辑 ]
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-22 03:19

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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