无忧启动论坛

标题: chkpci外部命令检测硬件ID唯一性的讨论 [打印本页]

作者: zhaohj    时间: 2010-10-29 11:24
标题: chkpci外部命令检测硬件ID唯一性的讨论
随着新版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, 下载次数: 251)

照片-0002.jpg

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

照片-0003.jpg

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

照片-0007.jpg

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

照片-0008.jpg

作者: dvd008    时间: 2010-10-29 12:47
现在的F6模块不好用?

这个有什么优势?
作者: pseudo    时间: 2010-10-29 13:57
原帖由 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 编辑 ]
作者: zhaohj    时间: 2010-10-29 14:27
我想法改成这种格式:
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 编辑 ]
作者: zhaohj    时间: 2010-10-29 15:59
最终看C大定夺了。
目前的方法,自己用程序处理也简单,不过C大少许一改,我们轻松多了。
已经做好了SRSID2.LST、SIF2.LST、OEM2.LST(原SRSID.TXT、TXTSETUP.SIF、TXTSETUP.OEM转CHKPCI格式),GRUB4DOS下处理速度实在是太快了。
作者: zhaohj    时间: 2010-10-29 16:06
原帖由 dvd008 于 2010-10-29 12:47 发表
现在的F6模块不好用?

这个有什么优势?


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

而且100%返回到启动设备。
作者: chenall    时间: 2010-10-29 22:01
这样子就失去了灵活性。
目前的格式虽然编写会麻烦一点(也只是多写一行而已),但是很灵活。

因为我不知道你最终的目的是什么,所以我无法给你其它答复。
作者: zhaohj    时间: 2010-10-29 22:47
原帖由 chenall 于 2010-10-29 22:01 发表
这样子就失去了灵活性。
目前的格式虽然编写会麻烦一点(也只是多写一行而已),但是很灵活。

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


最终的结果是输出:id 、驱动名
形如:
PCI\VEN_1000&DEV_0622=symmpi
作者: jianliulin    时间: 2010-10-29 23:32
好期待,这样不用进系统就能测试驱动是否支持!!!!
作者: 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

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

[ 本帖最后由 zhaohj 于 2010-10-30 16:58 编辑 ]
作者: Plantsoot    时间: 2010-10-30 17:10
C大可以给个特殊的参数,如果加上那个特殊参数,就满足z大的需求,就可以了。不知可行否。
作者: zhaohj    时间: 2010-10-30 18:06
现在采取这样的办法:如果有多个匹配,取最后一个。哈哈,没办法的办法。
本来比较简单: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 编辑 ]
作者: dvd008    时间: 2010-10-30 18:38
差不多了就放出来,正准备刻盘呢
作者: jianliulin    时间: 2010-10-30 21:48
顶!!!,很多人都等着测试!!!
作者: hhh333    时间: 2010-10-30 22:10
如果grub4dos支持JPG或PNG文件,再加chkpci、wenv、fbinst等,其他的如ms、eb、syslinux、avldr这些装载器等都可以不要了!
作者: zhaohj    时间: 2010-10-31 01:56
原帖由 dvd008 于 2010-10-30 18:38 发表
差不多了就放出来,正准备刻盘呢


别急,这几天肯定能放出,至少自己先测试通过。主要的几个模块已全部通过,再拼装一下。
驱动不算,几个LST加外部命令,不到100k,计算速度实在太快了。
作者: sgw888    时间: 2010-10-31 09:16
支持 ZHAOHJ,一直在关注SRS F6,现在终于可以脱离DOS了,以前一直对进入DOS觉得不妥,现在终于有希望完全脱离DOS了.
作者: jianliulin    时间: 2010-10-31 09:49
原帖由 sgw888 于 2010-10-31 09:16 发表
支持 ZHAOHJ,一直在关注SRS F6,现在终于可以脱离DOS了,以前一直对进入DOS觉得不妥,现在终于有希望完全脱离DOS了.

同感                                                      ·
作者: zhhsh    时间: 2010-10-31 11:30
支持一下zhaohj,这样没有了dos环境,就不用担心版权问题,完善了以后发布到bootland

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

