admin 管理员组文章数量: 1086019
2024年3月18日发(作者:animate用法)
技术应用
TECHNOLOGY
AND
MARKET
V
—
28,No.
2,2720
Linux
应用程序移植到
VxWor/s
的方法研究
侯波
,
黄众
,
覃事东
(
中车株洲电力机车有限公司
,
湖南
株洲
612602
)
摘
要
:
介绍了
linux
应用程序移植到
VxWor/s
操作系统的方法。并通过具体的
SFTP
客户端移植,说明了此方法可行
。
关键词
:
VxWor/s
;
SFTP
;
程序移植
ResearcC
on
Applicction
mipretion
from
Linux
ta
VxWorkp
HOU
Bo
,
HUANG
Zhong
,
QIN
SSidong
(CRRC
Zhiizh
—
Locomotive
Co.
.Lth.
.Zhiizhon
412002,Chma
)
Abstroci
:
This
ar/me
intropuccs
thc
method
oO
porting
Linux
anpUca/ods
to
thc
VxWor/s
operating
system
。
And
thc
miaration
oO
syeciVc
SFTP
clieni
shows
that
this
method
is
feasidle.
Key
worOt
:
VxWor/s
;
SFTP
;
Program
miara/od
dol
:
12.
3060/j.
imn.
1906
-
8554.0021.02.
037
0
引言
程序移植是很早就被提岀的概念
,
其目的是将程序转移到
不同的环境下运行
。
采用程序移植的方法
,
可以极大降低开发
成本和周期
。
对平台的差异性分析是进行跨平台移植的前提,
的方法
。
SFTP
是主流的加密上传文件的方案
,
随着安全和加
密越来越受到重视
,SFTP
在互联网取代
ftp
成为趋势
。
1
系统分析
系统对比如表
1
所示。
由于
VxWorks
操作系统和
Linux
操作系统的设计思想和系统架构的差异明显
。
Linux
中复
然后通过操作系统函数替代
、
模块再设计技术等方案来实现程
序的跨平台移植。
由于
VxWxks
与
Linux
构架的巨大差异
,
导致移植过程中
杂的应用仅通过接口替换移植到
VxWorks
上
,
是不可行的。
VxWorks
没有保护模式
,
1
个线程崩溃
,
可能会蔓延到整个
操作系统
,
对代码的健壮性提岀了更高的要求
。
Linux
的
一个进程崩溃后
,
在保护模式下不会对其他进程产生影响
。
从这点看
Linux
程序移植到
VxWorks
比
VxWorks
移植到
存在很多困难
,
对于
VxWorks
与
Linux
之间的差异以及
VxWorks
程序移植到
Linux,
在国内外已经有很多研究
。
但将
Linux
程序移植到
VxWorks
的研究比较少
。
本文将
SFTP
协议
客户端代码移植到
VxWorks
作为实际案例
,
讲述移植应用程序
Lngux
难度大
。
表
1
2
个操作系统的对比
VxWorks
应用场景
实时操作系统
,
表现在强实时性和可靠性
Linux
通用型
OS,
界面版会注重用户的交互体验
內核大小
运行模式
微內核宏內核
实模式
,
不区分內核空间
,
用户空间
进程即线程
保护模式
,
区分用户地址空间和內核地址空间
进程
,
线程
,
內核线程
任务管理
內存管理
一般使用方式
:
实存储
,
所有任务运行在同一內
虚拟存储
,用户进程运行在虚拟地址空间
,
MMU
负责将虚拟地址
存空间
,
不提供任务间的內存保护
转换为物理地址
,用户进程只能访问本进程的內存空间
2
移植基本方案和过程
基本方案是
Linux
应用中的一个进程的主线程变为
makefiU
进行库的编译,
进行
gcc
编译
。
如果不会写
,
只能看懂
依赖关系
,
用自动化编译也可以
。
VxWorks
的一个任务
,
其余各个线程也变成一个任务
(
如有
)
,
应用中的数据共享
,
没有变化
。
注意移植任务中的变量不能和
3)
进行接口函数替换
。
可以反向参考文献
[
1
]
中的任务
函数替换和其他函数替换
。
还需要注意
Vx
进程是不存在的
,
系统中已有的应用变量冲突
。
过程如下
。
需要对全局变量
、
静态变量进行函数初始化;对打开的
IO
进行
关闭
,
这样任务退岀后才可以重新正常运行
。
任务函数的差异
很大,其余的
IO
管理
、
网络通信
、
任务通信等虽然函数有一点
2
需要选择合适且简单的库进行移植。
库选是否合适直
接关系到需要的功能能否移植成功
。
2
)
如果会熟练地使用
VxWorks
的
makefiU,
则可修改
差别
,
但是函数功能类似可以替换
。
102
技术与市场
222I
年第
28
卷第
2
期
如果没有函数可以替换
,
如
fork
函数,进程复刻函数
,
同时
复刻了全局和静态变量
。
Vx
不区分进程和线程
,
实现没法复
刻所有相关线程和变量
,
难度很大
,只能删掉这部分功能或者
进行模块重写
。
4)
根据需求
,
对库的代码进行改写
。
5)
对程序进行黑盒测试
、
稳定性测试,如果有问题,
根据错误
提示和错误表现
,
2
对弋码进行跟踪调试
,找到问题,并修改代码
。
3
SFTP
功能移植到
VxWorte
与
ftp
协议相比,
SFTP
在客户端与服务器间提供了一种
更为安全的文件传输方式
。
这个安全数据通道由
SSH
连接提
供
,
即
SSH
连接隧道作为安全数据通道
。
登录时采用非对称
加密
,
交互时采用对称加密
。
需要实现文件自动上传的功能
。
2
需要一个合适的库移植
。
Linnx
最常用的是
openssh,
这
个库依赖于
opense
和
zhb
两个库,
仅
opense
的源码就有
20
M
o
还有个常用
putty
开源库
,
其不需要依赖
,
且源码有
5
M,
去
掉
telnet
的功能,
ssU
服务端功能
,
又可以减少代码
,
从工作量
角度可选
0.72
版本的
putty
。
2
)
在
Linnx
中安装
putty
,
运行
configure
生成
makefbe
文
件
。
可以看到有
2
个
sftp
客户端实现,分别是
psftp
和
psep
。
选取
psftp
进行移植
,
将
psftp_SOURCES
的全部文件拷贝到
Wind
River
Workbencli
3.
3
的新建项目中
。
根据
unin.
h
头文件和
VxWorks
增加全局定义
-
DNO_
IPV6
、
-
DNOT_X_WINDOWS
、
-
DNO_GSSAPI
、
-
HAVE_NO_
SYS_SELECT_H
,
前
3
个是功能的去除
,
后面是没有专用的
select.
h
头文件
。
3)
函数接口替换
。
搜索
pthread.
h,
没有找到线程函数
。
搜索
unistd.
h,
找到有
fork
函数的使用
,
fork
函数岀现在
ux-
Pruy.
c
中
,
这块功能是
sftp
的代理功能
,
即从
A
设备登录到
B,
再从
B
登录到
C,B
需要代码
,
在一般情况下,嵌入式系统不
需要实现中转功能
,
所以把代理功能也去掉
,
使用
nocprcy.
c
用空函数代替原函数实现
。
其余函数的替换,人工查找很慢
,
直接
build
等报错,
然后
逐个函数进行替换
。
缺少的头文件如
〈
gdb.
h
〉
、
〈
sys/fbe.
h
〉
、
〈
termics.
h
〉
、
〈
pwd.
h
〉
、
〈
netdb.
h
〉
。
分别进行源码分析
,
〈
glob.
h
〉
、
〈
sys/fUe.h
〉
用户文件查找
,
可以注释掉
,不用文件查找功
能,用指定固定名字的文件上传
;〈
termics.
h
〉
、
〈
pwd
.
h
〉
串口和
用户名密码也没有用
,
需要
tep
文件传输功能
,
不需打印内容
和密码管理,
也能注释掉相关内容
。
然后将有错误提示的代码
修改
,
例如网络函数阻塞的设置
,
超时的设置
(VxWorks
不支持
超时设置)
;
IO
函数中
open
、
mkdir
参数个数不同
。
全局变量
、静态局部变量和
IO
的使用检查。
SFTP
的基本
流程:
tep
登录
,
打开一个文件进行上传
,
对
psftp
中的全局变量
和静态局部变量查找
,
例如
psftp.
c
中的
static
Backend
*
back
;
stativ
unsignen
chac
*
pending
=
NULL
;
static
unsignen
pendlen
=
2,
pendsize
二
2
;
等
。
增加到初始化代码
bacC
=
NULL
;
pendlen
=2
;
…
…
。
对
socket
的连接描述符
,
文件描述符
,
进行代码查
看
,
发现
feket
的描述符是全局变量
,
文件描述符不是全局变
技术应用
量
。
因为代码有多处
exit,
线程退岀会无法关闭文件
,
增加
1
个
全局文件描述符
,并在打开文件函数中
,
等于打开的文件描述
符
,在异常退岀处增加代码进行文件关闭。
测试发现这些都是
必须的
,
线程异常退岀后
,
初值不对
,
导致线程无法再次运行
。
因为初值中有
TCP
等待接收的字符个数等关键变量;文件不
关闭,
会打开很多文件描述符
,
导致其他任务无法运行,系统崩
溃
。
另外,在网络传输中
,因为断网等问题会导致传输中断,
应
全面考虑各种异常状况的发生
。
由于这个库有很多全局变量
,
如果不进行大量修改
,
会导
致这个库在
VxWorks
中只能单任务运行
。
同时这个库使用了
eb
函数
,
则不能当做一般函数调用
,
必须开独立任务调用文
件上传函数
,
并同时对任务进行监视
,岀错后重启任务。
4)
经过测试
,
手动输入对应的命令,
SFTP
功能已经正常。
要自动上传
,
还必须对
sftp
库的部分函数改写,原先的客户端
是收命令后
,
执行
,
执行完毕再等待命令输入
。
第一步接收用
户名
、
密码
,
命令的地方进行替换和注释
;6c_sftp
函数是个循环
接收命令,
循环执行的函数
。
要实现自动上传,必须把这个函
数改为单步,
同时增加参数,直接传入命令
,
且根据执行结果返
回对应的值
。
同时还要增加文件夹的所有文件自动上传的函数,
且支持
断点续传
。
断点续传
reput
的使用
,
需要注意
sftp
和
ftp
的服务
端有所不同
,
如果
ftp
服务端没有文件
,
则不自动上传文件,
直
接返回无文件提示;
ftp
服务端收到续传命令
,
如果没有文件可
以直接创建文件
,
从
2
位置开始传输文件
。
6
稳定性测试
。
目前程序已经在某地铁公司的列车上稳
定运行
1
年,
没有发现异常问题
,
车上各个子系统的文件都可
以
ste
方式发到地面
。
4
结语
本文先阐述了
Linnx
的一个应用程序移植到
VxWorks
平
台的基本方法
,
又以
SFTP
客户端的代码移植举例
,
对移植前后
的代码进行功能测试和稳定性验证,
结果表示本文的移植方法
可行
。
参考文献
:
[
1
]
许志.从
VxWorks
到
Linnx
的应用移植与优化方法研究
[D].
武汉:华中科技大学
,2012
[
2
]
高鹏飞
,
李新明,
孙建
.Linux
与
VxWorks
任务调度机制
分析[
J].
工业控制计算机
,2025,2
(
6
)
:
32
-32.
[3
]
周浩尚
,
高照玲
.VxWorks
下
TRDP
协议栈移植
[J].
电子
技术应用
,
222,44(1
)
:
56
-56.
作者简介
:
侯波
(1985
—
)
,男
,
山西高平人
,
本科
,
工程师
,
研究方向
:
软件测试
。
黄众
(1989
—
)
男
,
湖南常德人
,
硕士研究生
,
工程师
,
研究
方向:软件测试
。
覃事东
(
186
—
)
,
男
,
湖南长沙人
,
硕士研究生
,
工程师
,
研究方向
:
软件测试
。
103
版权声明:本文标题:Linux应用程序移植到VxWorks的方法研究 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/b/1710771053a572268.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论