10244|22

60

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

PXA270 下调试SDIO接口的wifi模组 [复制链接]

我的平台是PXA270+wince5.0,板子上有一个Marvell 8686芯片的WIFI模组,所使用的PXA270 CPU上的SD卡接口的讯号包括SD_Data0, SD_Data1, SD_Data2,SD_Data3, SD_CLK, SD_CMD, 另外,该模组上还有一个Reset和一个PDn讯号。
驱动代码是厂商提供的,虽然写的是应用于PXA310的,但是我们看了之后,发现用于PXA270也是可以的。
因此,编译驱动后得到SDIO8686.dll,将这个DLL编译入NK,同时修改注册表文件,但是系统启动后对于wifi模组没有任何反应,理论上找到wifi模组后,应该弹出一个wifi设置的对话框,但是没有弹出,注册表信息如下,请问是否还有需要修改的地方呢?

  1. //下面是注册表中原是的SD Memory的注册表,使用wifi后,SD卡没有再用
  2. ; @CESYSGEN IF CE_MODULES_SDBUS
  3. IF BSP_NO_SDHC_MAINSTONE !
  4. #include "$(_TARGETPLATROOT)\src\drivers\sdhc\sdhc_mainstoneii.reg"

  5. [HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\SDMemory]
  6.     "Name"="SD Memory Card"
  7.     "Folder"="Storage Card"
  8.     ;"PartitionDriver"=""          ; removable storage cannot have partitions

  9. [HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\MMC]
  10.     "Name"="MMC Card"
  11.     "Folder"="Storage Card"
  12.     ;"PartitionDriver"=""          ; removable storage cannot have partitions


  13. ;[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\SDMemory]
  14. ;        "MountFlags" = dword:4
  15. ;[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\MMC]
  16. ;        "MountFlags" = dword:4


  17. ; SD Memory Storage class driver
  18. [HKEY_LOCAL_MACHINE\Drivers\SDCARD\ClientDrivers\Class\SDMemory_Class]
  19.    "Dll"="SDMemory.dll"
  20.    "Prefix"="DSK"
  21.    "BlockTransferSize"=dword:40  ; send no more than 64 blocks of data per bus transfer
  22.    ;"SingleBlockWrites"=dword:1  ; alternatively force the driver to use single block access
  23.    ;"IdleTimeout"=dword:7D0      ; 2000 milliseconds
  24.    ;"IdlePowerState"=dword:2     ; 0 == D0, 1 == D1, etc.
  25.    ;"DisablePowerManagement"=""  ; if value present, then disable (remove value to enable)

  26.    "Profile"="SDMemory"
  27.    "IClass"=multi_sz:"{A4E7EDDA-E575-4252-9D6B-4195D48BB865}",
  28.                      "{A32942B7-920C-486b-B0E6-92A702A99B35}"

  29. ; MMC Storage Class Driver
  30. [HKEY_LOCAL_MACHINE\Drivers\SDCARD\ClientDrivers\Class\MMC_Class]
  31.    "Dll"="SDMemory.dll"
  32.    "Prefix"="DSK"
  33.    "BlockTransferSize"=dword:40  ; send no more than 64 blocks of data per bus transfer
  34.    ;"SingleBlockWrites"=dword:1  ; alternatively force the driver to use single block access
  35.    ;"IdleTimeout"=dword:7D0      ; milliseconds
  36.    ;"IdlePowerState"=dword:2     ; 0 == D0, 1 == D1, etc.
  37.    ;"DisablePowerManagement"=""  ; if value present, then disable (remove value to enable)
  38.    "Profile"="MMC"
  39.    "IClass"=multi_sz:"{A4E7EDDA-E575-4252-9D6B-4195D48BB865}",
  40.                      "{A32942B7-920C-486b-B0E6-92A702A99B35}"

  41. ENDIF BSP_NO_SDHC_MAINSTONE !
  42. ; @CESYSGEN ENDIF CE_MODULES_SDBUS