[ 本帖最后由 zhhsh 于 2010-10-31 11:33 编辑 ]
作者: zhaohj    时间: 2010-11-1 00:12
差不多搞好了,一不小心远程电脑定时时间到了自动关闭,如果11.1不太忙,放出测试版。
目前对OEM驱动的处理不太满意,主要是FAT命令目前不支持通配符*,PXE启动又无法列表,就简化处理了。
作者: chenall    时间: 2010-11-1 14:49
前几天都比较忙,只是偶尔上来一下.
支持zhaohj..

关于chkpci有什么需要改进的,我尽量吧.其实你们也可以自己改的,嘿嘿,懂点C语言其实并不难.
作者: chenall    时间: 2010-11-1 14:50
原帖由 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列表来对比一下.
作者: zhaohj    时间: 2010-11-1 15:18
是正常的,但如果匹配出两个驱动,肯定得两选一,或者得改一下驱动了。
chkpci我还是喜欢这样的格式:
PCI$
$PCI\VEN_8086&DEV_7111=intelide
$PCI\VEN_1000&DEV_0054=LSI_SAS

匹配后就显示本行($除外)
作者: Plantsoot    时间: 2010-11-1 15:51
原帖由 chenall 于 2010-11-1 14:49 发表
前几天都比较忙,只是偶尔上来一下.
支持zhaohj..

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


我倒是有兴趣,可以简单介绍下开发环境和工具吗?
作者: chenall    时间: 2010-11-1 15:53
原帖由 Plantsoot 于 2010-11-1 15:51 发表


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

你可以看一下.
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=159851&page=30#pid2050744
作者: chenall    时间: 2010-11-1 15:54
原帖由 zhaohj 于 2010-11-1 15:18 发表
是正常的,但如果匹配出两个驱动,肯定得两选一,或者得改一下驱动了。
chkpci我还是喜欢这样的格式:
PCI$
$PCI\VEN_8086&DEV_7111=intelide
$PCI\VEN_1000&DEV_0054=LSI_SAS

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


我再加一个参数实现这样的输出好了.
作者: chenall    时间: 2010-11-1 16:29
原帖由 zhaohj 于 2010-11-1 15:18 发表
是正常的,但如果匹配出两个驱动,肯定得两选一,或者得改一下驱动了。
chkpci我还是喜欢这样的格式:
PCI$
$PCI\VEN_8086&DEV_7111=intelide
$PCI\VEN_1000&DEV_0054=LSI_SAS

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


试试刚刚上传的版本.
添加了一个参数(字母的o)-o
应该可以满足你的要求,你试一下.
作者: chenall    时间: 2010-11-1 16:30
原帖由 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
*
*/
作者: zhaohj    时间: 2010-11-1 17:33
原帖由 chenall 于 2010-11-1 16:29 发表


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


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

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

Snap1.jpg

作者: Plantsoot    时间: 2010-11-1 17:34
标题: 回复 #25 chenall 的帖子
多谢Chenall兄,果然是linux环境下的C语言编程。
作者: chenall    时间: 2010-11-1 18:33
@zhaohj

弄错了,已经修改重新上传.

另外可以顺便测试一下这个测试的GRLDR,应该会有些用处.

加了 >> 操作符(不改变文件大小).

比如(test.txt文件已经存在,并且有足够的大小)
//第一句写入abcd\0
echo abcd > (hd0,0)/test.txt
//接在abcd后面写入.
echo def >> (hd0,0)/test.txt
echo 1234 >> (hd0,0)/test.txt

得到的test.txt里面的开头内容会是
abcddef1234
使用了一个字符串的结束符号"\0"(十六进制的0)分隔(不清楚的就不用管这个了这是程序的内部处理机制.了解C语言编程的就比较清楚).

[ 本帖最后由 chenall 于 2010-11-1 23:25 编辑 ]

grldr_test.rar

115.95 KB, 下载次数: 62, 下载积分: 无忧币 -2


