无忧启动论坛

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

chkpci外部命令检测硬件ID唯一性的讨论

[复制链接]
跳转到指定楼层
1#
发表于 2010-10-29 11:24:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
随着新版grldr的“|”、“>"管道命令已全面支持,chkpci检测硬件ID的应用也已展开,使用中发现以下问题:
1:虚拟机测试,设置虚拟机的硬盘为SCSI硬盘,SRSID.TXT:
PCI$
$PCI\VEN_1000&DEV_0622=symmpi
$PCI\VEN_1000&DEV_0624=symmpi
$PCI\VEN_1000&DEV_0628=symmpi
$PCI\VEN_1000&DEV_0030=symmpi
$PCI\VEN_1000&DEV_0032=symmpi
$PCI\VEN_1000&DEV_0050=symmpi
$PCI\VEN_1000&DEV_0054=symmpi
$PCI\VEN_1000&DEV_0058=symmpi
$PCI\VEN_1000&DEV_005E=symmpi
$PCI\VEN_1000&DEV_0056=symmpi
$PCI\VEN_1000&DEV_005A=symmpi
$PCI\VEN_1000&DEV_0640=symmpi
$PCI\VEN_1000&DEV_0646=symmpi
$PCI\VEN_1000&DEV_0062=symmpi
使用chkpci -cc:01 /SRSID.TXT,得到$PCI\VEN_1000&DEV_0058=symmpi
-------------------------------------
在SRSID.TXT中删除$PCI\VEN_1000&DEV_0058=symmpi
使用chkpci -cc:01 /SRSID.TXT,得到$PCI\VEN_1000&DEV_0054=symmpi
------------------------------------
再在SRSID.TXT中删除$PCI\VEN_1000&DEV_0058=symmpi
使用chkpci -cc:01 /SRSID.TXT,得到$PCI\VEN_1000&DEV_005E=symmpi
------------------------------------
再在SRSID.TXT中删除$PCI\VEN_1000&DEV_005E=symmpi
使用chkpci -cc:01 /SRSID.TXT,得到空
------------------------------------

我在实机intel主板的机器上,开启AHCI,SRSID.TXT:
PCI$
$PCI\VEN_8086&DEV_27C1=IASTOR
$PCI\VEN_8086&DEV_27C3=IASTOR
$PCI\VEN_8086&DEV_27C5=IASTOR
$PCI\VEN_8086&DEV_27C6=IASTOR
$PCI\VEN_8086&DEV_2681=IASTOR
$PCI\VEN_8086&DEV_2682=IASTOR
$PCI\VEN_8086&DEV_2683=IASTOR78
$PCI\VEN_8086&DEV_2821=IASTOR
$PCI\VEN_8086&DEV_2824=IASTOR78
$PCI\VEN_8086&DEV_2829=IASTOR
$PCI\VEN_8086&DEV_5029=IASTOR78
$PCI\VEN_8086&DEV_2922=IASTOR
$PCI\VEN_8086&DEV_2923=IASTOR78
$PCI\VEN_8086&DEV_2822=IASTOR
$PCI\VEN_8086&DEV_282A=IASTOR
$PCI\VEN_8086&DEV_2925=IASTOR78
$PCI\VEN_8086&DEV_2929=IASTOR
$PCI\VEN_8086&DEV_292C=IASTOR
$PCI\VEN_8086&DEV_3A22=IASTOR
$PCI\VEN_8086&DEV_3A02=IASTOR
$PCI\VEN_8086&DEV_3A23=IASTOR
$PCI\VEN_8086&DEV_3A03=IASTOR
$PCI\VEN_8086&DEV_3A05=IASTOR
$PCI\VEN_8086&DEV_3A25=IASTOR
$PCI\VEN_8086&DEV_3B22=IASTOR
$PCI\VEN_8086&DEV_3B23=IASTOR
$PCI\VEN_8086&DEV_3B24=IASTOR
$PCI\VEN_8086&DEV_3B25=IASTOR
$PCI\VEN_8086&DEV_3B29=IASTOR
$PCI\VEN_8086&DEV_3B2B=IASTOR
$PCI\VEN_8086&DEV_3B2C=IASTOR
$PCI\VEN_8086&DEV_3B2F=IASTOR