复制代码

  1. ; registry keys for the Streams portion of the driver
  2. [HKEY_LOCAL_MACHINE\Drivers\SDCARD\ClientDrivers\Custom\MANF-02DF-CARDID-9103-FUNC-1]
  3.    "Dll"="SDIO8686.dll"                     ; use the "streams" interface portion to load the NDIS portion
  4.    "Prefix"="NDL"
  5.        ; add instance key for each instance that can be added
  6.    "Instance0"="SDIO8686:SDIO86861"        ; "InstanceX" = ":"
  7.    
  8. ;
  9. ;        Registry keys
  10. ;

  11.     ; registry keys for the NDIS driver
  12. [HKEY_LOCAL_MACHINE\Comm\SDIO8686]
  13.    "DisplayName"="Marvell SDIO8686 Wireless Card"
  14.    "Group"="NDIS"
  15.    "ImagePath"="SDIO8686.dll"
  16.    "NoDeviceCreate"=dword:01

  17. [HKEY_LOCAL_MACHINE\Comm\SDIO8686\Linkage]
  18.    "Route"=multi_sz:"SDIO86861"

  19.     ; instance 1 information
  20. [HKEY_LOCAL_MACHINE\Comm\SDIO86861]
  21.    "DisplayName"="Marvell SDIO8686 Wireless Card"
  22.    "Group"="NDIS"
  23.    "ImagePath"="SDIO8686.dll"
  24.        
  25.     ; instance 1 parameters
  26. [HKEY_LOCAL_MACHINE\Comm\SDIO86861\Parms]
  27.    "BusNumber"=dword:0
  28.    "BusType"=dword:0

  29.     ; TCPIP linkage to instance 1 adapter
  30. [HKEY_LOCAL_MACHINE\Comm\Tcpip\Linkage]
  31.     "Bind"=multi_sz:"ppp","SDIO86861"
  32.    
  33.     ; setup card parameters
  34. [HKEY_LOCAL_MACHINE\Comm\SDIO86861\Parms]
  35.    "UseMfgFw"=dword:0
  36.    "PowerMode"=dword:0
  37.    "FragThsd"=dword:92A
  38.    "RTSThsd"=dword:92A
  39.        ; following is for BT/WLAN multi-functions driver 1:enable BT/WLAN multi-function driver, 0:WLAN only
  40.    "BTMode"=dword:0
  41.        ; adhoc starter default channel
  42.    "AdhocDefaultChannel"=dword:6
  43.        ; adhoc starter WiFi test datarate modify or not
  44.    "AdhocWiFiDataRate"=dword:0
  45.        ; adhoc default band, 1:G, 0:B
  46.    "AdhocDefaultBand"=dword:1
  47.        ; 1:SDIO 4 bit mode; 0: SDIO 1 bit mode
  48.    "SetSD4BIT"=dword:1
  49.        ;Set the priority of SdioIstThread
  50.    "SdioIstThread"=dword:65
  51.        ;Set the value of AvoidScanTime after connected
  52.    "AvoidScanTime"=dword:2710
  53.        ;Set ACTIVE_ROAMING
  54.    "bActiveRoamingScanOneChannel"=dword:1
  55.    "bLinkLostScanOneChannel"=dword:1
  56.        ;Set NEW_RSSI parameters
  57.    "ulRSSIThresholdTimer"=dword:1388
  58.    "RSSI_Range"=dword:A
  59.        ;Set ACTIVE_ROAMING with BackGround Scan
  60.    "bActiveRoamingwithBGSCAN"=dword:0
  61.        ;Set RoamingMode:NOT_ROAMING_MODE = 1(default),ACTIVE_ROAMING_MODE=2,FAST_ROAMING_MODE
  62.    "RoamingMode"=dword:1
  63.        ;Set the value of Enable80211D
  64.    "Enable80211D"=dword:0
  65.        ;Set the value of LocalListenInterval
  66.    "LocalListenInterval"=dword:0
  67.        ;Set support 32bytes ESSID
  68.    "ESSID_32"=dword:0
  69.        ;Set the value to use GPIO pin as Interrupt pin, 1:use GPIO pin as interrupt source; 0:used SDIO bus interrupt
  70.    "SDGPIOIntEnable"=dword:0
  71.        ;Set the GPIO pin # to be used as Interrupt pin
  72.    "GPIOIntPinNumber"=dword:4
  73.        ;Setup interrupt trigger edge, 0: Rasing edge, 1:Falling edge
  74.    "GPIOIntTriggerEdge"=dword:1
  75.        ;Setup interrupt pluse width(us)
  76.    "GPIOIntPulsewidth"=dword:5
  77.        ;Set the value of NullPktInterval, 0: unchanged.
  78.    "NullPktInterval"=dword:0
  79.        ;Set the value of MultipleDTim
  80.    "MultipleDTim"=dword:1
  81.        ;Set the value of AdhocAwakePeriod
  82.    "AdhocAwakePeriod"=dword:1
  83.        ;Set MAC frame type
  84.    "MacFrameType"=dword:0
  85.        ;Set Auto Deep Sleep Time, 2 seconds unit.
  86.    "AutoDeepSleepTime"=dword:0
  87.        ;Set Association fail retry times while asso. fail.
  88.    "AssoRetryTimes"=dword:2
  89.       
  90.         ;
  91.         ;Roaming parameters ++
  92.         ;
  93.         ;Set the value of RoamSignalStrengthThreshold
  94.         "RoamSignalStrengthThreshold"=dword:2d

  95.         ;
  96.         ;Channel list. Valid value is from 0x00000000 ~ 0x00007ff
  97.         ;        => bit[i]=1, channel[i+1] will be scanned
  98.         "RoamChannelScanList"=dword:000007ff

  99.         ; Scan interval per channel(ms)
  100.         "RoamMaxScanInterval"=dword:bb8
  101.         "RoamMinScanInterval"=dword:c8

  102.         ;RSSI threshold. If the next AP's RSSI is higher more than this value, roam to that AP
  103.         "RoamDiffRSSIThreshold"=dword:0f

  104.         ;Scan algorithm
  105.         ;        0: Use background scan
  106.         ;        1: Use active scan
  107.         "RoamScanAlgorithm"=dword:1
  108.         ;
  109.         ;Roaming parameters --
  110.         ;

  111.         ;Bus power is on/off in D3
  112.         "BusPowerInD3"=dword:1

  113.         ;RegsionCode:
  114.         ; (0x10, 0x20, 0x30, 0x31, 0x32, 0x40)=(USA FCC, Canada IC, Europe ETSI, Spain, France, JP MKK)
  115.         "RegionCode"=dword:0x10


  116.     ; default TCPIP settings for this instance
  117. [HKEY_LOCAL_MACHINE\Comm\SDIO86861\Parms\TcpIp]
  118.    "EnableDHCP"=dword:1
  119.        ; This should be MULTI_SZ
  120.    "DefaultGateway"=""
  121.        ; Use zero for broadcast address? (or 255.255.255.255)
  122.    "UseZeroBroadcast"=dword:0
  123.        ; Thus should be MULTI_SZ, the IP address list
  124.    "IpAddress"="0.0.0.0"
  125.        ; This should be MULTI_SZ, the subnet masks for the above IP addresses
  126.    "Subnetmask"="255.255.255.0"

  127. IF MRVL_MONOLITHIC_SDIO
  128.     ; setup monolithic SDIO Bus and SDHC parameters
  129. [HKEY_LOCAL_MACHINE\Drivers\Builtin\SDIO8686]
  130.    "Order"=dword:2
  131.    "Dll"="SDIO8686.dll"
  132.    "Prefix"="NDL"
  133.    "Instance0"="SDIO8686:SDIO86861"
  134.    "ThreadPriority"=dword:64     ; default thread priority for dispatch thread
  135.    "RequestListDepth"=dword:30   ; pre-allocated requests
  136.    "IClass"=multi_sz:"{20FA98A8-B298-4b32-8D72-C716AEE2FA84}=%b","{6F40791D-300E-44E4-BC38-E0E63CA8375C}=%b"

  137.     "ControllerIRQ"=dword:17        ; IRQ_MMC 23
  138.     "ControllerISTPriority"=dword:64
  139. IF BSP_MAINSTONEII
  140.     "CardDetectIRQ"=dword:20        ; IRQ_GPIO0_MMCCD 32
  141. ELSE
  142.     "CardDetectIRQ"=dword:28        ; IRQ_GPIOXX_MMCCD 40
  143. ENDIF
  144.     "CardDetectISTPriority"=dword:65
  145.     "ClockAlwaysOn"=dword:0
  146.     "ClockOnIfInterruptsEnabled"=dword:1
  147.     "ehancePS"=dword:1
  148.   
  149.     "DMAChannel"=dword:14 ;comment this out to disable DMA support
  150.     "DMAIsrDll"="sdhc_dmaisr.dll"
  151.     "DMAIsrHandler"="SDHC_DMA_ISR"
  152.     "DMAIRQ"=dword:19                ; IRQ_DMAC = 25
  153.     "DMAISTPriority"=dword:63
  154.     "DMABufferSize"=dword:10000
  155.     "MaximumClockFrequency"=dword:1312D00 ; clock rate 989680(10MHz) 1312D00(20MHz)
  156. ENDIF MRVL_MONOLITHIC_SDIO