作者: zhaohj    时间: 2010-11-1 22:22
>>太有用了,在我刚发布的SRSF6测试版中,为了写入字符串到文本,花费了很多精力。很大一部分是计算上下行的指针的,即--offset。
另:这个转义符“\”也特难处理。
作者: chenall    时间: 2010-11-1 23:23
原帖由 zhaohj 于 2010-11-1 22:22 发表
>>太有用了,在我刚发布的SRSF6测试版中,为了写入字符串到文本,花费了很多精力。很大一部分是计算上下行的指针的,即--offset。
另:这个转义符“\”也特难处理。


有没有什么例子,或许可以通过编程手段来简化处理的工作.
作者: zhaohj    时间: 2010-11-1 23:31
新版chkpci及grldr新功能测试都通过,这下省力多了。

还有一个问题很难处理:如果一个变量值中存在转义符'\",很难处理。当初用“\”做转义符真是一个错误。
希望有一个功能,这个“\"转义符能用其他代替(或切换),如%

如wenv set a=$PCI\VEN_1000&DEV_0054
wenv echo ${a} >> (fd1)/srsid.txt

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

Snap1.jpg (45.93 KB, 下载次数: 168)

Snap1.jpg

作者: chenall    时间: 2010-11-1 23:57
原帖由 zhaohj 于 2010-11-1 23:31 发表
新版chkpci及grldr新功能测试都通过,这下省力多了。

还有一个问题很难处理:如果一个变量值中存在转义符'\",很难处理。当初用“\”做转义符真是一个错误。
希望有一个功能,这个“\"转义符能用其他代替( ...


任何事物都有两面的,呵呵.

关于echo我们可以加个参数控制它让不转义..
作者: zhaohj    时间: 2010-11-2 00:09
wenv中,tuxw加入的新功能还是不错的,loop、break、switch
switch已加入echo控制换行功能。

C大如果更新,希望加入loop、break。
作者: chenall    时间: 2010-11-2 00:20
原帖由 zhaohj 于 2010-11-2 00:09 发表
wenv中,tuxw加入的新功能还是不错的,loop、break、switch
switch已加入echo控制换行功能。

C大如果更新,希望加入loop、break。


已经上传了新版WENV.我最近没有多少时间,就不整合了.你也可以等待tuxw的更新.

只是对echo命令进行了扩展,默认不允许转义输出.并且自动加回车符.

     1).-e 允许转义输出.
        比如\n是一个回车。
     2).-n 输出不自动加回车符.
作者: zhaohj    时间: 2010-11-2 10:22
今天测试了Intel芯片组的SRS驱动,其中有:
$PCI\VEN_8086&DEV_3A22=IASTOR
$PCI\VEN_197B&DEV_2368=PCIIDE
...
检测的结果应该是正常的,但PCIIDE驱动是BUS驱动,AHCI并不需要它。对驱动不是很了解,想法是程序能否设别这个是BUS驱动并能控制输出?
我们的目的主要是AHCI\RAID有关的ID信息。
作者: chenall    时间: 2010-11-2 15:40
你应该显示一下chkpci不太带数的ID列表,看看是否有什么区别.
作者: zhaohj    时间: 2010-11-2 17:17
原帖由 chenall 于 2010-11-2 15:40 发表
你应该显示一下chkpci不太带数的ID列表,看看是否有什么区别.


不带参数的ID列表,也是输出两行。
现在的问题是:如果是IDE硬盘,chkpci不太带数的ID列表会输出Bus驱动的ID
                     如果是ahci/raid硬盘,chkpci不太带数的ID列表除了输出Bus驱动的ID,再输出ahci/raid的ID。
我想这是有问题的。
作者: chenall    时间: 2010-11-2 18:05
原帖由 zhaohj 于 2010-11-2 17:17 发表


不带参数的ID列表,也是输出两行。
现在的问题是:如果是IDE硬盘,chkpci不太带数的ID列表会输出Bus驱动的ID
                     如果是ahci/raid硬盘,chkpci不太带数的ID列表除了输出Bus驱动的ID,再 ...