使用chkpci -cc:01 /SRSID.TXT,得到$PCI\VEN_8086&DEV_3A02=IASTOR
再按上述方法,分别得到:
$PCI\VEN_8086&DEV_3A02=IASTOR,对应ICH10D AHCI(6 Port)
$PCI\VEN_8086&DEV_3A03=IASTOR,对应ICH10 AHCI(4 Port)
$PCI\VEN_8086&DEV_3A05=IASTOR,对应ICH10 SATA RAID;2010
$PCI\VEN_8086&DEV_3A25=IASTOR,对应ICH10R SATA RAID;2010
$PCI\VEN_8086&DEV_3B22=IASTOR,对应PCH 6 Port SATA AHCI Controller
$PCI\VEN_8086&DEV_3B24=IASTOR,对应PCH SATA Enhanced RAID;2010
$PCI\VEN_8086&DEV_3B25=IASTOR,对应PCH SATA RAID;2010
$PCI\VEN_8086&DEV_3B29=IASTOR,对应PCHM 4 Port SATA AHCI Controller
$PCI\VEN_8086&DEV_3B2B=IASTOR,对应PCHM SATA Enhanced RAID;2010
$PCI\VEN_8086&DEV_3B2C=IASTOR,对应PCHM SATA RAID;2010
$PCI\VEN_8086&DEV_3B2F=IASTOR,对应PCHM 6 Port SATA AHCI Controller

--------------
这就产生同一硬件发生匹配多个ID的情况,虽然最佳匹配生成一个,但有可能是错误的。

[ 本帖最后由 zhaohj 于 2010-10-29 11:39 编辑 ]

照片-0002.jpg (163.9 KB, 下载次数: 197)

照片-0002.jpg

照片-0003.jpg (167.9 KB, 下载次数: 192)

照片-0003.jpg

照片-0007.jpg (167.3 KB, 下载次数: 225)

照片-0007.jpg

照片-0008.jpg (163.46 KB, 下载次数: 169)

照片-0008.jpg
2#
发表于 2010-10-29 12:47:36 | 只看该作者
现在的F6模块不好用?

这个有什么优势?
回复

使用道具 举报

3#
发表于 2010-10-29 13:57:34 | 只看该作者
原帖由 zhaohj 于 2010-10-29 11:24 发表
随着新版grldr的“|”、“>"管道命令已全面支持,chkpci检测硬件ID的应用也已展开,使用中发现以下问题:
1:虚拟机测试,设置虚拟机的硬盘为SCSI硬盘,SRSID.TXT:
PCI$
$PCI\VEN_1000&DEV_0622=symmpi
$PC ...
再在SRSID.TXT中删除$PCI\VEN_1000&DEV_0058=symmpi
使用chkpci -cc:01 /SRSID.TXT,得到$PCI\VEN_1000&DEV_005E=symmpi
...

grub4dos外部命令chkpci是没问题的。楼主遇到的现象也是合理的。


chkpci已经在0PE里实际应用:
可选SRS驱动库,驱动的智能选择与手动选择机制  
通用镜像启动器、通用F6模块(2010-10-22)9MB.rar


关键在于楼主的SRSID.TXT格式不当。可以直接用0PE所带的/SRS/CHKPCI.TXT试试。

[ 本帖最后由 pseudo 于 2010-10-29 14:01 编辑 ]
回复

使用道具 举报

4#
 楼主| 发表于 2010-10-29 14:27:19 | 只看该作者
