|
|
在EDK中做SCSI driver,环境是NT32,要在driver binding protocal support( )中打开pciio协议,当编译的时候发现open pciio protocal fail,代码如下:
; v3 H" G. N: A7 B/ y! w& z EFI_BREAKPOINT( );
2 a% K5 J. h: \, }5 G9 `/ E" A Status = gBS->OpenProtocol (# Y; I( u4 e3 D- N6 z6 n, c
Controller,
) z' b; \% D; o; Y" L' F, ] &gEfiPciIoProtocolGuid,, R1 k8 D z3 J9 s! k" ?* K# }$ ]
(VOID **) &PciIo,& w$ ~' P/ T, A4 Q
This->DriverBindingHandle,
) E! j8 h4 L2 t% j Controller,* f3 d8 o, E% @; w
EFI_OPEN_PROTOCOL_BY_DRIVER
% L% d5 `" a, d% [ );
6 a d% O+ c& F8 t if (EFI_ERROR (Status)) {8 U* W! Y7 S! d: j0 ^* d, v
return Status;# \( O5 D/ t6 v6 r! Q, o" X1 H" t7 \5 q
1:在NT32下打开一个PCIIO protocal,应该是与硬件没有任何关系的,为什么却fail?用VS studio调试跟踪发现,其实是在执行handle.c 文件中的CoreGetProtocolInterface( )函数时,在 Look at each protocol interface for a match时没有找到匹配protocal返回一个unsupport状态值。
% l4 O0 v" `+ f( A& T! w5 i* d2:当我在用EDK中提供的AtapiScsiPassThruDriverBindingSupported( )测试时,同样会出现此现象。
* d- k; H0 C" M8 t请问:
) R7 F7 U$ r# J8 E4 y当invoke support( )时传递的controller参数需要硬件支持吗?如果不需要为什么会fail掉呢 |
|