没能明白具体的意思,最好是能上图.
作者: zhaohj    时间: 2010-11-2 18:56
简单地讲,怎样排除非AHCI/RAID的ID
比如虚拟机VM,硬盘是SCSI,lsi_1068
下面的PCI\VEN_8086&DEV_7111是bus驱动的ID,这个只有IDE硬盘上才有的,我们并不需要。
象内置的驱动库txtsetup.sif中包含有PCI\VEN_8086&DEV_7111=pciide,这样有可能识别成pciide驱动。

虽然CHKPCI检测并输出了两个ID,但我们怎样去判断下面两个其中哪个是我们需要的呢?

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

Snap1.jpg (89.76 KB, 下载次数: 164)

Snap1.jpg

作者: chenall    时间: 2010-11-2 19:46
这个也许可以加一个参数比如-sc:xx (sub-class)位.
作者: zhaohj    时间: 2010-11-2 22:22
是的,需要这个参数。
如:
CSPE,可以使用txtsetup.sif类的内置驱动,原DOS下处理能识别出唯一(或没有)的匹配ID的驱动。
作者: chenall    时间: 2010-11-2 23:26
好了.加了一个-sc参数.要配合-cc使用,否则参数无效.
作者: zhaohj    时间: 2010-11-3 00:27
原帖由 chenall 于 2010-11-2 23:26 发表
好了.加了一个-sc参数.要配合-cc使用,否则参数无效.


竟然不会使用,能否举例说明。或许是bug
作者: chenall    时间: 2010-11-3 00:42
一个例子
显示所有SCSI控制器ID
chkpci -cc:1 -sc:0
显示所有RAID控制器ID
chkpci -cc:1 -sc:4
相关的资料可以看我的搏客上class code的介绍.

嗯,看来还得再增强一个参数.需要允许指定多个比如
chkpci -cc:1 -sc:1,4  (目前还不支持)

[ 本帖最后由 chenall 于 2010-11-3 01:03 编辑 ]
作者: zhaohj    时间: 2010-11-3 00:47
好像获取的ID相反了
下面chkpci -cc:01 -sc:1 应该得到PCI\VEN_1000&DEV_0030

[ 本帖最后由 zhaohj 于 2010-11-3 00:49 编辑 ]

Snap1.jpg (42.52 KB, 下载次数: 152)

Snap1.jpg

作者: chenall    时间: 2010-11-3 01:03
这个没错,是我前面贴子写错了.
SCSI应该是
chkpci -cc:1 -sc:0
作者: zhaohj    时间: 2010-11-3 01:11
正确了,明天得好好看一下上class code的介绍。
不早了,你也该休息了。晚安!


----------------------------------------
做个标志,从下面图中我们需要的class 0x01 对应的 sub-class仅需要0x00、0x04
即chkpci -cc:01 -sc:0,4

[ 本帖最后由 zhaohj 于 2010-11-3 08:43 编辑 ]
作者: zhaohj    时间: 2010-11-3 08:24
Class Codes
Class
Description
0x00
Devices built before class codes (i.e. pre PCI 2.0)
0x01
Mass storage controller
0x02
Network controller
0x03
Display controller
0x04
Multimedia device
0x05
Memory Controller
0x06
Bridge Device
0x07
Simple communications controllers
0x08
Base system peripherals
0x09
Inupt devices
0x0A
Docking Stations
0x0B
Processorts
0x0C
Serial bus controllers
0x0D-0xFE
Reserved
0xFF
Misc

Class Code 0: Pre 2.0
Sub-Class
Prog. I/F
Description
0x00
0x00
All devices other than VGA
0x01
0x01
VGA device

Class Code 1: Mass Storage Controllers
Sub-Class
Prog. I/F
Description
0x00
0x00
SCSI Controller
0x01
0xXX
IDE controller. The Prog I/F is defined as follows:
bits
Desc
0
Operating mode (primary)
1
Programmable indicator (primary)
2
Operating mode (secondary)
3
Programmable indicator (secondary)
6..4
Reserved (zero)
7
Master IDE device
0x02
0x00
Floppy disk controller
0x03
0x00
IPI controller
0x04
0x00
RAID controller
0x80
0x00
Other mass storage controller