复制代码

最新回复

gga
LZ的驱动跟我的应该差不多,我是三星2450下用的SDIO8686,请问LZ:"bActiveRoamingScanOneChannel"=dword:1    "bLinkLostScanOneChannel"=dword:1 这两条分别是啥意思? 我想做漫游,但是Roammode改成2后并没有实现漫游,这个还应该怎么搞?  详情 回复 发表于 2010-4-12 15:23
点赞 关注

回复
举报

63

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
1楼的第二段注册表是SDIO的wifi模组的注册表,我现在有一个问题:
1、由于PXA270只有一个SDIO接口,所以如果用了WIFI,就用不了SD卡,那么SD Memory那部分的注册表需要修改或者删除吗?
2、SD memory是使用SD Detect信号来检测是否有SD卡插入,但是wifi模组没有这个Detect Pin脚,那么系统是如何判断有wifi模组存在的呢?
3、除了加入DLL并修改注册表之外,BSP中的其他位置是否还需要修改?比如说是否还需要添加中断?
请做过WIFI模组的大侠们帮帮忙,非常感谢!
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
严重关注,也希望能得到好的借鉴...
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

4
 
SDIO就是支持SD Memory的所以我觉得可以把SDMemory删除了
应该是有个检测的引脚吧??怎么能没有呢
那你怎么知道现在是否有WIFI连着呢
应该是一共两个中断其中一个检测,在BSP中,另外一个在C:\WINCE500\PUBLIC\COMMON\OAK\CSP\ARM\INTEL\PXA27X\SDHC 的sdcontrol.c中
当然你想把它拿到你的BSP下也行

