|
|
在EDK中做SCSI driver,环境是NT32,要在driver binding protocal support( )中打开pciio协议,当编译的时候发现open pciio protocal fail,代码如下:
$ L9 N0 G q+ F/ N: o C EFI_BREAKPOINT( );
% L( X2 N, ~4 Z3 f4 g% a Status = gBS->OpenProtocol (& l O9 y- m! B& F0 i0 L) u
Controller,+ f4 n/ Q* E# u2 Z+ A# `
&gEfiPciIoProtocolGuid,) x3 t t0 N# U2 ]
(VOID **) &PciIo,4 g- R2 ~; C' ~1 r# Z
This->DriverBindingHandle,! p* @9 \9 V% B- |, @/ G" d
Controller,
; k) [* _ p' [5 v8 b# W EFI_OPEN_PROTOCOL_BY_DRIVER, U, Q) h4 Q: v9 D7 n/ l: ~
);
4 F3 L* b# z- z, v: [5 Z4 Y2 ` if (EFI_ERROR (Status)) {2 Q7 E: J I5 @5 c
return Status;
' x: H3 b( f/ d0 u1:在NT32下打开一个PCIIO protocal,应该是与硬件没有任何关系的,为什么却fail?用VS studio调试跟踪发现,其实是在执行handle.c 文件中的CoreGetProtocolInterface( )函数时,在 Look at each protocol interface for a match时没有找到匹配protocal返回一个unsupport状态值。
- e/ ~5 B2 S- p) U* m g; L+ f" d y2:当我在用EDK中提供的AtapiScsiPassThruDriverBindingSupported( )测试时,同样会出现此现象。5 _1 v$ j+ T: v4 ^
请问:2 n: Q- _( ~0 P2 z
当invoke support( )时传递的controller参数需要硬件支持吗?如果不需要为什么会fail掉呢 |
|