WinCE5.0 SMDK2410 BSP在GEC2410开发板上的移植(14)-移植CS8900A网卡NDIS Miniport驱动

还有一个没有实现的重要驱动就是网卡驱动了,在eboot里有一段网卡的处理程序,实际上是一些网卡的读写函数,用于PB下载和KITL的,而在CE最终运行时如果我们需要进行网络通信,那就需要NDIS架构的网络驱动.
在WinCE中,通过NDIS(The Network Driver Interface Specification),WinCE系统和网卡及网络协议进行交互。NDIS提供了一个完全的网络驱动的抽象层,目前WinCE支持NDIS5.1,其中包括对RNDIS,NDISWAN,Token Ring等的支持。在WinCE中,整个网络架构体系如图:

更多关于NDIS的介绍可以参考PB的帮助文档.这里我们只要知道我们的网卡驱动是遵循NDIS架构的,这样应用程序的网络通信才能实现.
在WinCE中支持三种类型的网络驱动:Miniport driver,Intermediate driver和Protocol driver,我们要实现的就是硬件网卡的驱动,也就是Miniport driver.开发Miniport Driver,在底层调用NDIS的接口访问底层硬件,在上层提供接口函数供高层协议调用进行网卡配置或者数据通信.
网上有很多基于2410/2440的CS8900的NDIS miniport driver,我们可以在此基础上修改移植到自己的平台上. 我们先介绍下移植所需要的工作,如注册表,中断映射,source文件设置等.
1.代码文件和source文件
驱动共有4个文件:
cs8900.c:直接操作网卡的函数
interrupt.c:中断处理
miniport.c:NDIS miniport驱动接口实现
wince.c:驱动dll入口

souce文件:
TARGETNAME=cs8900 WINCEOEM=1 RELEASETYPE=PLATFORM TARGETTYPE=DYNLINK DLLENTRY=DllEntry MSC_OPTIMIZATION=/Ox /Fc TARGETLIBS= / $(_PROJECTROOT)/cesysgen/sdk/lib/$(_CPUINDPATH)/ndis.lib / $(_PROJECTROOT)/cesysgen/sdk/lib/$(_CPUINDPATH)/ntcompat.lib / $(_PROJECTROOT)/cesysgen/sdk/lib/$(_CPUINDPATH)/coredll.lib / $(_PROJECTROOT)/cesysgen/oak/lib/$(_CPUINDPATH)/ceddk.lib / DEFINES=$(CDEFINES) -DNDIS_MINIPORT_DRIVER -DNDIS40_MINIPORT -DWIN_CE -DARM_PROCESSOR C_COMPILER_FLAGS=$(C_COMPILER_FLAGS) /Fc LINKER_FLAGS=$(LINKER_FLAGS) -MAP RCNOFONTMAP=1 DRIVER_ALIGNMENT=0x200 CDEFINES=$(CDEFINES) -DNDIS_MINIPORT_DRIVER -DCS8900 INCLUDES= / $(_TARGETPLATROOT)/SRC/inc;/ $(_WINCEROOT)/PUBLIC/COMMON/SDK/INC;$(_WINCEROOT)/PUBLIC/COMMON/OAK/INC;$(_WINCEROOT)/PUBLIC/COMMON/DDK/INC; / $(_TARGETPLATROOT)/SRC/COMMON/S3C2410X/INC SOURCES= miniport.c/ interrup.c/ cs8900.c/ wince.c
2.BSPIntrInit
GEC2410的网卡中断引脚连接在IRQ_EINT9上,因此在BSPIntrInit中进行相应引脚的初始化,这部分代码SMDK2410中已经实现,我们只需要将IRQ_EINT9与SYSINTR_ETHERNET映射.代码如下:
// Then get virtual address for IO port pOalPortRegs = OALPAtoVA(S3C2410X_BASE_REG_PA_IOPORT, FALSE); // Set GPG1 as EINT9 value = INREG32(&pOalPortRegs->GPGCON); OUTREG32(&pOalPortRegs->GPGCON, (value & ~(3 << 2))|(2 << 2)); // Disable pullup value = INREG32(&pOalPortRegs->GPGUP); OUTREG32(&pOalPortRegs->GPGUP, value | (1 << 1)); // High level interrupt value = INREG32(&pOalPortRegs->EXTINT1); OUTREG32(&pOalPortRegs->EXTINT1, (value & ~(0xf << 4))|(0x1 << 4)); // Add static mapping for Built-In OHCI OALIntrStaticTranslate(SYSINTR_OHCI, IRQ_USBH); // Add static mapping for CS8900 EINT9 OALIntrStaticTranslate(SYSINTR_ETHERNET, IRQ_EINT9);
其中SYSINTR_ETHERNET是逻辑中断号,我们需要在Bsp_cfg中定义:
#define SYSINTR_ETHERNET  (SYSINTR_FIRMWARE+6) //0x16