大概是这样
我说错了大家别喷我!
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

5
 
SDIO接口的wifi模组没有像SD卡一样的detect脚,不管是村田的还是USI的。所以如何让系统知道我已经连接上了wifi模组呢?
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(中级)

6
 
sd驱动加载的时候会发送命令看是否收到回应以判断sd接的是mmc,sd还是sdio设备,wifi驱动加载时会检测系统是否成功加载sdio驱动,然后加载固件。。。
wifi的sdio接口部分是标准的,所以你只需要确定你的sdio驱动部分是正确的
把wifi驱动的debug打开看看在哪出问题了
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

7
 
没有detect引脚可以修改sd驱动,让它认为外设始终存在
 
 
 

回复

54

帖子

0

TA的资源

一粒金砂(初级)

8
 
谢谢csdeny,非常感谢。
通过debug发现SDIO的驱动确实被加载了,但是还是有问题,在SDIO8686.dll中,SD初始化的代码如下:

  1. NDIS_STATUS sdio_Initialization( PMRVDRV_ADAPTER Adapter, NDIS_HANDLE WrapperConfigurationContext )
  2. {
  3.     NDIS_STATUS     Status;
  4.    
  5.     Adapter->ConfigurationHandle = WrapperConfigurationContext;
  6.     Adapter->ShutDown = FALSE;
  7.     Status = SDNdisGetSDDeviceHandle(Adapter);
  8. // tt wled  if( Status != NDIS_STATUS_SUCCESS )
  9.         /*
  10.             Need to check hDevice for avoiding a data abort if driver could not get a valid
  11.             device handle.
  12.         */
  13.         if( Status != NDIS_STATUS_SUCCESS || Adapter->hDevice == NULL ) // tt wled
  14.     {
  15.         // Only adapter object itself has been created up to
  16.         // this point
  17.         //MRVDRV_FREE_MEM((PVOID)Adapter, sizeof(MRVDRV_ADAPTER));
  18.         DBGPRINT(DBG_LOAD | DBG_ERROR, (L"*** SDNdisGetSDDeviveHandleFailed %d\n", Status));

  19.         return NDIS_STATUS_FAILURE;
  20.     }
  21.     if ( SDIOInitialization(Adapter) != NDIS_STATUS_SUCCESS )
  22.     {
  23.         // Only adapter object itself has been created up to
  24.         // this point
  25.         //MRVDRV_FREE_MEM((PVOID)Adapter, sizeof(MRVDRV_ADAPTER));
  26.         DBGPRINT(DBG_LOAD | DBG_ERROR, (L"*** SDIOInitialization FAILED! ***\n"));
  27.         return NDIS_STATUS_FAILURE;
  28.     }
  29.     return Status;
  30. }
