无忧启动论坛

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

GRUB4DOS更新建议、bug反馈专帖

    [复制链接]
跳转到指定楼层
1#
发表于 2010-11-5 18:03:03 | 显示全部楼层 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖主要为对grub4dos的建议,或是bug的反馈,问题请去问题专帖。          by  sratlf

===================================================================

cat命令的语法是这样的:
cat [--hex] [--skip=S] [--length=L] [--locate=STRING] [--locate-align=A] FILE

--locate=STRING :查找文件中指定字符串的位置,有几个就输出几个
如文件内容:
PCI$
$PCI\VEN_1000&DEV_0050=lsi_sas                  <----------占30+2个字节=0x20
$PCI\VEN_1000&DEV_0056=lsi_sas   
$PCI\VEN_1000&DEV_005A=lsi_sas
$PCI\VEN_1000&DEV_0062=lsi_sas
$PCI\VEN_1000&DEV_0054=lsi_sas
$PCI\VEN_1000&DEV_0058=lsi_sas
$PCI\VEN_1000&DEV_005E=lsi_sas
-----------
--locate=$PCI,会输出16进制的数值,用空格分开,上面回车换行占2个字节:
6 26 46 66 86 a6 c6


[--skip=S]  跳过多少字节开始,这里S是10进制数或16进制数

----------------------------------
问题1:--locate=STRING如果输出16进制,建议输出格式改成0x6 0x26 0x46 ...
问题2:--skip=S 与上面对应为16进制。
问题3:希望加个参数,STRING不分大小写
...

[ 本帖最后由 zhaohj 于 2010-11-11 09:48 编辑 ]

点评

www.13958867733.com/info/XrEFcWfFXrE/ 庶女嫡妃  发表于 2015-3-26 18:15
2#
 楼主| 发表于 2010-11-5 22:13:01 | 显示全部楼层
原帖由 chenall 于 2010-11-5 19:12 发表
我觉得这些不是很重要的东西尽量不要使用内部的命令去实现。

你可以把你最终想要得到的结果贴出来。
注:是最终的目的,而不是使用这个命令要达到的过程,也许会有更好的解决方案。

看看tuxw或zxw能不能 ...


[aaaa]
sgrhgjhm
zbgnhgj
[bbbb]
sytrhy
hnh
-------------------
我的目的很简单,如:INIFILE 文件名 [aaaa]
显示[aaaa]段录内容
回复

使用道具 举报

3#
 楼主| 发表于 2010-11-6 14:36:39 | 显示全部楼层
最近几天一直在分析N版的F6驱动(oem格式驱动),在现有的条件下,要想实现原SRS_F6返回模块的仿真盘功能实在太难了。而且很多oem驱动包也是这种格式的,下面贴出一部分,方便分析:

现有条件:只知道(1)
需要达到的目的:
  1:需要提取对应段落(2)段落名,提取出ICH10DAHCI
  2:需要提取对应段落(4),及所有sys扩展名的文件名、所有inf扩展名的文件名
  3:需要提取 “相对目录"

为何要这么做?
  1:需要(2)是为了修改默认SCSI
      也为了方便修改成单ID
  2:需要知道文件名及路径,主要是fat copy需要完整路径的文件名

[ 本帖最后由 zhaohj 于 2010-11-6 16:04 编辑 ]

F6.JPG (132.41 KB, 下载次数: 790)

F6.JPG
回复

使用道具 举报

4#
 楼主| 发表于 2010-11-6 15:51:17 | 显示全部楼层
原帖由 tuxw 于 2010-11-5 22:26 发表
可以用 WENV 命令实现,只是步骤麻烦了点



你这个最大的问题:[bbbb]段落名不可能预先知道的。
回复

使用道具 举报

5#
 楼主| 发表于 2010-11-6 16:14:26 | 显示全部楼层