Class Code 2: Network Controllers
Sub-Class
Prog. I/F
Description
0x00
0x00
Ethernet controller
0x01
0x00
Token ring
0x02
0x00
FDDI controller
0x03
0x00
ATM controller
0x80
0x00
Other network conteroller

Class Code 3: Display Controllers
Sub-Class
Prog. I/F
Description
0x00
0x00
VGA compatable controller. Has mapping for 0xA0000..0xBFFFF and io addresses 0x3B0..0x3BB.
0x01
8514 compatable
0x01
0x00
XGA controller
0x80
0x80
Other display controller

Class Code 4: Multimedia Devices
Sub-Class
Prog. I/F
Description
0x00
0x00
Video device
0x01
0x00
Audio device
0x80
0x00
Other multimedia device

Class Code 5: Memory Controllers
Sub-Class
Prog. I/F
Description
0x00
0x00
RAM controller
0x01
0x00
Flash memory controller
0x80
0x00
Other memory controller

Class Code 6: Bridge Devices
Sub-Class
Prog. I/F
Description
0x00
0x00
Host/PCI bridge
0x01
0x00
PCI/ISA bridge
0x02
0x00
PCI/EISA bridge
0x03
0x00
PCI/Micro Channel bridge
0x04
0x00
PCI/PCI bridge
0x05
0x00
PCI/PCMCIA bridge
0x06
0x00
PCI/NuBus bridge
0x07
0x00
PCI/CardBus bridge
0x80
0x00
Other bridge type

Class Code 7: Simple Communications Controllers
Sub-Class
Prog. I/F
Description
0x00
0x00
Generic XT compatable serial controller
0x01
16450 compatable serial controller
0x02
16550 compatable serial controller
0x01
0x00
Parallel port
0x01
Bi-directional parallel port
0x02
ECP 1.X parallel port
0x80
0x00
Other commonications device

Class Code 8: Base System Peripherals
Sub-Class
Prog. I/F
Description
0x00
0x00
Generic 8259 programmable interrupt controller (PIC)
0x01
ISA PIC
0x02
EISA PIC
0x01
0x00
Generic 8237 DMA controller
0x01
ISA DMA controller
0x02
EISA DMA controller
0x02
0x00
Generic 8254 timer
0x01
ISA system timer
0x02
EISA system timer
0x03
0x00
Generic RTC controller
0x01
ISA RTC controller
0x80
0x00
Other system peripheral

Class Code 9: Input Devices
Sub-Class
Prog. I/F
Description
0x00
0x00
Keyboard controller
0x01
0x00
Digitizer (pen)
0x02
0x00
Mouse controller
0x80
0x00
Other input controller

Class Code A: Docking Stations
Sub-Class
Prog. I/F
Description
0x00
0x00
Generic docking station
0x80
0x00
Other type of docking station

Class Code B: Processors
Sub-Class
Prog. I/F
Description
0x00
0x00
386
0x01
0x00
486
0x02
0x00
Pentium
0x10
0x00
Alpha
0x20
0x00
PowerPC
0x40
0x00
Co-Processor

Class Code C: Serial Bus Controllers
Sub-Class
Prog. I/F
Description
0x00
0x00
Firewire (IEEE 1394)
0x01
0x00
ACCESS bus
0x02
0x00
SSA (Serial Storage Architecture)
0x03
0x00
USB (Universal Serial Bus)


[ 本帖最后由 zhaohj 于 2010-11-3 08:27 编辑 ]
作者: zoom4ever    时间: 2010-11-3 11:17
-cc:01 -sc:06 ahci?
作者: chenall    时间: 2010-11-3 15:16
OK,已经上传新版CHKPCI..
cc和sc参数支持列表使用","分隔,最多允许4个.
现在可以通过以下命令显示所有SCSI/RAID 的ID了
chkpci -cc:1 -sc:0,4
作者: jianliulin    时间: 2010-11-3 15:37
原帖由 chenall 于 2010-11-3 15:16 发表
OK,已经上传新版CHKPCI..
cc和sc参数支持列表使用","分隔,最多允许4个.
现在可以通过以下命令显示所有SCSI/RAID 的ID了
chkpci -cc:1 -sc:0,4


