| | 网站首页 | 新闻 | SOPC | FPGA | DSP | ARM | 嵌入式操作系统 | 下载 | 所有产品 | 留言 | 论坛 | 购买指南 | 网络协议 | 驱动设计 | | |
![]() |
![]() |
| 您现在的位置: 21嵌入式控制研究室 >> 嵌入式操作系统 >> Vxworks >> 文章正文 |
|
|||||
| VxWorks网络驱动配置及分析 | |||||
| 作者:佚名 文章来源:21control 点击数: 更新时间:2005-12-22 | |||||
|
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已经定义,不到必要时,无需更改 */ /* * * */ # 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) .......... 关于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" |
|||||
| 文章录入:fengfeiyi 责任编辑:fengfeiyi | |||||
| 【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 | |||||
| 最新热点 | 最新推荐 | 相关文章 | ||
网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) |
| | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 管理登录 | | |
![]() |
站长:康草科技 |