我想法改成这种格式:
PCI$
$PCI\VEN_1000&DEV_0622
PCI\VEN_1000&DEV_0622=symmpi
$PCI\VEN_1000&DEV_0624
PCI\VEN_1000&DEV_0624=symmpi
$PCI\VEN_1000&DEV_0628
PCI\VEN_1000&DEV_0628=symmpi
$PCI\VEN_1000&DEV_0030
PCI\VEN_1000&DEV_0030=symmpi
$PCI\VEN_1000&DEV_0032
PCI\VEN_1000&DEV_0032=symmpi
$PCI\VEN_1000&DEV_0050
PCI\VEN_1000&DEV_0050=symmpi
$PCI\VEN_1000&DEV_0054
PCI\VEN_1000&DEV_0054=symmpi
$PCI\VEN_1000&DEV_0058
PCI\VEN_1000&DEV_0058=symmpi
$PCI\VEN_1000&DEV_005E
PCI\VEN_1000&DEV_005E=symmpi
$PCI\VEN_1000&DEV_0056
PCI\VEN_1000&DEV_0056=symmpi
$PCI\VEN_1000&DEV_005A
PCI\VEN_1000&DEV_005A=symmpi
$PCI\VEN_1000&DEV_0640
PCI\VEN_1000&DEV_0640=symmpi
$PCI\VEN_1000&DEV_0646
PCI\VEN_1000&DEV_0646=symmpi
$PCI\VEN_1000&DEV_0062
PCI\VEN_1000&DEV_0062=symmpi
-------------
使用chkpci -cc:01 /srsid.txt得到PCI\VEN_1000&DEV_0054=symmpi,正确。
-----------------------
删除
$PCI\VEN_1000&DEV_0054
PCI\VEN_1000&DEV_0054=symmpi
使用chkpci -cc:01 /srsid.txt得到空,这样子也正确,说明目前应该按这种格式。

----------------------------
C大能不能改一下,把格式改成:
PCI$
$PCI\VEN_1000&DEV_0622=symmpi
$PCI\VEN_1000&DEV_0624=symmpi
$PCI\VEN_1000&DEV_0628=symmpi
$PCI\VEN_1000&DEV_0030=symmpi

找到某个匹配,就输出这行。这样看起来爽气一点。
另:匹配ID输出是必需的。

[ 本帖最后由 zhaohj 于 2010-10-29 16:01 编辑 ]
回复

使用道具 举报

5#
 楼主| 发表于 2010-10-29 15:59:24 | 只看该作者
最终看C大定夺了。
目前的方法,自己用程序处理也简单,不过C大少许一改,我们轻松多了。
已经做好了SRSID2.LST、SIF2.LST、OEM2.LST(原SRSID.TXT、TXTSETUP.SIF、TXTSETUP.OEM转CHKPCI格式),GRUB4DOS下处理速度实在是太快了。
回复

使用道具 举报

6#
 楼主| 发表于 2010-10-29 16:06:23 | 只看该作者
原帖由 dvd008 于 2010-10-29 12:47 发表
现在的F6模块不好用?

这个有什么优势?


最大的优势是可以不要DOS了,兼容性就大大提高。

而且100%返回到启动设备。
回复

使用道具 举报

7#
发表于 2010-10-29 22:01:47 | 只看该作者
这样子就失去了灵活性。
目前的格式虽然编写会麻烦一点(也只是多写一行而已),但是很灵活。

因为我不知道你最终的目的是什么,所以我无法给你其它答复。
回复

使用道具 举报

8#
 楼主| 发表于 2010-10-29 22:47:28 | 只看该作者
原帖由 chenall 于 2010-10-29 22:01 发表
这样子就失去了灵活性。
目前的格式虽然编写会麻烦一点(也只是多写一行而已),但是很灵活。

因为我不知道你最终的目的是什么,所以我无法给你其它答复。


最终的结果是输出:id 、驱动名
形如:
PCI\VEN_1000&DEV_0622=symmpi
回复

使用道具 举报

9#
发表于 2010-10-29 23:32:43 | 只看该作者
好期待,这样不用进系统就能测试驱动是否支持!!!!
回复

使用道具 举报

10#
 楼主| 发表于 2010-10-30 16:55:11 | 只看该作者