复制代码

debug信息表明,在执行第一个函数SDNdisGetSDDeviceHandle的时候就已经出错了,代码如下:

  1. NDIS_STATUS SDNdisGetSDDeviceHandle(PMRVDRV_ADAPTER pAdapter)
  2. {

  3.     NDIS_STATUS status;                       // intermediate status
  4.     NDIS_HANDLE configHandle;
  5.     NDIS_STRING activePathKey = NDIS_STRING_CONST("ActivePath");
  6.     PNDIS_CONFIGURATION_PARAMETER pConfigParm;  

  7.        // open a handle to our configuration in the registry
  8.     NdisOpenConfiguration(&status,
  9.                           &configHandle,
  10.                           pAdapter->ConfigurationHandle);

  11.     if (!NDIS_SUCCESS(status)) {
  12.         DBGPRINT(DBG_LOAD | DBG_ERROR,
  13.             (L"SDNdis: NdisOpenConfiguration failed (0x%08X)\n",
  14.                    status));
  15.         return status;
  16.     }

  17.         // read the ActivePath key set by the NDIS loader driver
  18.     NdisReadConfiguration(&status,
  19.                           &pConfigParm,
  20.                           configHandle,
  21.                           &activePathKey,
  22.                           NdisParameterString);

  23.     if (!NDIS_SUCCESS(status)) {
  24.         DBGPRINT(DBG_LOAD | DBG_ERROR,
  25.             (L"SDNdis: Failed to get active path key (0x%08X)\n",
  26.                    status));
  27.              // close our registry configuration
  28.         NdisCloseConfiguration(configHandle);
  29.         return status;
  30.     }

  31.     if (NdisParameterString != pConfigParm->ParameterType) {
  32.         DBGPRINT(DBG_LOAD | DBG_ERROR,
  33.             (L"SDNdis: PARAMETER TYPE NOT STRING!!!\n"));
  34.              // close our registry configuration
  35.         NdisCloseConfiguration(configHandle);
  36.         return status;
  37.     }

  38.     if (pConfigParm->ParameterData.StringData.Length > sizeof(pAdapter->ActivePath)) {
  39.         DBGPRINT(DBG_LOAD | DBG_ERROR,
  40.             (L"SDNdis: Active path too long!\n"));
  41.         NdisCloseConfiguration(configHandle);
  42.         return NDIS_STATUS_FAILURE;
  43.     }

  44.         // copy the counted string over
  45.     memcpy(pAdapter->ActivePath,
  46.            pConfigParm->ParameterData.StringData.Buffer,
  47.            pConfigParm->ParameterData.StringData.Length);
  48.   
  49.   if ( pConfigParm->ParameterData.StringData.Length == 0 )
  50.     {
  51.         DBGPRINT(DBG_LOAD | DBG_WARNING,
  52.             (L"SDNdis: Active path str length is 0, perhaps no card!\n"));
  53.         NdisCloseConfiguration(configHandle);
  54.         return NDIS_STATUS_FAILURE;
  55.     }else{
  56.         DBGPRINT(DBG_LOAD | DBG_WARNING,
  57.             (L"SDNdis: Active path str == %s\n",pConfigParm->ParameterData.StringData.Buffer));
  58.     }
  59.     NdisCloseConfiguration(configHandle);

  60.     DBGPRINT(DBG_LOAD | DBG_LOAD,
  61.             (L"SDNdis: Active Path Retrieved: %s \n",pAdapter->ActivePath));

  62.         // now get the device handle
  63.     pAdapter->hDevice = SDGetDeviceHandle((DWORD)pAdapter->ActivePath, NULL);
  64.     return NDIS_STATUS_SUCCESS;
  65. }
