当前位置:首页 > 嵌入式 > 嵌入式软件
[导读]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"

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