SRSID.TXT:
PCI$
$PCI\VEN_8086&DEV_7111
intelide
$PCI\VEN_1000&DEV_0054
LSI_SAS
...
------------------
chkpci -cc:01 /SRSID.TXT 得到
intelide
LSI_SAS

虚拟机测试,实机可能很少会发生。

[ 本帖最后由 zhaohj 于 2010-10-30 16:58 编辑 ]
回复

使用道具 举报

11#
发表于 2010-10-30 17:10:20 | 只看该作者
C大可以给个特殊的参数,如果加上那个特殊参数,就满足z大的需求,就可以了。不知可行否。
回复

使用道具 举报

12#
 楼主| 发表于 2010-10-30 18:06:11 | 只看该作者
现在采取这样的办法:如果有多个匹配,取最后一个。哈哈,没办法的办法。
本来比较简单:chkpci -cc:01 /srsid.txt | wenv set a=
有多个匹配:   chkpci -cc:01 /srsid.txt > (fd0)TEMP
                     wenv for /f %i in ( (fd0)/TEMP ) do (...)

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

使用道具 举报

13#
发表于 2010-10-30 18:38:03 | 只看该作者
差不多了就放出来,正准备刻盘呢
回复

使用道具 举报

14#
发表于 2010-10-30 21:48:11 | 只看该作者
顶!!!,很多人都等着测试!!!
回复

使用道具 举报

15#
发表于 2010-10-30 22:10:12 | 只看该作者
如果grub4dos支持JPG或PNG文件,再加chkpci、wenv、fbinst等,其他的如ms、eb、syslinux、avldr这些装载器等都可以不要了!
回复

使用道具 举报

16#
 楼主| 发表于 2010-10-31 01:56:28 | 只看该作者
原帖由 dvd008 于 2010-10-30 18:38 发表
差不多了就放出来,正准备刻盘呢


别急,这几天肯定能放出,至少自己先测试通过。主要的几个模块已全部通过,再拼装一下。
驱动不算,几个LST加外部命令,不到100k,计算速度实在太快了。
回复

使用道具 举报

17#
发表于 2010-10-31 09:16:48 | 只看该作者
支持 ZHAOHJ,一直在关注SRS F6,现在终于可以脱离DOS了,以前一直对进入DOS觉得不妥,现在终于有希望完全脱离DOS了.
回复

使用道具 举报

18#
发表于 2010-10-31 09:49:44 | 只看该作者
原帖由 sgw888 于 2010-10-31 09:16 发表
支持 ZHAOHJ,一直在关注SRS F6,现在终于可以脱离DOS了,以前一直对进入DOS觉得不妥,现在终于有希望完全脱离DOS了.

同感                                                      ·
回复

使用道具 举报

19#
发表于 2010-10-31 11:30:15 | 只看该作者
支持一下zhaohj,这样没有了dos环境,就不用担心版权问题,完善了以后发布到bootland

到时我再修改一下,增加一个菜单,供用户把XP安装到一个文件当中

[ 本帖最后由 zhhsh 于 2010-10-31 11:33 编辑 ]
回复

使用道具 举报

20#
 楼主| 发表于 2010-11-1 00:12:26 | 只看该作者
差不多搞好了,一不小心远程电脑定时时间到了自动关闭,如果11.1不太忙,放出测试版。
目前对OEM驱动的处理不太满意,主要是FAT命令目前不支持通配符*,PXE启动又无法列表,就简化处理了。
回复

使用道具 举报

21#
发表于 2010-11-1 14:49:03 | 只看该作者
前几天都比较忙,只是偶尔上来一下.
支持zhaohj..

关于chkpci有什么需要改进的,我尽量吧.其实你们也可以自己改的,嘿嘿,懂点C语言其实并不难.
回复

使用道具 举报