能否把 chkpci -cc:1 -sc:0,4 简化为:chkpci --hd ,今后遇到启动不了的电脑,就可以方便的输入命令查询其磁盘ID

[ 本帖最后由 jianliulin 于 2010-11-3 15:40 编辑 ]
作者: chenall    时间: 2010-11-3 15:40
原帖由 jianliulin 于 2010-11-3 15:37 发表


能否把 chkpci -cc:1 -sc:0,4 简化为:chkpci --hd


这样看着很容易发生误解.而且这些对于一般用户来说是不需要关心的.

如果要加使用-srs可能更直观
作者: jianliulin    时间: 2010-11-3 15:50
原帖由 chenall 于 2010-11-3 15:40 发表


这样看着很容易发生误解.而且这些对于一般用户来说是不需要关心的.

如果要加使用-srs可能更直观

嗯,比较直观,反正简单点就行,估计使用chkpci 就是用来搞srs驱动,或者C大专门弄一个外置命令给srs驱动专用,

[ 本帖最后由 jianliulin 于 2010-11-3 15:52 编辑 ]
作者: chenall    时间: 2010-11-3 16:00
好了,重新上传了..

添加了三个比较直观的参数.用于显示特定的驱动(因为简化编程,所以不可以同时使用,也不要和CC/SC参数一起使用)

-srs -net -vga
作者: zhaohj    时间: 2010-11-3 17:25
有问题,SCSI没出现:

Snap1.jpg (43.69 KB, 下载次数: 160)

Snap1.jpg

作者: chenall    时间: 2010-11-3 20:58
原帖由 zhaohj 于 2010-11-3 17:25 发表
有问题,SCSI没出现:


看起来没有问题吧.应该是你的虚拟机没有SCSI驱动.
作者: zhaohj    时间: 2010-11-4 08:07
原帖由 chenall 于 2010-11-3 20:58 发表


看起来没有问题吧.应该是你的虚拟机没有SCSI驱动.


现在只有不带-sc参数的正常,-sc:1正常,-sc:0,4都不正常

我在INTEL开启ahci的机器上,使用chkpci -cc:01 -sc:0,4也找不到ID

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

Snap1.jpg (45.17 KB, 下载次数: 181)

Snap1.jpg

Snap1.jpg (65.09 KB, 下载次数: 158)

Snap1.jpg

作者: zhaohj    时间: 2010-11-4 11:57
记得2010-11-02上传的 5点左右 的版本是好的,后来11-02版本被覆盖,自己也没有保留。
作者: zoom4ever    时间: 2010-11-4 11:59
标题: 回复 #61 zhaohj 的帖子
chkpci -srs 应该就是 chkpci -cc:01 -sc:0,4的简写吧?
INTEL AHCI 应该是chkpci -cc:01 -sc:06吧?
应该是没错吧?
作者: chenall    时间: 2010-11-4 12:00
@zhaohj
我还是没有看出异常..

你用chkpci不带任何参数试试看能不能看到,换旧版不带参数的执行看看有没有区别

后面chkpci -srs
chkpci -cc:01 -sc:0,4
没有任何显示也是正常的.因为根本就没有符合条件的ID.
作者: zhaohj    时间: 2010-11-4 12:06
可以这样简单测试:
chkpci -cc:01           ;显示所有的ID信息
chkpci -cc:01 -sc:0,1,2,3,4,128  ;这条命令与上面结果应该一样,实际测试结果不同

Snap2.jpg (39.41 KB, 下载次数: 237)

Snap2.jpg

作者: zoom4ever    时间: 2010-11-4 12:09
可能是zhaohj以为 chkpci -srs 能检测是intel AHCI呢吧? 这个chkpci -cc:01 -sc:0,4应该就是chkpci -srs的简写吧 ACHI应该是cc_0106 所以要用chkpci --cc:01 sc:06
作者: zhaohj    时间: 2010-11-4 12:11
原帖由 zoom4ever 于 2010-11-4 12:09 发表
可能是zhaohj以为 chkpci -srs 能检测是intel AHCI呢吧? 这个chkpci -cc:01 -sc:0,4应该就是chkpci -srs的简写吧 ACHI应该是cc_0106 所以要用chkpci --cc:01 sc:06


