VxWorks支持两种形式的网络驱动,一种是BSD驱动支持通用的BSD4.4网络,API,结构等和大多数BSD网络的驱动类似.另一 种是END网络驱动,是VxWorks独有的,根据VxWorks MUX接口编程,不过END驱动在底层也要转换成BSD的形式.
1.BSD4.4网络驱动设置.
网络设备驱动的调用主要在/target/src/config/usrNetwork.c文件中,下面说明BSD4.4驱动在VxWorks系统调用.
主要调用过程如下:
VxWorks系统执行的第一个任务target\config\all\usrConfig.c文件中 usrRoot=======>>target\src\config\usrNetwork.c文件中的usrNetInit ( )通过数组表netIf[]初始化相应的BSD网卡驱动.
在usrNetwork.c中的调用过程如下:
usrNetInit()函数中调用usrNetIfAttach():
#ifdef INCLUDE_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中的定义初始化:
...
LOCAL NETIF netIf [] = /* 网络接口,定义网卡驱动 */ {
/* 下面是定义包含的各种网络驱动 */
#ifdef INCLUDE_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 */ #ifdef INCLUDE_FEI /* 如果定义了INCLUDE_FEI,初始化Intel 网卡 */ { "fei", feiattach, (char*)FEI_POOL_ADRS, 0, 0, 0, 0}, #endif /* INCLUDE_FEI */ #ifdef INCLUDE_EX /* Excelan 网卡 */ { "ex", exattach, (char*)IO_ADRS_EX, INT_VEC_EX, INT_LVL_EX, IO_AM_EX_MASTER, IO_AM_EX }, #endif /* INCLUDE_EX */ #ifdef INCLUDE_ENP /* CMC 网卡 */ { "enp", enpattach, (char*)IO_ADRS_ENP, INT_VEC_ENP, INT_LVL_ENP, IO_AM_ENP }, #endif /* INCLUDE_ENP */ ...
} |