22#
发表于 2010-11-1 14:50:49 | 只看该作者
原帖由 zhaohj 于 2010-10-30 16:55 发表
SRSID.TXT:
PCI$
$PCI\VEN_8086&DEV_7111
intelide
$PCI\VEN_1000&DEV_0054
LSI_SAS
...
------------------
chkpci -cc:01 /SRSID.TXT 得到
intelide
LSI_SAS

虚拟机测试,实机可能很少会发生。


好像看起来没有什么不正常呀..

你可以直接执行不加参数的chkpci显示所有ID列表来对比一下.
回复

使用道具 举报

23#
 楼主| 发表于 2010-11-1 15:18:43 | 只看该作者
是正常的,但如果匹配出两个驱动,肯定得两选一,或者得改一下驱动了。
chkpci我还是喜欢这样的格式:
PCI$
$PCI\VEN_8086&DEV_7111=intelide
$PCI\VEN_1000&DEV_0054=LSI_SAS

匹配后就显示本行($除外)
回复

使用道具 举报

24#
发表于 2010-11-1 15:51:24 | 只看该作者
原帖由 chenall 于 2010-11-1 14:49 发表
前几天都比较忙,只是偶尔上来一下.
支持zhaohj..

关于chkpci有什么需要改进的,我尽量吧.其实你们也可以自己改的,嘿嘿,懂点C语言其实并不难.


我倒是有兴趣,可以简单介绍下开发环境和工具吗?
回复

使用道具 举报

25#
发表于 2010-11-1 15:53:46 | 只看该作者
原帖由 Plantsoot 于 2010-11-1 15:51 发表


我倒是有兴趣,可以简单介绍下开发环境和工具吗?

你可以看一下.
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=159851&page=30#pid2050744
回复

使用道具 举报

26#
发表于 2010-11-1 15:54:17 | 只看该作者
原帖由 zhaohj 于 2010-11-1 15:18 发表
是正常的,但如果匹配出两个驱动,肯定得两选一,或者得改一下驱动了。
chkpci我还是喜欢这样的格式:
PCI$
$PCI\VEN_8086&DEV_7111=intelide
$PCI\VEN_1000&DEV_0054=LSI_SAS

匹配后就显示本行($除外)


我再加一个参数实现这样的输出好了.
回复

使用道具 举报

27#
发表于 2010-11-1 16:29:49 | 只看该作者
原帖由 zhaohj 于 2010-11-1 15:18 发表
是正常的,但如果匹配出两个驱动,肯定得两选一,或者得改一下驱动了。
chkpci我还是喜欢这样的格式:
PCI$
$PCI\VEN_8086&DEV_7111=intelide
$PCI\VEN_1000&DEV_0054=LSI_SAS

匹配后就显示本行($除外)


试试刚刚上传的版本.
添加了一个参数(字母的o)-o
应该可以满足你的要求,你试一下.
回复

使用道具 举报

28#
发表于 2010-11-1 16:30:47 | 只看该作者
原帖由 friend8179 于 2010-11-1 15:56 发表
是直接在linux用GCC命令编译的?


嗯.

/*
* compile:
gcc -nostdlib -fno-zero-initialized-in-bss -fno-function-cse -fno-jump-tables -Wl,-N -fPIE chkpci.c
* disassemble:   objdump -d a.out
* confirm no relocation: readelf -r a.out
* generate executable:  objcopy -O binary a.out chkpci
*
*/
回复

使用道具 举报

29#
 楼主| 发表于 2010-11-1 17:33:03 | 只看该作者
原帖由 chenall 于 2010-11-1 16:29 发表


试试刚刚上传的版本.
添加了一个参数(字母的o)-o
应该可以满足你的要求,你试一下.


好啊,但没通过,chkpci -cc:01 -o /SRS/SRSID.TXT

Snap1.jpg (49.89 KB, 下载次数: 159)

Snap1.jpg
回复

使用道具 举报

30#
发表于 2010-11-1 17:34:14 | 只看该作者

回复 #25 chenall 的帖子

多谢Chenall兄,果然是linux环境下的C语言编程。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-17 07:54

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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