复制代码

第一行相关的错误信息显示的是:SDNdis: Failed to get active path key (0xC0000001)。
代码是原厂提供的,理论上我应该不用修改。
为什么在初始化NDIS时候会出错呢?我是否还缺少组件没有加?目前加入的组件包括:SD Memory,SDIO standard host controller, SDIO WIFI(sychip),还有Networking-LAN下面的和wifi有关的都加上去了,NDIS在哪里增加呢?
谢谢
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

9
 
ndis应该默认选上的。你的问题不是加载ndis出错,而是加载sdio驱动出错,把sd驱动debug打开看是否找到sdio设备
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

10
 
通过串口信息发现,SDIO8686的DLL加载在SDIO驱动之前,是不是由于这个问题产生的呢?
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

11
 
怎样才能将SDIO的加载顺序调整到SD8686 wifi的驱动之前呢?谢谢
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

12
 
引用 10 楼 jerry79 的回复:
怎样才能将SDIO的加载顺序调整到SD8686 wifi的驱动之前呢?谢谢


把注册表提前,order减小。
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

13
 
我改变了order的值,还是不行,SDIO的我改到5,wifi的改到20,还是不行哦。wifi还是先出来了。
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

14
 
有谁在270下做过wifi模块吗?请帮忙一下,谢谢!
 
 
 

回复

58

帖子

0

TA的资源

一粒金砂(初级)

15
 
发现将SDIO的order值改小,该驱动就没有被调用了,好奇怪、
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

16
 
你好,我在网上看到你调SDIO接口的WIFI驱动,请问你有没有找出来什么原因呀?我现在也碰到了同样的问题!不胜感谢呀!
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

17
 
我很奇怪,你的这个sdio_Initialization函数是什么时候被调用的。我这里测了一下,发现我的sdio8686.dll确实被加载了,但是这个函数却一直没有被调用,跟了一下,原因是注册表里有一条 "NoDeviceCreate"=dword:01  , 这使得系统不会自动创建一个设备,所以不会调用初始化函数。我试了一下,如果把这个值改成0,才会出现你谈到的这个现象,你的过程是这样的么