你误解了
Class Code 1: Mass Storage Controllers

Sub-Class

Prog. I/F

Description

0x00

0x00

SCSI Controller

0x01

0xXX

IDE controller. The Prog I/F is defined as follows:

bits

Desc

0

Operating mode (primary)

1

Programmable indicator (primary)

2

Operating mode (secondary)

3

Programmable indicator (secondary)

6..4

Reserved (zero)

7

Master IDE device


0x02

0x00

Floppy disk controller

0x03

0x00

IPI controller

0x04

0x00

RAID controller

0x80

0x00

Other mass storage controller



作者: zoom4ever    时间: 2010-11-4 12:12
标题: 回复 #67 zhaohj 的帖子
但是为什么AHCI后面sub-class 是06呢?我机器的硬件ID:PCI\VEN_8086&DEV_3A22&CC_010601 所以chkpci -srs 根本显示不出来~

[ 本帖最后由 zoom4ever 于 2010-11-4 12:15 编辑 ]
作者: chenall    时间: 2010-11-4 12:13
还是没有看出来区别...

-sc:0,4只显示sub-class的id为00,04的ID,可是很明显根本就没有这样的ID.

另外看你上面的图片显示出来的ID和以前显示出来的ID是不一样的,可能是你修改了配置?

还有发现一个sub-class id =7的,这个不在-SRS参数列表中.-srs只有0,4

7的难道就是AHCI?

[ 本帖最后由 chenall 于 2010-11-4 12:17 编辑 ]
作者: chenall    时间: 2010-11-4 12:18
原帖由 zoom4ever 于 2010-11-4 12:12 发表
但是为什么AHCI后面sub-class 是06呢?我机器的硬件ID:PCI\VEN_8086&DEV_3A22&CC_010601 所以chkpci -srs 根本显示不出来~


因为-src只检测0,4的6不在列表中.

可能是新的规范.
作者: chenall    时间: 2010-11-4 12:25
再查了一下相关资料,-srs还得再加两个(SATA的)ID.6和7

  (clase:$01;subclass:$06;progif:$00;name:'Serial ATA'),
   (clase:$01;subclass:$06;progif:$01;name:'Serial ATA (AHCI 1.0)'),
   (clase:$01;subclass:$07;progif:$00;name:'Serial Attached SCSI'),
作者: zhaohj    时间: 2010-11-4 12:25
麻烦大了,虚拟机测试,竟然是0x7

Snap1.jpg (48.85 KB, 下载次数: 220)

Snap1.jpg

作者: zoom4ever    时间: 2010-11-4 12:38
实机的AHCI应该是06
作者: chenall    时间: 2010-11-4 13:49
重新上传了.
-srs 参数添加了两个SATA/AHCI的ID.
作者: zhaohj    时间: 2010-11-4 16:06
终于可以了,万分感谢!
作者: zhaohj    时间: 2010-11-17 13:02
呵呵,可能有误,抱歉,正在测试新版grldr...

[ 本帖最后由 zhaohj 于 2010-11-17 17:30 编辑 ]
作者: zhaohj    时间: 2011-7-1 18:10
下面的网卡驱动,chkpci需要加强:

Snap1.jpg (17.45 KB, 下载次数: 244)

Snap1.jpg

作者: chenall    时间: 2011-7-2 08:19
标题: 回复 #77 zhaohj 的帖子
这个应该也有类似PCI\VEN_XXXX&DEV_XXXX的形式的。

驱动INF文件中应该可以找到。另外你可以把CHKPCI检测的结果贴上来。

我刚下载了一个这个驱动看了一下,实际上它的驱动ID是。
pci\ven_14e4&dev_163b

