微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > VxWorks网络驱动配置及分析

VxWorks网络驱动配置及分析

时间:05-10 来源:互联网 点击:

VxWorks支持两种形式的网络驱动,一种是BSD驱动支持通用的BSD4.4网络,API,结构等和大多数BSD网络的驱动类似.另一种是END网络驱动,是VxWorks独有的,根据VxWorksMUX接口编程,不过END驱动在底层也要转换成BSD的形式.

VxWorks网络驱动可参见VxWorks网络驱动

1.BSD4.4网络驱动设置.

网络设备驱动的调用主要在/target/src/config/usrNetwork.c文件中,下面说明BSD4.4驱动在VxWorks系统调用.

主要调用过程如下:

VxWorks系统执行的第一个任务targetconfigallusrConfig.c文件中usrRoot()=======>>targetsrcconfigusrNetwork.c文件中的usrNetInit

()通过数组表netIf[]初始化相应的BSD网卡驱动.

在usrNetwork.c中的调用过程如下:

usrNetInit()函数中调用usrNetIfAttach():

#ifdefINCLUDE_BSD

if(!attached)

{

if((usrNetIfAttach(pNetDev,params.unitNum,pBootString)!=OK))

return(ERROR);

attached=TRUE;

}

#endif/*INCLUDE_BSD*/

usrNetIfAttach()函数中调用数组表usrNetIfTbl

for(pNif=usrNetIfTbl;pNif->ifName!=0;pNif++)

{

if(strcmp(buf,pNif->ifName)==0)

break;

}

网络BSD驱动数组表usrNetIfTbl在文件/target/src/config/usrNetwork.c中的定义初始化:

...

LOCALNETIFnetIf[]=/*网络接口,定义网卡驱动*/

{

/*下面是定义包含的各种网络驱动*/

#ifdefINCLUDE_DC/*从DEC芯片启动,即系统有NVRAM存在,现在已过时*/

{dc,dcattach,(char*)IO_ADRS_DC,INT_VEC_DC,INT_LVL_DC,

DC_POOL_ADRS,DC_POOL_SIZE,DC_DATA_WIDTH,DC_RAM_PCI_ADRS,

DC_MODE},

#endif/*INCLUDE_DC*/

#ifdefINCLUDE_FEI/*如果定义了INCLUDE_FEI,初始化Intel网卡*/

{fei,feiattach,(char*)FEI_POOL_ADRS,0,0,0,0},

#endif/*INCLUDE_FEI*/

#ifdefINCLUDE_EX/*Excelan网卡*/

{ex,exattach,(char*)IO_ADRS_EX,INT_VEC_EX,INT_LVL_EX,

IO_AM_EX_MASTER,IO_AM_EX},

#endif/*INCLUDE_EX*/

#ifdefINCLUDE_ENP/*CMC网卡*/

{enp,enpattach,(char*)IO_ADRS_ENP,INT_VEC_ENP,INT_LVL_ENP,

IO_AM_ENP},

#endif/*INCLUDE_ENP*/

...

}

设置方法:

从以上可以看出BSD网络驱动只需在BSP配置文件config.h中将网络(#defineINCLUDE_NETWORK)BSD网卡宏定义(#defineINCLUDE_xxx)和一些I/O参数(一般不需要)加入,则在文件usrNetwork.c中进行相应的初始化.

如:在VxWorks加入支持intel的网卡驱动.在config.h中加入#defineINCLUDE_FEI.

主要网卡定义如下:

#defineINCLUDE_ENE/*includeEagle/NovellNE2000interface*/

#defineINCLUDE_ELT/*include3COMEtherLinkIIIinterface*/

#defineINCLUDE_ESMC/*includeSMC91c9xEthernetinterface*/

#defineINCLUDE_FEI/*includeIntelEtherExpressPRO100BPCI*/

#defineINCLUDE_ELC/*includeSMCElite16interface*/

#defineINCLUDE_EEX/*includeINTELEtherExpressinterface*/

#defineINCLUDE_EEX32/*includeINTELEtherExpressflash32*/

#defineINCLUDE_EX/*includeExcelanEthernetinterface*/

#defineINCLUDE_ENP/*includeCMCEthernetinterface*/

#defineINCLUDE_SM_NET/*includebackplanenetinterface*/

#defineINCLUDE_SM_SEQ_ADDR/*sharedmemorynetworkautoaddresssetup*/

#defineINCLUDE_EL_3C90X_END/*3comfastetherLinkXLPCI*/

#defineINCLUDE_LN_97X_END/*AMD79C972ENDDRIVER*/

....

2.END网络驱动设置.

END网络设备的初始化主要通过定义在文件configNet.h中的一个数组表实现.初始化网络时muxDevLoad()会按这个表的定义把end初始化安装到VxWorks系统.

主要调用过程:

VxWorks系统执行的第一个任务targetconfigallusrConfig.c文件中usrRoot()=======>>targetsrcconfigusrNetwork.c文件(该文件初始化TCP/IP)中usrNetInit(BOOT_LINE_ADRS)(该函数作用是添加MUXEND)========>>pcooki=pCookie=muxDevLoad(pDevTbl->unit,.....)其中pDevTbl在BSP网络配置文件configNet.h中定义.END_TBL_ENTRYendDevTbl[]={...},该表定义了网络设备的具体参数.

configNet.h部分定义如下所示:

#defineDEC_LOAD_FUNCdec21x40EndLoad/*定义加载网络设备的入口程序*/

#defineDEC_BUFF_LOAN1

/*网络设备硬件的物理定义数据串,一般BSP已经定义,不到必要时,无需更改*/

/*

*:::::::

*:

*/

#defineDEC_LOAD_STRING

0x81020000:0x80000000:0x12:0x12:-1:-1:-1:0:0x80800

000

IMPORTEND_OBJ*DEC_LOAD_FUNC(char*,void*);

/*网络END设备表*/

END_TBL_ENTRYendDevTbl[]=

{0,DEC_LOAD_FUNC,DEC_LOAD_STRING,DEC_BUFF_LOAN,NULL,FALSE},

{0,END_TBL_END,NULL,0,NULL,FALSE},

};

设置方法:

由以上可看

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top