无忧启动论坛

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

GRUB4DOS更新建议、bug反馈专帖

    [复制链接]
241#
发表于 2011-4-3 22:41:22 | 显示全部楼层
所有的文件都可以使用扇区序列的方法来表示,否则就是BUG.

其实map操作的时候就是把一个文件路径转换成扇区的表示方法来直接访问这个文件的.

具体可以看一下blocklist命令的用法.
回复

使用道具 举报

242#
发表于 2011-4-4 11:36:35 | 显示全部楼层
原帖由 zxw 于 2011-4-4 10:06 发表
惭愧,太糊涂了。任何文件本来就是某设备下的一个扇区系列。忽然悟到了,谢谢指点。

不过,测试了一下blocklist命令。文件如放在一个非连续区域则无效,或文件本身含有\0字节则显示不准确。


我还是没有看明白你的意思..
文件如放在一个非连续区域则无效,

如果文件是非连续的则就会是如下样子的块列表
(hda,b)x1+y1,x2+y2,,,,xn+yn
这样子的也是可以访问的.

或文件本身含有\0字节则显示不准确。
和文件内容怎么会有关系呢?不管文件内容如何,都是按同样的方式显示.
回复

使用道具 举报

243#
发表于 2011-4-4 16:23:36 | 显示全部楼层
汗,,怎么能这样子算呢.

在文件系统中最小的单位是簇,不是扇区.

一个文件不管多大至少占用一个簇.

磁盘分区越大,它的簇一般也就越大,如果有很多小文件,则浪费的空间也越多.
回复

使用道具 举报

244#
发表于 2011-4-6 09:48:33 | 显示全部楼层
原帖由 sgw888 于 2011-4-5 08:25 发表
to chenall
我发你的邮件,你有收到吧?关于DBR引导代码的。另外,补充一点,对于FAT32系统,DBR 从0X52到0X56 取值一般是 46 41 54 33 32  (FAT32) 。


你发哪个邮件地址?
回复

使用道具 举报

245#
发表于 2011-4-10 11:50:09 | 显示全部楼层
原帖由 2010roytam1 于 2011-4-10 11:25 发表
修復 --disable-graphics configure switch
在 google code 開了票,也在這裡說一下。
http://code.google.com/p/grub4dos-chenall/issues/detail?id=21


收到,直接打上了.

也欢迎更多的朋友一起加入GRUB4DOS开发,让我们共同完善它.

可以直接给补丁或申请加入开发.
回复

使用道具 举报

246#
发表于 2011-4-10 11:52:51 | 显示全部楼层
@fengxi
可以把你的IO.SYS上传上来,另外尽量有更详细的测试..人多力量大.

另外我最近的时间比较有限,不能再像以前那样进行测试和跟踪了.
回复

使用道具 举报

247#
发表于 2011-4-10 15:58:28 | 显示全部楼层
我觉得这个问题应该和虚拟机有关系,再说了,现在还有多少人会用软盘去这样启动..

我试了直接map启动没有问题,

qemu/virtualbox一切正常.
回复

使用道具 举报

248#
发表于 2011-4-11 22:36:23 | 显示全部楼层
看来好像不点又挖出了一些东西...
回复

使用道具 举报

249#
发表于 2011-4-12 21:46:41 | 显示全部楼层
pseudo 正解。。
回复

使用道具 举报

250#
发表于 2011-4-15 11:23:46 | 显示全部楼层
原帖由 jianliulin 于 2011-4-15 09:39 发表
建议grub4dos的外部命令把编译日期记录在某个固定的位置,(比如标志前10个字符表示编译日期),原因是外部名会时不时更新,用户使用的外部命令其很难知道是什么时候的版本,出了问题也不利于反馈给作者,若有版 ...


嗯,有考虑在标志前放置这个编译日期。可能是直接字符型的像2011-04-15或类拟GRUB4DOS一样的,使用一个十进制数20110415.

不过因为这个没有强制性规定,所以...
回复

使用道具 举报

251#
发表于 2011-4-15 13:06:53 | 显示全部楼层
在GRUB4DOS环境下直接读内存0X8278的值就是了。

对于文件目前的偏移位置如下(不知是不是固定的,)

GRLDR在偏移0X2078处。
GRUB.EXE在偏移0X5878。
回复

使用道具 举报

252#
发表于 2011-4-15 15:22:15 | 显示全部楼层

回复 #758 不点 的帖子

这样就方便了,对于GRLDR
直接读取偏移0X2078的值(32位)

GRUB.EXE先读一下0X1F0处一个字节的值*512+78就是了
回复