[ 本帖最后由 chenall 于 2011-7-2 08:28 编辑 ]
作者: zhaohj    时间: 2011-7-2 13:21
原帖由 chenall 于 2011-7-2 08:19 发表
这个应该也有类似PCI\VEN_XXXX&DEV_XXXX的形式的。

驱动INF文件中应该可以找到。另外你可以把CHKPCI检测的结果贴上来。

我刚下载了一个这个驱动看了一下,实际上它的驱动ID是。
pci\ven_14e4&dev_163b


今天休息天,实机在服务器上操作了一下
chkpci -net
结果确实是:
PCI\VEN_14E4&DEV_163B&SUBSYS_028C1028

=====================
提取这样的驱动还真不易。
作者: zhaohj    时间: 2011-7-22 11:30
目前还不能检测nv芯片组

*_NVRAIDBUS="NVRAID"
*NVRAIDBUS="NVRAID"
SCSI\NVIDIA__RAID_DISK________="NVRD32"
SCSI\NVIDIA__RAID_DISK_20_____="NVRD32"
SCSI\__NVIDIA_______RAID_DISK="NVRD32"
SCSI\__NVIDIA____RAID_DISK_20= ...
作者: chenall    时间: 2011-7-22 16:25
标题: 回复 #80 zhaohj 的帖子
应该是和上面的驱动一样,这些ID电脑应该是无法检测的,需要安装它的一个驱动之后由它的驱动提供的.
作者: 21212121    时间: 2011-8-10 13:47
但是我的阵列卡是
PCI\VEN_105A&DEV_3574
这些是我的驱动盘里面看到的信息
可是我的命令下看到的是
pci\VEN_8086&DEV_269E&SUBSYS_00009..
pci\VEN_8086&DEV_2680&SUBSYS_00009..
很明显不对啊
作者: 21212121    时间: 2011-8-10 15:21
但是我的阵列卡是TX4310
PCI\VEN_105A&DEV_3574
这些是我的驱动盘里面看到的信息
可是我的命令下看到的是
pci\VEN_8086&DEV_269E&SUBSYS_00009..
pci\VEN_8086&DEV_2680&SUBSYS_00009..
很明显不对啊
作者: zhaohj    时间: 2011-8-10 15:30
PCI\VEN_8086开头的明显是IDE的驱动,说明你的阵列卡没有检测到
作者: 21212121    时间: 2011-8-10 16:01
是啊  为啥呢?但是我用自己增加阵列卡驱动的PE,进入PE能看到磁盘的
作者: 21212121    时间: 2011-8-12 13:20
找到了 前面的帖子里面的52楼Class Codes和里面CC字符串对照一下能看出来了
作者: zoom4ever    时间: 2011-8-27 14:23
zhaohj兄和chenall大大 今天在帮学校弄服务器的时候 一台浪潮NF5220的服务器 RAID卡是LSI 8208ELP 用CHKPCI的时候为什么不能检测出ID呢 直接执行chkpci -srs 没有任何显示输出 这个RAID卡的硬件ID应该是PCI\VEN_1000&DEV_0059
作者: chenall    时间: 2011-8-27 16:48
试试这个

http://bbs.wuyou.net/forum.php?m ... &extra=page%3D1
作者: zoom4ever    时间: 2011-8-29 13:12
新版本的chkpci没问题了 谢谢C大!
作者: netwinxp    时间: 2011-8-30 06:08
标题: 回复 #80 zhaohj 的帖子
这个属于ACPI范畴,CHKACPI的话就可以检测到CPU和这类型的HWID,不过ms推出ACPI说的很笼统,目前即使是linux也对它支持也不是很理想。
BTW:你们贴的那些PCI类型已经很老了,现在除了CC_0101、0104、0106、0107、0180可能还有0105。再说现在USB做启动的也越来越多,说不定啥时候还得CHKUSB。
CHK的最大问题是无法确确确定哪个设备是真正的启动设备,ms似乎也没有找到比较好的方法,所以折腾出磁盘签名之类的一大堆繁琐的东东。
作者: zhaohj    时间: 2011-8-30 07:41
一年多前N版说在制作CHKACPI,未见下文...
版主能完善下造福众生!




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3