VxWorks网络驱动配置及分析
扫描二维码
随时随地手机看文章
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},
};
设置方法:
由以上可看出在VxWorks添加END网络驱动
在文件config.h中添加"#defineINCLUDE_NETWORK"和"#defineINCLUDE_END".
在configNet.h中加入END驱动的入口函数"#definexxx_LOAD_FUNCxxxxxEndLoad"和一些相关的初始化字符串.[!--empirenews.page--]
这样就会在生成BSP包含END/MUX,系统网络初始化调用函数muxDevLoad()会更据这个表初始化END网络.
文件configNet.c关于END驱动初始化的主要内容:
#ifdefINCLUDE_END
IMPORTintipAttach();
IMPORTEND_TBL_ENTRYendDevTbl[];/*定义这个表*/
#endif/*INCLUDE_END*/
..........
#ifdefINCLUDE_END
intcount;
END_TBL_ENTRY*pDevTbl;/*END设备列表*/
END_OBJ*pCookie=NULL;
END_OBJ*pEnd;
#endif/*INCLUDE_END*/
#ifdefined(INCLUDE_END)
muxMaxBinds=MUX_MAX_BINDS;/*初始化MUX接口*/
if(muxLibInit()==ERROR)
..........
关于DEFAULT_BOOT_LINE的解释
这一行对配置网络,连通TargetServer及下载调试程序非常重要
DEFAULT_BOOT_LINE的原意是为没有NVRAM的target设计的,这样用户就不需要在每次系统启动是手工输入这些参数了.
系统启动网络时xxxEndLoad()会解释这一行并按这一行的定义进行加载.
Emac(0,0):启动设备,可是是软盘,硬盘,PCMCIA卡等其他的设备名称如:
fd为软盘,(0,0)表示第一个软驱,3.5寸盘.
dc则表示从DEC21x4x芯片启动,即系统有NVRAM存在,这种方式现在已不采用.
elpci表示启动设备为3COMEtherLinkXLPCI网卡.
fei:Intel82559EtherExpress网卡.
ene:NE2000网卡
ELT:3COM以太网卡
EEX:Intel网卡
ata:ATA/IDE硬盘............
405GP:主机名
vXworks从主机加载的VxWorks文件
h=172.16.1.159主机的IP地址
e=172.16.254.52目标机的IP地址,若网络启动TargetServer时,这个IP必须和主机上TargetServer配置的TargetIP地址一致,且设置BackEnd选项为wdbrpc
u=xxx用户名,pw=xxx密码:若通过网络加载调试时,主机的Ftp服务器和目标机的用户名和密码必须相同
tn=vxTarget目标机名称
*/
#defineDEFAULT_BOOT_LINE
"Emac(0,0)405GP:vxWorksh=172.16.1.159e=172.16.254.52
u=xxxpw=xxxtn=vxTarget"