引用 7 楼 jerry79 的回复:
谢谢csdeny,非常感谢。
通过debug发现SDIO的驱动确实被加载了,但是还是有问题,在SDIO8686.dll中,SD初始化的代码如下:
C/C++ code
NDIS_STATUS sdio_Initialization( PMRVDRV_ADAPTER Adapter, NDIS_HANDLE WrapperConfigurationContext )
{
    NDIS_STATUS     Status;
   
    Adapter->ConfigurationHandle= WrapperConfigurationContext;
    Adapter->ShutDown= FALSE;
    Status= SDNdisGetSDDeviceHandle(Adapter);// tt wled  if( Status != NDIS_STATUS_SUCCESS )/*
            Need to check hDevice for avoiding a data abort if driver could not get a valid
            device handle.*/if( Status!= NDIS_STATUS_SUCCESS|| Adapter->hDevice== NULL )// tt wled    {// Only adapter object itself has been created up to// this point//MRVDRV_FREE_MEM((PVOID)Adapter, sizeof(MRVDRV_ADAPTER));        DBGPRINT(DBG_LOAD| DBG_ERROR, (L"*** SDNdisGetSDDeviveHandleFailed %d\n", Status));return NDIS_STATUS_FAILURE;
    }if ( SDIOInitialization(Adapter)!= NDIS_STATUS_SUCCESS )
    {// Only adapter object itself has been created up to// this point//MRVDRV_FREE_MEM((PVOID)Adapter, sizeof(MRVDRV_ADAPTER));        DBGPRINT(DBG_LOAD| DBG_ERROR, (L"*** SDIOInitialization FAILED! ***\n"));return NDIS_STATUS_FAILURE;
    }return Status;
}
debug信息表明,在执行第一个函数SDNdisGetSDDeviceHandle的时候就已经出错了,代码如下:
C/C++ code
NDIS_STATUS SDNdisGetSDDeviceHandle(PMRVDRV_ADAPTER pAdapter)
{

    NDIS_STATUS status;// intermediate status    NDIS_HANDLE configHandle;
    NDIS_STRING activePathKey= NDIS_STRING_CONST("ActivePath");
    PNDIS_CONFIGURATION_PARAMETER pConfigParm;// open a handle to our configuration in the registry    NdisOpenConfiguration(&status,&configHandle,
                          pAdapter->ConfigurationHandle);if (!NDIS_SUCCESS(status)) {
        DBGPRINT(DBG_LOAD| DBG_ERROR,
            (L"SDNdis: NdisOpenConfiguration failed (0x%08X)\n",
                   status));return status;
    }// read the ActivePath key set by the NDIS loader driver    NdisReadConfiguration(&status,&pConfigParm,
                          configHandle,&activePathKey,
                          NdisParameterString);if (!NDIS_SUCCESS(status)) {
        DBGPRINT(DBG_LOAD| DBG_ERROR,
            (L"SDNdis: Failed to get active path key (0x%08X)\n",
                   status));// close our registry configuration        NdisCloseConfiguration(configHandle);return status;
    }if (NdisParameterString!= pConfigParm->ParameterType) {
        DBGPRINT(DBG_LOAD| DBG_ERROR,
            (L"SDNdis: PARAMETER TYPE NOT STRING!!!\n"));// close our registry configuration        NdisCloseConfiguration(configHandle);return status;
    }if (pConfigParm->ParameterData.StringData.Length>sizeof(pAdapter->ActivePath)) {
        DBGPRINT(DBG_LOAD| DBG_ERROR,
            (L"SDNdis: Active path too long!\n"));
        NdisCloseConfiguration(configHandle);return NDIS_STATUS_FAILURE;
    }// copy the counted string over    memcpy(pAdapter->ActivePath,
           pConfigParm->ParameterData.StringData.Buffer,
           pConfigParm->ParameterData.StringData.Length);if ( pConfigParm->ParameterData.StringData.Length==0 )
    {
        DBGPRINT(DBG_LOAD| DBG_WARNING,
            (L"SDNdis: Active path str length is 0, perhaps no card!\n"));
        NdisCloseConfiguration(configHandle);return NDIS_STATUS_FAILURE;
    }else{
        DBGPRINT(DBG_LOAD| DBG_WARNING,
            (L"SDNdis: Active path str == %s\n",pConfigParm->ParameterData.StringData.Buffer));
    }
    NdisCloseConfiguration(configHandle);

    DBGPRINT(DBG_LOAD| DBG_LOAD,
            (L"SDNdis: Active Path Retrieved: %s \n",pAdapter->ActivePath));// now get the device handle    pAdapter->hDevice= SDGetDeviceHandle((DWORD)pAdapter->ActivePath, NULL);return NDIS_STATUS_SUCCESS;
}
第一行相关的错误信息显示的是:SDNdis: Failed to get active path key (0xC0000001)。
代码是原厂提供的,理论上我应该不用修改。
为什么在初始化NDIS时候会出错呢?我是否还缺少组件没有加?目前加入的组件包括:SD Memory,SDIO standard host controller, SDIO WIFI(sychip),还有Networking-LAN下面的和wifi有关的都加上去了,NDIS在哪里增加呢?
谢谢
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(中级)

18
 
WIFI是NDIS的miniport驱动,是被NDIS加载的啊

你要改order,应该去改ndis的order啊
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

19
 
引用 17 楼 suwyhoho 的回复:
WIFI是NDIS的miniport驱动,是被NDIS加载的啊

你要改order,应该去改ndis的order啊

是在说我的问题么?我并不存在order的问题啊。
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

20
 
这个问题应该是你驱动没有签名的原因,我遇到过这种情况,签名后就可以了,如果不知道怎么签名联系我
us.sino.us@gmail.com
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表