精华资料VxWorks网络驱动配置及分析
VxWorks网络驱动配置及分析
VxWorks支持两种形式的网络驱动,一种是BSD驱动支持通用的BSD4.4网络,API,结构等和大多数BSD网络的驱动类似.另一种是END 网络驱动,是VxWorks独有的,根据VxWorks MUX接口编程,不过END驱动在底层也要转换成BSD的形式.
VxWorks网络驱动可参见VxWorks网络驱动
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 */
...
}
设置方法:
从以上可以看出BSD网络驱动只需在BSP配置文件config.h中将网络(#define INCLUDE_NETWORK)BSD网卡宏定义(#define INCLUDE_xxx)和一些I/O参数(一般
不需要)加入,则在文件usrNetwork.c中进行相应的初始化.
如: 在VxWorks加入支持intel的网卡驱动.在config.h中加入
"#define    INCLUDE_FEI".
主要网卡定义如下:
#define    INCLUDE_ENE        /* include Eagle/Novell NE2000 interface */
#define    INCLUDE_ELT        /* include 3COM EtherLink III interface */ #define    INCLUDE_ESMC        /* include SMC 91c9x Ethernet interface */
#define    INCLUDE_FEI        /* include Intel Ether Express PRO100B PCI */
一壶老酒歌曲原唱#define    INCLUDE_ELC        /* include SMC Elite16 interface */
#define    INCLUDE_EEX        /* include INTEL EtherExpress interface */
#define    INCLUDE_EEX32        /* include INTEL EtherExpress flash 32 */
#define    INCLUDE_EX        /* include Excelan Ethernet interface */ #define    INCLUDE_ENP        /* include CMC Ethernet interface*/
#define    INCLUDE_SM_NET        /* include backplane net interface */ #define    INCLUDE_SM_SEQ_ADDR  /* shared memory network auto address setup */
#define    INCLUDE_EL_3C90X_END /* 3com fast etherLink XL PCI */
#define  INCLUDE_LN_97X_END /* AMD 79C972 END DRIVER */
....
2.END网络驱动设置.
END网络设备的初始化主要通过定义在文件configNet.h中的一个数组表实现.初始化网络时muxDevLoad()会按这个表的定义把end初始化安装到VxWorks 系统.
主要调用过程:
VxWorks系统执行的第一个任务target\config\all\usrConfig.c文件
中 usrRoot()=======>>target\src\config\usrNetwork.c文件(该文
件初始化TCP/IP)中 usrNetInit(BOOT_LINE_ADRS)(该函数作用是添加
MUX END)========>>pcooki = pCookie =
muxDevLoad(pDevTbl->unit,.....)其中pDevTbl在BSP网络配置文件
configNet.h中定义.END_TBL_ENTRY endDevTbl[]={...},该表定义了
网络设备的具体参数.
configNet.h部分定义如下所示:
#define DEC_LOAD_FUNC dec21x40EndLoad  /* 定义加载网络设备的入口程序*/
中发发型扎法视频
#define DEC_BUFF_LOAN 1
/* 网络设备硬件的物理定义数据串,一般BSP已经定义,不到必要时,无需更改*/
/*
* <devAdrs>:<PCIadrs>:<ivec>:<ilevel>:<numRds>:<numTds>:<memBase>: \ * <memSize>:<userFlags>
*/
闺门旦# define DEC_LOAD_STRING
"0x81020000:0x80000000:0x12:0x12:-1:-1:-1:0:0x80800
000"
IMPORT END_OBJ* DEC_LOAD_FUNC (char*, void*);
/* 网络END设备表 */
立冬吃什么传统食物
END_TBL_ENTRY endDevTbl [] =
{ 0, DEC_LOAD_FUNC, DEC_LOAD_STRING, DEC_BUFF_LOAN, NULL, FALSE}, { 0, END_TBL_END, NULL, 0, NULL, FALSE},
};
设置方法:
由以上可看出在VxWorks添加END网络驱动
1.在文件config.h中添加"#define INCLUDE_NETWORK"和"#define
INCLUDE_END".
2.在configNet.h中加入END驱动的入口函数"#define
xxx_LOAD_FUNC  xxxxxEndLoad"和一些相关的初始化字符串.
这样就会在生成BSP包含END/MUX,系统网络初始化调用函数muxDevLoad()会更据这个表初始化END网络.
文件configNet.c关于END驱动初始化的主要内容:
#ifdef INCLUDE_END
IMPORT int    ipAttach ();
IMPORT END_TBL_ENTRY endDevTbl[];    /* 定义这个表 */
#endif /* INCLUDE_END */
..........
#ifdef INCLUDE_END
int count;
END_TBL_ENTRY* pDevTbl;            /* END设备列表 */
END_OBJ* pCookie = NULL;
END_OBJ* pEnd;
#endif /* INCLUDE_END */
#if defined(INCLUDE_END)
muxMaxBinds = MUX_MAX_BINDS;        /* 初始化MUX接口 */
if (muxLibInit() == ERROR)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。