原帖由 tuxw 于 2010-11-6 15:59 发表
可以先查找 [aaaa] 再查找 [
如果  不可预知,用 INIFILE 的方式更不可能实现,INI 是必须要知道段名和变量名才可以操作的


inifile  a:\txtsetup.oem [aaaa]>f6.tmp
DOS下就这么简单提取出了[aaaa]段落的内容
回复

使用道具 举报

6#
 楼主| 发表于 2010-11-6 20:14:55 | 显示全部楼层
我也测试是这样,批处理中无法使用wenv check
本来想用wenv for /f "delims= " %i in ("STRING”) do set s=%i 来获取16进制的第一个数值
发觉“ ”空格分隔符不起作用了。
----------
要用到新版的>>,看来得等到grldr修正了。
回复

使用道具 举报

7#
 楼主| 发表于 2010-11-6 22:54:46 | 显示全部楼层
想把文本中注释先过滤掉,下面的命令竟然不行:
cat --length=0 (fd1)/txtsetup.oem && fat mkfile size=* (fd1)/temp
echo ; > (fd1)/temp
wenv for /f "eol=# delims=" %i in ( (fd1)/txtsetup.oem ) do (set a=%i ; echo $${a} >> (fd1)/temp)

不知哪里错了?帮忙测试一下

不过滤掉的话,比如[Disks],会找到多个,不知道哪个是需要的。

[ 本帖最后由 zhaohj 于 2010-11-6 23:06 编辑 ]

txtsetup.rar

1.55 KB, 下载次数: 93, 下载积分: 无忧币 -2

回复

使用道具 举报

8#
 楼主| 发表于 2010-11-6 23:16:49 | 显示全部楼层
这个问题的发现,主要是locate=[ 时,象F6的txtsetup.oem有太多的[,导致变量值超过512。

我上传这个txtsetup.oem,比较大。

[ 本帖最后由 zhaohj 于 2010-11-6 23:18 编辑 ]

txtsetup.rar

2.42 KB, 下载次数: 92, 下载积分: 无忧币 -2

回复

使用道具 举报

9#
 楼主| 发表于 2010-11-6 23:31:39 | 显示全部楼层
#20楼还是有问题,你再测试一下,我的理解,应该do (...)
应该每个循环执行()中的命令
回复

使用道具 举报

10#
 楼主| 发表于 2010-11-7 00:12:23 | 显示全部楼层
新版grldr测试版,发觉cat命令的bug

Snap1.jpg (15.42 KB, 下载次数: 458)

Snap1.jpg
回复

使用道具 举报

11#
 楼主| 发表于 2010-11-7 10:38:10 | 显示全部楼层
呵呵,我也正在考虑这个问题呢!要么在cat中加参数--length=1024,控制搜索范围,要么放在文件中。
---------------
变量溢出的问题,我认为WENV应该自动截断比较好。

缓冲区地址,默认改成0x65000
WENV calc _ini_tmp=_ini_s1+${_ini_sc,?}+2

[ 本帖最后由 zhaohj 于 2010-11-7 10:52 编辑 ]
回复

使用道具 举报

12#
 楼主| 发表于 2010-11-7 11:02:29 | 显示全部楼层
下面有可能出现溢出:
:查找下一个可能的段
WENV calc _ini_tmp=_ini_s1+${_ini_sc,?}+2
debug 0
WENV call cat --skip=${_ini_tmp} --locate=[ ${_ini_fn}
debug 1
WENV calc _ini_cnt=${?_WENV}

Snap1.jpg (96.79 KB, 下载次数: 393)

Snap1.jpg
回复

使用道具 举报

13#
 楼主| 发表于 2010-11-7 11:12:03 | 显示全部楼层
另外,不知道--locate-align=A是什么意思?
输入a=1,2...好像控制输出结果



-------------
还是控制一下长度算了,--length=2048,段长不可能超过2K的。
wenv set _ini_len=2048

cat命令应该加个参数--count=N

[ 本帖最后由 zhaohj 于 2010-11-7 11:19 编辑 ]
回复

使用道具 举报

14#
 楼主| 发表于 2010-11-7 11:33:06 | 显示全部楼层
WENV calc _ini_cnt=${?_WENV}
是否有问题,找到1个的情况,这个变量也不存在。wenv的bug?

[ 本帖最后由 zhaohj 于 2010-11-7 11:34 编辑 ]

Snap1.jpg (15.36 KB, 下载次数: 429)

Snap1.jpg
回复

使用道具 举报

15#
 楼主| 发表于 2010-11-7 12:39:19 | 显示全部楼层
重大bug发现:数字9不能用在变量中

[ 本帖最后由 zhaohj 于 2010-11-7 12:41 编辑 ]

Snap1.jpg (84.62 KB, 下载次数: 395)

Snap1.jpg
回复

使用道具 举报

16#
 楼主| 发表于 2010-11-7 15:14:08 | 显示全部楼层
WENV set -t _ini_fn=${INIFILE%%[}
WENV set -t _ini_sc=${INIFILE#${_ini_fn}}
WENV check " "<-"${_ini_sc}" (set -t _ini_buf=${_ini_sc#]} ; set _ini_sc=${_ini_sc%% })

你多了一个$,变量值空格会自动删除
dd需要事先建一定大小文件,用FAT

--------------------
很好,测试全面通过!

[ 本帖最后由 zhaohj 于 2010-11-7 15:32 编辑 ]
回复

使用道具 举报

17#
 楼主| 发表于 2010-11-7 15:38:14 | 显示全部楼层
19#最后一个【】

Snap1.jpg (50.93 KB, 下载次数: 389)

Snap1.jpg
回复

使用道具 举报

18#
 楼主| 发表于 2010-11-7 18:11:10 | 显示全部楼层
cat --locate=字符串不能超过16个,>16个字符就出错。

要让C大查一下了。

不然要先判断这个变量的长度,超过往前截断。

WENV check " "<-"${_ini_sc}" (set -t _ini_buf=$${_ini_sc#]} ; set _ini_sc=$${_ini_sc%% })
:目前cat最多只能匹配16个字符
WENV check ${_ini_sc,?}>=17 set _ini_sc=${_ini_sc:-16}
这样就正常了。

如果scsi.后面8个字符,这样    x.scsi.12345678]
                                 位数  1                   16
这样就很不保险。还不如把最后的]去掉,从倒数17开始取16位
WENV check ${_ini_sc,?}>=17 set _ini_sc=${_ini_sc:-17:16}

-------------
看下面:
      [HardwareIds.scsi.SIL3X12R]
                  [Files.scsi.SIL3X12R]
取倒数16个字符  s.scsi.SIL3X12R]
正好重叠,这样唯一性很难保证
另,cat区分大小写也是一个问题

[ 本帖最后由 zhaohj 于 2010-11-7 19:05 编辑 ]

Snap1.jpg (23.64 KB, 下载次数: 407)

Snap1.jpg
回复

使用道具 举报

19#
 楼主| 发表于 2010-11-7 21:05:12 | 显示全部楼层
[HardwareIds.scsi.SIL3X12R]
id="PCI\VEN_1095&DEV_3112&CC_0104","Si3112r"
id="PCI\VEN_1095&DEV_3512&CC_0104","Si3112r"
[HardwareIds.scsi.SIL3X12S]
id="PCI\VEN_1095&DEV_3112&CC_0180","Si3112"
id="PCI\VEN_1095&DEV_3512&CC_0180","Si3112"
[HardwareIds.scsi.MSASXP]
id="PCI\VEN_1000&DEV_0060&SUBSYS_10001458","MSASXP"
[HardwareIds.scsi.SYMMPI]
id="PCI\VEN_1000&DEV_0622","SYMMPI"
id="PCI\VEN_1000&DEV_0624","SYMMPI"
-----------------
取前16个字符能行吗?
回复

使用道具 举报

20#
 楼主| 发表于 2010-11-7 22:43:37 | 显示全部楼层
先看看C大怎么说,为何cat是16个,方便的话能否修改,并适当增加功能。
如16进制的输出,字符串大小写区分,字符串长度限制。
回复

使用道具 举报

21#
 楼主| 发表于 2010-11-8 16:55:34 | 显示全部楼层
现在对wenv switch有点模糊了,最好加个help,时间一长容易忘记。
如:WENV switch -h
       出现帮助信息
---------------------
我记得wenv for 默认会取消前后引号,测试也正常
现在switch是111111,6位,怎样保持前后引号输出?

------------------
知道了,???0

        位号:1  2  3  4  5  6
                 ?   ?  ?  ?  ?  ?
        默认  1  1  1  1  1  1
                |   |  |   |  |   |____  NOT_TRUNC, 为0时命令行超出512字节部分截断,并自动设置为1
                |   |  |   |  |
                |   |  |   |  |______  转义符 \ 当普通字符输出
                |   |  |   |
                |   |  |   |________  操作变量时去掉前后引号(不影响check)
                |   |  |
                |   |  |__________  数值转字符串时用10进制
                |   |
                |   |____________  数值计算结果取64位
                |
                |______________  ECHO自动自动换行

[ 本帖最后由 zhaohj 于 2010-11-8 18:02 编辑 ]
回复

使用道具 举报

22#
 楼主| 发表于 2010-11-8 23:42:55 | 显示全部楼层
想在循环里运行你的批处理,看来还得改造成wenv read bat格式的。

但这么多判断语句,好像根本无法实现。

举例说明,下面这段:
[scsi]
ICH6RAHCI="INTEL ICH6R AHCI"
ICH6MAHCI="INTEL ICH6M AHCI"
ICH6RRAID="INTEL ICH6R RAID"

[HardwareIds.scsi.ICH6RAHCI]
id="PCI\VEN_8086&DEV_2652&CC_0106","iaStor"
[HardwareIds.scsi.ICH6MAHCI]
id="PCI\VEN_8086&DEV_2653&CC_0106","iaStor"
[HardwareIds.scsi.ICH6RRAID]
id="PCI\VEN_8086&DEV_2652&CC_0104","iaStor"

我现在只知道 id 值,只有通过批处理取出[scsi]段内容如生成FILE,然后wenv for /f  "delims==" %i in ( FILE ) do (set a=%i,set INIFILE=OEM [HardwareIds.scsi.$${a}] ; ...

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

使用道具 举报

23#
 楼主| 发表于 2010-11-9 00:15:45 | 显示全部楼层
问题反过来了,知道某段落的部分内容,反查段落名。
回复

使用道具 举报

24#
 楼主| 发表于 2010-11-9 07:58:49 | 显示全部楼层
想不到凌晨3点还在忙,辛苦了。万分感谢实现了我的需求。

今天好好测试,不能辜负你的成果!
回复

使用道具 举报

25#
 楼主| 发表于 2010-11-11 10:28:39 | 显示全部楼层
留下两个问题:
1:PXE列表问题
2:ZIP支持问题
回复

使用道具 举报

26#
 楼主| 发表于 2010-11-12 22:37:11 | 显示全部楼层
C大,11-6的grldr测试版总算发现问题了:
http://bbs.wuyou.net/forum.php?m ... p;page=9#pid2083067
回复

使用道具 举报

27#
 楼主| 发表于 2010-11-15 17:04:25 | 显示全部楼层
configfile会改变debug状态为debug 1,这个看来是grldr的bug
回复

使用道具 举报

28#
 楼主| 发表于 2010-11-15 22:10:54 | 显示全部楼层
但下面这个肯定是bug,为何现在find会终止或找不到文件,可能与这个有关:
返回值不应该Error 15,不然终止了。
目前只有errorcheck off

[ 本帖最后由 zhaohj 于 2010-11-15 22:17 编辑 ]

Snap1.jpg (15.05 KB, 下载次数: 323)

Snap1.jpg
回复

使用道具 举报

29#
 楼主| 发表于 2010-11-16 09:31:12 | 显示全部楼层
测试版感觉总还有点问题,我同样的菜单,一个能执行,一个就无论如何执行不下去。
下面是虚拟成(fd2)的,find找不到

Snap1.jpg (70.06 KB, 下载次数: 296)

Snap1.jpg
回复

使用道具 举报

30#
 楼主| 发表于 2010-11-16 09:35:49 | 显示全部楼层
而当root (fd2)时就没问题

Snap2.jpg (57.31 KB, 下载次数: 295)

Snap2.jpg
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-4-20 03:13

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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