基于VxWorks下的FTP传输技术研究

2015-06-16 03:44李文涛徐波
科技与创新 2015年11期
关键词:IP地址

李文涛 徐波

摘 要:介绍了VxWorks系统下实现FTP传输文件的方法,分析了使用FTP传输技术的优势,探讨了FTP传输技术在VxWorks系统下的具体应用,就如何进行实际应用给出了解决方法,这在工程应用中具有一定的实用价值。

关键词:VxWorks;Tornado;Ftp;IP地址

中图分类号:TP393.093 文献标识码:A DOI:10.15913/j.cnki.kjycx.2015.11.103

VxWorks是通过Tornado开发工具编译完成的镜像,可以单独在目标机上运行,而雷达数据处理软件是在VxWorks镜像上的运用程序,当VxWorks镜像中没有嵌入FTP时,就无法通过网络访问到目标机,同时,也无法查看和更改目标机中的文件。随着计算机硬件配置日益完善、网络技术越来越成熟,使用网络访问目标机进行数据交换更加方便、快捷。在雷达数据处理软件运行时,通常会产生大量的数据文件,有时也可能需要修改内部相关的配置文件。这就要求工作人员在开发雷达数据处理软件时嵌入FTP,以实现网络访问功能。本文简要介绍了在应用程序中嵌入FTP的方法。

1 VxWorks系统简介

VxWorks是美国风河公司(Wind River)设计开发的一种嵌入式实时操作系统,VxWorks是其嵌入式开发环境的关键组成部分,Tornado是其主机的集成开发环境。因为VxWorks具有较高的可靠性,使其被广泛应用于军工领域。20世纪90年代,VxWorks进入国内市场,受到了用户的好评。

VxWorks提供了类似UNIX的直接I/O、POSIX接口异步I/O等,并且提供了多种格式的文件系统,包括dosFs、rtllFs、rawFs、tapeFs、cdromFs和TSFs等,适用于不同的应用环境,通常将dosFs作为目标机的文件系统。

2 FTP的实现方法

VxWorks操作系统下实现文件传输,在工程实践中,经常用到的有MS_DOS和FTP。其中,在基于MS_DOS下传输文件时,在实践中,经常定义一些文件名大于8个字符的文件,这时,MS_DOS就不能显示文件全名,就会使得文件传输失败,同时,受移动存储介质的约束(VxWorks有没有加载USB驱动、能不能识别U盘启动盘等约束),存在工作效率低等缺点。FTP文件传输系统则是在VxWorks操作系统下建立的文件传输服务器任务,只需要在VxWorks操作系统下特定网卡上指定特定的IP地址,就可以通过客户端实时传输目标计算机上的文件,再通过上位机访问、修改和传输文件等,轻松实现2台计算机之间的文件传输。

在工程实际运行过程中,在所需工程中加入已经编译好文件传输服务器任务的ftp.c文件,在软件主程序函数(或相关初始化函数)中添加与上位机通讯的网卡和IP地址,如果目标计算机中有多块网卡,一般使用主板集成的第一块网卡,例如ipAttach(0,"fei")(根据目标机bootrom和主板网卡芯片使用),ifAddrSet("fei0","127.12.12.1");然后加入FTP入口函数,例如ftpStart("/ata0a")。

完成相关工作后,编译并下载运行该模块就可实现FTP通讯,将上位机IP地址设置成与目标机同一网段的IP地址,例如127.12.12.2.打开目标计算机和上位机,在网络连接正常的状态下,便可以通过上位机运行ftp 127.12.12.1命令,使FTP访问雷达计算机。利用ftp基本命令就可轻松实现2台计算机间的信息交换,例如get,send,ls等基本命令。

3 程序实例和说明

下面简单介绍ftp.c文件,包含头文件有:#include "vxWorks.h""taskLib.h""lstLib.h""sys/socket.h""netinet/in.h""netinet/tcp.h""sockLib.h""logLib.h""loginLib.h""fioLib.h""dosFsLib.h"和"net/protosw.h"等,主要变量BOOL vxftStartDone、vxftActive,int vxftServerSock、vxftMaxClients、vxftTaskId,LIST vxftSessionList,SEM_ID vxftMutexSem、vxftSignalSem等;包含的主要函数有ftpStart(),ftpStop(),vxftInit()等。

STATUS ftpStart(char * root)/*FTP服务函数入口*/

{

STATUS status;

char * rootDir;

rootDir = root;

status = vxftInit(rootDir);

出错处理,返回错误值;

vxftStartDone = TRUE;

return OK;

}

STATUS ftpStop(void)/* FTP服务停止 */

{

STATUS status;

status = vxftDelete();/*任务删除*/

出错处理,返回错误值;

vxftStartDone = FALSE;

return OK;

}

STATUS vxftInit( char * root ) /*FTP任务函数*/

{

int stackSize, on = 1;

struct sockaddr_in ctrlAddr;

stackSize = 0;

/*建立FTP 控制 socket.*/

vxftServerSock = socket (AF_INET, SOCK_STREAM, 0);

socket错误处理,返回错误值;

/*客户端联接信号量等数据的建立*/

lstInit (&vxftSessionList);

vxftMutexSem=semMCreate(SEM_Q_FIFO | SEM_DELETE_SAFE);

vxftSignalSem = semBCreate (SEM_Q_FIFO, SEM_EMPTY);

…… 信号量出错处理,返回错误值;

/*客户端数据连接请求.*/

ctrlAddr.sin_family = AF_INET;

ctrlAddr.sin_addr.s_addr = INADDR_ANY;

ctrlAddr.sin_port = htons (vxftDefaultPort);

if (setsockopt (vxftServerSock, SOL_SOCKET, SO_REUSEADDR,

(char *) &on, sizeof (on)) < 0)

{

…… setsockopt错误处理,返回错误值;

}

if (bind vxftServerSock, (struct sockaddr *) &ctrlAddr,

sizeof (ctrlAddr)) < 0)

{

…… bind错误处理,返回错误值;

}

if (vxftMaxClients > (VXFT_TASK_MASK_SIZE * 32))

{

vxftMaxClients = VXFT_TASK_MASK_SIZE * 32;

}

if (listen (vxftServerSock, vxftMaxClients) < 0)

{

listen错误处理,返回错误值;

}

/*创建FTP服务任务*/

vxftTaskId=taskSpawn ("vxftTask",vxftTaskPriority,vxftTaskOptions,

vxftWorkTaskStackSize,(FUNCPTR) vxftTask,

(int)root,0,0,0,0,0,0,0,0,0);

任务创建失败处理;

vxftActive = TRUE;

rebootHookAdd (vxftDelete);

return (OK);

}

4 结束语

本文从应用程序的角度出发,介绍了在Vxworks系统中嵌入FTP的方法。该方法已经应用于实际软件设计中,而FTP的使用可以让运行在Windows系统下的上位机轻松访问Vxworks系统,实现2个系统间的网络数据交换,为分析处理数据文件提供了便利。

〔编辑:白洁〕

猜你喜欢
IP地址
修改Hosts文件加快网站的访问速度
网络地址转换技术在局域网中的应用
“秒拨”动态IP切换技术的性质评析
IP地址管理模式
探讨校园网中IP地址的动态分配
《IP地址及其管理》教学设计
计算机的网络身份IP地址
企业中服务器的应用
轻松明白网络IP地址以及子网划分问题
浅谈绑定之应用