Board logo

标题: VxWorks网络驱动配置及分析 [打印本页]

作者: linuxarm    时间: 2006-6-14 22:48     标题: VxWorks网络驱动配置及分析

   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 */
    
     ...


     }


作者: linuxarm    时间: 2006-6-14 22:49

设置方法:

从以上可以看出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已经定义,不到必要时,无需更改 */

/*
* ::::::: \
* :
*/
# 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网络驱动

在文件config.h中添加"#define INCLUDE_NETWORK"和"#define INCLUDE_END".
在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)

..........

作者: linuxarm    时间: 2006-6-14 22:49

关于DEFAULT_BOOT_LINE 的解释

 

这一行对配置网络,连通Target Server及下载调试程序非常重要

DEFAULT_BOOT_LINE 的原意是为没有NVRAM的target设计的,这样用户就不需要在每次系统启动是手工输入这些参数了.

系统启动网络时xxxEndLoad()会解释这一行并按这一行的定义进行加载.

Emac(0,0) : 启动设备,可是是软盘,硬盘,PCMCIA卡等 其他的设备名称如:

fd为软盘,(0,0)表示第一个软驱,3.5寸盘.
dc则表示从DEC 21x4x 芯片启动,即系统有NVRAM存在,这种方式现在已不采用.
elpci表示启动设备为3COM EtherLink XL PCI网卡.
fei:Intel 82559 EtherExpress网卡.
ene: NE2000网卡
ELT: 3COM以太网卡
EEX: Intel网卡
ata: ATA/IDE 硬盘 ............

405GP: 主机名
vXworks 从主机加载的VxWorks文件
h=172.16.1.159 主机的IP地址

e=172.16.254.52 目标机的IP地址,若网络启动Target Server时,这个IP必须和主机上Target Server配置的Target IP
地址一致,且设置Back End选项为wdbrpc
u=xxx 用户名,pw=xxx 密码: 若通过网络加载调试时,主机的Ftp服务器和目标机的用户名和密码必须相同
tn=vxTarget 目标机名称

*/

#define DEFAULT_BOOT_LINE \
"Emac(0,0)405GP:vxWorks h=172.16.1.159 e=172.16.254.52 \
u=xxx pw=xxx tn=vxTarget"
作者: wuxy    时间: 2006-6-16 02:33     标题: 劳苦功高

劳苦功高
















xilinx开发板原理图

构建PCI桥VHDL源代码

s3c44b0开发板bios源代码

s3c2410开发板原理图(ORCAD格式)+PCB图(protel99se格式)
  基于ARM内核的操作系统的移植

MPEG4编解C源代码(可以移植到ARM和DSP上)

TMS320C6202B+S3C4510视频网络监控系统,原理图(ORCAD格式)+PCB图(protel99se格式MAX693ACSE HPC16083TOZ/V20



MAX693ACSE HPC16083TOZ/V20




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0