使用道具 举报

253#
发表于 2011-4-15 16:13:56 | 显示全部楼层

回复 #760 pseudo 的帖子

你可以自己尝试一下,根据前面的资料我们可以知道。
GRUB.EXE和GRLDR后面的内容都是一样的都是pre_stage2

GRLDR在偏移0X2000开始的内容就是pre_stage2

GRUB.EXE在先读一下0x1F0处的值再*512的偏移地址就是pre_stage2

所以只要需要截取GRUB.EXE前面的文件头内容再加上GRLDR从偏移0X2000开始处的内容就可以得到GRUB.EXE了

使用一个批处理就可以完成上面的操作。
流程如下。
1.先获取grub文件头的大小,并设为一个变量(使用扇区来表示,直接读0x1f0处的值一个字节就是了)
2.再获取grldr文件的大小,再设一个变量(使用扇区来表示).
3.计算需求空间
grub文件头的大小+grldr文件大小得到需要的扇区数量



4.map (md)+上面得到的扇区数量 (rd)

dd if=()/grub_start of=(rd)+1

dd if=()/grldr of=(rd)+1 skip=0x10 seek=grub.exe文件头大小(扇区)


如果没有什么问题的话最后的(rd)+1就是grub.exe了
回复

使用道具 举报

254#
发表于 2011-4-15 18:51:13 | 显示全部楼层
@zxw
事实上grub.exe的文件头基本上都是没有什么变化的。
而且一个grub.exe的文件头配合另一个版本的pre_stage2一般没有多大关系的。

所以使用GRLDR+批处理+一个grub.exe的文件头(可以在编译GRUB4DOS之后在stage2目录下找到dosstart这个就是了,或者从GRUB.EXE截取)动态生成一个GRUB.EXE是可行的。
回复

使用道具 举报

255#
发表于 2011-4-16 14:10:24 | 显示全部楼层
新的版本已经上传。
1.md5crypt命令支持参数。直接把参数作为字符串计算成md5.
2.支持在菜单中使用变量。

@jianliulin
也是可行的,不过没有必要,我觉得按照pseudo的想法,把这个dosstart压缩后放在镜像里面(这个基本上是不会改变的),这样至少可以节省一个GRLDR文件大小。
回复

使用道具 举报

256#
发表于 2011-4-22 11:07:45 | 显示全部楼层
@jianliulin
已经为外部命令添加编译日期。
所有的外部命令已经重新编译打包上传
文件可以在以下地址中
http://grubutils.googlecode.com/files/grub4dos_cmd-2011-04-22.zip

在可执行文件签名的前4个字节是编译日期(十进制的)
比如今天上传的外部命令,是20110422使用十六进制存放结果是56 dc 32 01

你可以试一下。
回复

使用道具 举报

257#
发表于 2011-4-22 12:53:42 | 显示全部楼层
@jianliulin
unitest这个程序是用于测试unifont字体的,没有什么用处,我忘了改了。

@zxw
sorry!我没看明白你所要表达的意思?wenv都是直接调用GRUB4DOS的功能进行文件处理的。所以GRUB4DOS的要求同样对WENV生效。

@zhaohj
snake,就是一个贪吃蛇游戏,很简单的,用了直接写屏。
vbmp可以自己找一下论坛的专贴。
回复

使用道具 举报

258#
发表于 2011-4-22 13:29:53 | 显示全部楼层
OK,谢谢提醒,ghostpwd和unitest已重新编译。

上面的下载地址文件已经更新。请重新下载(可能需要清空一下缓存)
回复

使用道具 举报

259#
发表于 2011-4-22 17:10:00 | 显示全部楼层
原帖由 zxw 于 2011-4-22 16:15 发表

119015
119016


这样子就明白了。
试试这个,简单处理了一下。

wenv-20110422.zip

14.82 KB, 下载次数: 16, 下载积分: 无忧币 -2

回复

使用道具 举报

260#
发表于 2011-4-22 17:58:16 | 显示全部楼层
原帖由 zxw 于 2011-4-22 17:25 发表
问题依旧。注意:
有两个问题:
一是空格的处理;二是多了个Z。

我测试是正常的,可能是传错了。

20110422175508429.png (8.7 KB, 下载次数: 119)

20110422175508429.png

wenv-2011-04-22.zip

14.82 KB, 下载次数: 33, 下载积分: 无忧币 -2

回复

使用道具 举报

261#
发表于 2011-4-25 16:03:35 | 显示全部楼层
这个位置不是固定的...

