|
|
在EDK中做SCSI driver,环境是NT32,要在driver binding protocal support( )中打开pciio协议,当编译的时候发现open pciio protocal fail,代码如下:
! G; g' F. k- J3 I6 K J m' f. U! f EFI_BREAKPOINT( );; x& `5 J, Q8 p
Status = gBS->OpenProtocol (# ~ O; ~ F8 n1 |( _, q; y. i
Controller,, {5 T1 H- v5 V3 f6 D+ y
&gEfiPciIoProtocolGuid,
2 w1 L# u9 p& x (VOID **) &PciIo,
# v3 G* c3 T$ n' a This->DriverBindingHandle,
4 d9 s6 z6 U4 q, `$ W$ R8 D Controller,
' [6 D7 y( E9 i( B3 k EFI_OPEN_PROTOCOL_BY_DRIVER# _: b( r6 ?) p) B: w
);
, N, z& l/ _) ?! R; W if (EFI_ERROR (Status)) {
+ f! ^4 Q2 U6 {. E; v8 _: D) A! ~ return Status;
2 \+ ^& h w F* A) z1:在NT32下打开一个PCIIO protocal,应该是与硬件没有任何关系的,为什么却fail?用VS studio调试跟踪发现,其实是在执行handle.c 文件中的CoreGetProtocolInterface( )函数时,在 Look at each protocol interface for a match时没有找到匹配protocal返回一个unsupport状态值。
3 u# s7 L, u% ~9 ~0 f. L; x2:当我在用EDK中提供的AtapiScsiPassThruDriverBindingSupported( )测试时,同样会出现此现象。
" t9 F, r h9 R$ E请问:
% _0 l% ^7 \5 z当invoke support( )时传递的controller参数需要硬件支持吗?如果不需要为什么会fail掉呢 |
|