其他的中断初始化及设置BSP都已经设置好,无需修改,具体实现在/WINCE500/PLATFORM/COMMON/SRC/ARM/SAMSUNG/S3C2410X/INTR/intr.c

3.注册表设置
首先使能BSP_NOCS8900(这里在GEC2410.bat设置set BSP_NOCS8900=0)
IF BSP_NOCS8900 !
; HIVE BOOT SECTION
;================= CS8900 =================
[HKEY_LOCAL_MACHINE/Drivers/CS8900]
   "Dll"="ndis.dll"
   "Prefix"="NDS"
   "Miniport"="CS8900"

[HKEY_LOCAL_MACHINE/Comm/CS8900]
   "DisplayName"="CS8900"
   "Group"="NDIS"
   "ImagePath"="CS8900.dll"

[HKEY_LOCAL_MACHINE/Comm/CS8900/Linkage]
   "Route"=multi_sz:"CS89001"

[HKEY_LOCAL_MACHINE/Comm/CS89001]
   "DisplayName"="CS8900"
   "Group"="NDIS"
   "ImagePath"="CS8900.dll"

[HKEY_LOCAL_MACHINE/Comm/CS89001/Parms]
   "BusNumber"=dword:0
   "BusType"=dword:0
   "Sysintr"=dword:16 ;对应于SYSINTR_ETHERNET
   "DuplexMode"=dword:1
   "IoBaseAddress"=dword:A7000300
   "Transceiver"=dword:3
   "CardType"=dword:1

[HKEY_LOCAL_MACHINE/Comm/CS89001/Parms/TcpIp]
   ;这里使用静态IP的设置
   "EnableDHCP"=dword:0
   "DefaultGateway"="192.168.1.1"
   "LLInterface"=""
   "UseZeroBroadcast"=dword:0
   "IpAddress"="192.168.1.10"
   "Subnetmask"="255.255.255.0"
   "DNS"="192.168.1.1"

[HKEY_LOCAL_MACHINE/Comm/Tcpip/Linkage]
   "Bind"="CS89001"
;============= End of CS8900 =================
; END HIVE BOOT SECTION
ENDIF BSP_NOCS8900 !
有了这些设置在控制面板的网络配置里就可以看到CS89001的网卡图标了,就可以像在windows里一样进行网络配置了.同时用HIVE标记,这样所做的配置修改就可以保存了.

4.添加组件
NDIS组件,TCPIP协议栈,当然LAN的支持也是必须的,同时要去除KITL的支持,否则会发生冲突.
WinCE5.0 SMDK2410 BSP在GEC2410开发板上的移植(14)-移植CS8900A网卡NDIS Miniport驱动_第1张图片
下一篇来详细分析下这个CS8900 NDIS Miniport driver

你可能感兴趣的:(WinCE5.0 SMDK2410 BSP在GEC2410开发板上的移植(14)-移植CS8900A网卡NDIS Miniport驱动)