@zxw
嘿嘿,发现下面的这个用法很有意思.
command | echo -n | echo -n | echo -n | set command1=
这个用法,很容易被人误解^_^.不明白的人会以为echo有这样的功能呢.

不建议直接取内存地址(因为可能不固定)
可以用规范的语句来获取比如上面的方法或
command | set command1=
set command1=%command1:~22%

也可以输出到内存中再截取比如:
command > (md)0x300+1
cat --skip=22 (md)0x300+1 | set command1=

总之有很多方法,其实并不难获取.

另外,最后执行命令的“返回值”在内存0x4cb00处,更新记录里面有说明.当然了我猜也许你想要的是得到字串符的结果,这个太麻烦.
回复

使用道具 举报

262#
发表于 2011-4-26 02:11:15 | 显示全部楼层
2011-04-25@156
        1.新增两个内置变量@root,@path.
          @root 当前的root.(带路径的).比如 root (hd0,0)/boot 这时的@root是(hd0,0)/boot
          @path 当前默认外部命令查找路径.
        2.修正一个可能导致程序出错的问题.(使用到了临时变量的内存).
                   这个问题在批处理中使用configfile时可能碰到.
        3.批处理代码功能增强.
其它说明:
1.新的版本%~d0已经统一使用(hdx,y)/(fdx)之类的友好格式.

2.另外在批处理中使用%~dpx之类的参数时,如果该参数没有磁盘/路径信息则自动使用批处理文件所在的磁盘/路径信息.(之前的版本,是使用当前root的磁盘和"/"的路径)

3.完善了%~dp参数的提取.支持默认路径.
比如一个批处理文件放在(hd0,0)/boot/grub/下,
文件名是test.bat,并且默认的路径也是(hd0,0)/boot/grub

直接使用test.bat启动这个批处理时,里面的%~dp0将会是(hd0,0)/boot/grub
%0还是test.bat

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

使用道具 举报

263#
发表于 2011-4-26 10:26:52 | 显示全部楼层
@zhaohj

root (hd0,4)/aaa 或 root (hd0,4)/aaa/ 都是一样的,最终的结果都是root (hd0,4)/aaa

@zxw
写错了,嘿嘿
回复

使用道具 举报

264#
发表于 2011-4-26 16:27:05 | 显示全部楼层
这个等以后再说,需要想办法优化调整一下获取参数的代码,否则实现起来比较麻烦,浪费许多代码.

像获取@root,@path之类的就比较简单了,只需要两三行代码就可以.

目前的%~dpx获取到的也不一定是正确的,自己使用小心就行了.
比如
文件test.bat放在当前root下面.

直接执行test.bat获取到的%~dp0就会不对,因为这种情况是处理成使用默认的command path

解决办法就是对于当前root下的文件执行时多加一个''/'',/test.bat这样就行了.

以后有更好的方案再进行改进吧.

[ 本帖最后由 chenall 于 2011-4-26 16:31 编辑 ]
回复

使用道具 举报

265#
发表于 2011-4-27 00:57:55 | 显示全部楼层
明白了,明天再修改,

先试下这个看看是否正常了.

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

使用道具 举报

266#
发表于 2011-4-27 17:01:37 | 显示全部楼层
OK,已经上传,麻烦测试一下是否还有其它问题..

@yjd
好像没有什么好的办法.

可以试试我的方法,WEE菜单第一行直接启动系统或者GRUB4DOS.通过GRUB4DOS来控制菜单.
回复

使用道具 举报

267#
发表于 2011-4-28 17:11:18 | 显示全部楼层
我觉得这个应该由用户自己去控制.

你只考虑到了交换,
万一是覆盖了map /xxxx.img (hd0)之类的,当如何处理?

又假如是取消映射呢map (hd0) (hd0) / map --unmap之类,又当如何处理.

我觉得有些复杂了,如果不能很好的处理,还是保留现状.
回复

使用道具 举报

268#
发表于 2011-4-29 11:22:41 | 显示全部楼层
下个版本再修改一下。。
回复

使用道具 举报

269#
发表于 2011-4-30 18:02:42 | 显示全部楼层
嗯,发现了另外一个BUG,晚上再抽空修改一下..
回复

使用道具 举报

270#
发表于 2011-4-30 22:07:49 | 显示全部楼层
已经更新.

1.取消前面版本对批处理参数的调整.恢复到04-16版.(有点得不偿失,以后有更好的方案再处理)
2.修正一个BUG.(函数print_root_device).
3.批处理参数新增%~f 文件全路径,%~z文件大小.
4.现在批处理脚本可以使用使用errorcheck命令控制是否检测错误(默认错误就退出).
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-23 16:50

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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