嵌入式系统道系统.docx
《嵌入式系统道系统.docx》由会员分享,可在线阅读,更多相关《嵌入式系统道系统.docx(36页珍藏版)》请在冰点文库上搜索。
嵌入式系统道系统
嵌入式系统——道系统介绍
1国产软硬件应用必要性分析
操作系统是装备应用的控制管理核心,对武器装备的功能、性能和可靠性等关键内容具有重要影响。
为适应现代战争的需要,装备应用向信息化、自动化、智能化、高性能、高可靠的方向快速发展,而这些特性大都需要通过软件来进行支持。
其中,操作系统起着至关重要的作用,为整个武器装备的功能、性能和可靠性提供核心支持。
我军装备应用研制现用操作系统为美国风河公司研制的嵌入式实时操作系统产品VxWorksv5.5.1,通过对装备用操作系统选型历史、应用研制、装备用国产操作系统需求进行深入分析,在项目中我军装备中应用国产操作系统(如“道”系统)替换现研制用操作系统VxWorks5.5.1是必要的。
装备用操作系统选型历史证明在我军装备中应用国产操作系统是必要的
从上世纪80年代至今,我军装备系统选用的操作系统产品包括:
美国英特尔(Intel)公司的iRMX、美国风河(WindRiver)公司的VxWorks等实时多任务操作系统以及美国微软(MicroSoft)公司的嵌入式操作系统产品WindowsXPEmbeded(XPE)。
国外商业货架嵌入式实时操作系统产品不是我我军装备的货架产品。
为了提升我军装备研发水平,另外基于我国当时没有相应产品这个现实,从1998年开始,我军装备研发部门引进了美国风河公司的VxWorks实时操作系统产品。
但是,嵌入式应用的开发特点决定了,除了购买商业货架产品以外,开发过程中还需要厂家提供及时的技术支持和服务,然而由于VxWorks是美国产品,其厂家在国内的技术支持力量薄弱,另外由于保密的原因,国外厂家也无法提供直接的技术支持。
所以,在引进后,工业部门自己花了大量的时间、精力和资金对VxWorks产品进行理解、熟悉、修改和定制。
VxWorks的升级产品将使我们的工业部门重复上述过程。
说明目前我军装备工业部门目前在这项技术上还是受制于人的。
国外嵌入式操作系统产品的生命周期不受国内我军装备和国防科技工业自主发展的制约。
在相关产品停止发展或是与自主发展我军装备的需求不一致的情况下,会制约我军装备的自主发展。
80年代初期,我军装备开始在不同类型的电子装备的研发中引进了Intel公司的CPU技术和其配套的实时操作系统产品i-RMX/86,但是,由于Intel的商业方向转而定位在PC机和服务器领域,Intel在90年初期放弃了嵌入式实时操作系统产品i-RMX,使得我军装备研发部门也于90年代中期停止了i-RMX产品系列的使用。
然而,安装了i-RMX操作系统的装备至今还在使用,但是熟悉这套系统的人已经很少,配套的调试设备和维护设备也已经过时。
这种事件的发生,不仅对老装备的维护带来很大困难,对新装备的发展也带来不利影响
2009年6月,Intel收购WindRiver公司再次给国内我军装备的持续发展已经带来了非常现实的威胁。
Intel收购的目的是WindRiver在嵌入式Linux方面的实力,以在移动终端等民用市场同其他IT巨头进行生死竞争。
其直接结果便是WindRiver的国防产品会受到冷落。
尽管这种影响不会即刻体现出来,但我军装备大量应用VxWorks产品的前途已经毋容置疑的严峻而紧迫。
2008年3月,微软宣布WindowsXP产品将于2009年4月14日停止主流支持服务,09年5月宣布延长,但是并没有说延长至何时。
一旦WindowsXP停止更新,WindowsXP产品系列,包括WindowsXP/Embeded将面临淘汰,而选用XPE的我军装备也将面临存在安全隐患、无法得到持续的技术支持和服务等关键问题;微软后续是推出Windows7的嵌入式版本还是只推WindowsCE也会导致我军装备再次面临抉择。
i-RMX、VxWorks、WindowsXP/Embeded等我军装备选用的装备用操作系统产品或被生产厂商停止维护,或被收购的事实充分说明:
国外嵌入式实时操作系统产品生命周期不受我军装备维护需要的影响,对我军装备的可维护性造成了巨大困难,提高我军装备维护成本;国外嵌入式实时操作系统产品不会因为我军装备的发展需要制定相应发展规划,使我军装备的研制受到相应产品的严重制约,不能满足我军装备的可持续发展需要。
因此,在我军装备中应用国产操作系统产品替代国外操作系统产品是必要的。
2现有装备替换国外操作系统产品需求
我军装备现装备用操作系统选用的均为国外操作系统产品,为保障系统安全性、可维护性,具有替换现装备用操作系统为国产操作系统,并在新研型号中逐步推广应用国产操作系统的需求。
我军装备现装备用操作系统是美国风河公司生产、销售的嵌入式实时操作系统产品VxWorksv5.5.1,配套开发工具为Tornado2.2。
近十年来,工业部门基于VxWorksv5.5.1开发了大量的装备应用,开发人员已经适应了Tornado2.2的开发工具,并Tornado2.2、VxWorks5.5.1的功能特点形成了一套研制模式。
替换VxWorks5.5.1,不仅仅是替换一个操作系统内核,还涉及多方面需求,包括:
1)国产操作系统应提供与VxWorksv5.5.1对等的功能,如基于优先级抢占的任务调度算法、信号量、消息队列、内存管理、设备管理等;
2)国产操作系统应提供与VxWorksv5.5.1近似的性能,提供同等数量级的操作响应时间;
3)国产操作系统应提供与VxWorksv5.5.1一致的编程接口,减少应用迁移的工作量;
4)国产操作系统应支持已开发的装备用硬件设备驱动模块、软件中间件模块二进制代码的迁移,以更多地利用工业部门已有研制成果;
5)国产操作系统应提供功能、使用方式与Tornado2.2一致的开发工具,以适应工业部门已经形成的开发模式,便于开发人员快速掌握。
3“道”系统概述
“道”系统是北京科银京成技术有限公司自主研制的嵌入式基础软件,包括嵌入式实时操作系统DeltaOS和集成开发环境LambdaTOOL。
1)嵌入式实时操作系统DeltaOS
DeltaOS具备微秒级的响应时间,提供基于优先级抢占的实时任务调度策略,提供动态加载功能,在功能、性能上可以替代VxWorks5.5。
DeltaOS提供VxWorks接口兼容层,兼容多功能标准显控台标准配套模块所使用的全部VxWorks操作系统接口,支持VxWorks5.5目标代码的加载、运行,保障多功能标准显控台已有成果的无缝迁移,保障基于多功能标准显控台开发的应用的快速迁移。
图41“道”系统嵌入式实时操作系统组成
2)LambdaTOOL
LambdaTOOL基于Eclipse框架构建,与风河公司Workbench6.x采用同一框架。
LambdaTOOL提供功能强大、方便易用的源码编辑环境,快速、稳定的调试环境,支持Tornado2.2编译的目标代码的下载、调试,覆盖编码、调试、测试、部署等装备用嵌入式软件生产周期,形成生产线。
LambdaTOOL针对存在大量VxWorks已有成果的JZ我军装备定制大量功能,保障应用的快速迁移。
图42“道”系统集成开发工具组成
“道”系统详细情况参阅:
附件一:
《道系统3.2.3产品介绍》
附件二:
《道系统3.2.4产品介绍》
“道”系统与VxWorks5.5的对比
3.1.1操作系统
3.1.1.1功能对比
功能模块
功能说明
“道”系统
VxWorks
消息队列模块
创建或打开一个消息队列
支持
支持
关闭指定的消息队列
支持
支持
移除消息队列
支持
支持
发送一个消息到消息队列
支持
支持
从消息队列中接收消息
支持
支持
注册/取消消息队列的通知请求
支持
支持
为消息队列设置属性
支持
支持
获取指定的消息队列的属性
支持
支持
线程管理模块
初始化线程属性结构。
支持
支持
销毁线程属性结构。
支持
支持
设置线程属性结构中堆栈大小属性。
支持
支持
获取线程属性结构中堆栈大小属性。
支持
支持
设置线程属性结构中堆栈地址属性。
支持
支持
获取线程属性结构中堆栈地址属性。
支持
支持
设置线程属性结构中分离状态属性。
支持
支持
获取线程属性结构中分离状态属性。
支持
支持
设置线程属性结构中竞争范围属性。
支持
支持
获取线程属性结构中竞争范围属性。
支持
支持
设置线程属性结构中调度继承属性。
支持
支持
获取线程属性结构中调度继承属性。
支持
支持
设置线程属性结构中调度策略属性。
支持
支持
获取线程属性结构中调度策略属性。
支持
支持
设置线程调度参数属性。
支持
支持
获取线程属性结构中调度参数属性。
支持
支持
创建一个线程。
支持
支持
结束当前的线程。
支持
支持
等待一个线程终止。
支持
支持
动态设置线程的分离状态属性
支持
支持
获取当前线程的ID。
支持
支持
比较两个线程是否相同。
支持
支持
提供一次性初始化功能。
支持
支持
获取指定线程调度策略及调度参数。
支持
支持
动态设置指定线程的调度策略及调度参数。
支持
支持
向指定的线程发送信号。
支持
支持
设置执行线程信号屏蔽码
支持
支持
撤销指定的线程
支持
支持
设置当前线程的撤销状态。
支持
支持
设置当前线程的撤销类型。
支持
支持
设立一个撤销点。
支持
支持
向调用线程的清理函数栈的栈顶增加一个清理函数。
支持
支持
删除调用线程的清理函数栈顶的一个清理函数。
支持
支持
线程专有匙模块
创建线程专有匙(线程私有数据)对象。
支持
支持
删除线程专有匙(线程私有数据)对象。
支持
支持
设置线程专有匙(线程私有数据)对象的值。
支持
支持
获取线程专有匙(线程私有数据)对象的值。
支持
支持
线程条件变量模块
初始化条件变量属性结构。
支持
支持
销毁条件变量属性结构。
支持
支持
初始化条件变量。
支持
支持
销毁已创建的条件变量。
支持
支持
唤醒等待条件变量的线程。
支持
支持
唤醒所有被阻塞在条件变量cond上的线程。
支持
支持
无限等待条件变量。
支持
支持
限时等待条件变量。
支持
支持
线程互斥锁模块
初始化互斥锁属性结构。
支持
支持
销毁互斥锁属性结构。
支持
支持
设置互斥锁属性结构中协议属性。
支持
支持
获取互斥锁属性结构中协议属性。
支持
支持
设置互斥锁属性结构的优先级天花板属性。
支持
支持
获取互斥锁属性结构中优先级天花板属性。
支持
支持
创建并初始化互斥锁。
支持
支持
销毁互斥锁。
支持
支持
互斥锁的阻塞式加锁。
支持
支持
限时加锁互斥锁。
支持
支持
非阻塞加锁互斥锁。
支持
支持
解锁互斥锁。
支持
支持
动态设置互斥锁的优先级天花板。
支持
支持
获取互斥锁优先级天花板。
支持
支持
调度管理模块
获取最大调度优先权
支持
支持
获取最小调度优先权
支持
支持
获取按RR算法调度的实时进程的时间片长度
支持
支持
主动放弃CPU调度资源
支持
支持
信号量管理模块
初始化未命名信号量
支持
支持
关闭未命名信号量
支持
支持
创建/打开命名信号量
支持
支持
关闭已命名信号量
支持
支持
移除一个命名的信号量
支持
支持
以阻塞方式等待信号量
支持
支持
以非阻塞方式等待信号量
支持
支持
解锁一个信号量
支持
支持
获取信号量值
支持
支持
异步信号模块
加入信号到指定的信号集
支持
支持
从指定的信号集中删除一个信号
支持
支持
初始化指定的信号集包含所有信号
支持
支持
判断指定信号是否是指定信号集中的成员
支持
支持
初始化指定的信号集为空
支持
支持
审查/改变信号动作
支持
支持
查询或设置执行线程信号屏蔽码
支持
支持
查询当前执行线程未决的信号
支持
支持
挂起线程直到一个信号被发送到调用线程
支持
支持
向指定的线程发送指定信号
支持
支持
向指定的线程发送指定的需要排队的信号
支持
支持
非超时等待信号
支持
支持
阻塞调用线程直到特定信号发生
支持
支持
以超时方式等待信号
支持
支持
时钟和定时模块
获取指定时钟精度
支持
支持
获取当前时钟值
支持
支持
设置当前时钟
支持
支持
以秒和纳秒为单位延时
支持
支持
以秒为单位延时
支持
支持
设置信号传送闹钟
支持
支持
创建定时器
支持
支持
销毁已创建定时器
支持
支持
设置定时器的定时值
支持
支持
获取定时器的到时的当前剩余值和周期性重新装载的定时值
支持
支持
返回定时器到期计数
支持
支持
3.1.1.2接口对比
接口类别
“道”系统
VxWorks5.5
“道”系统接口
支持
VxWorks应用API接口
支持
支持
POSIX接口
支持
支持
3.1.1.2.1“道”系统POSIX接口支持列表
功能模块
接口
消息队列模块
mq_open
mq_close
mq_unlink
mq_send
mq_receive
mq_notify
mq_setattr
mq_getattr
线程管理模块
pthread_attr_init
pthread_attr_destroy
pthread_attr_setstacksize
pthread_attr_getstacksize
pthread_attr_setstackaddr
pthread_attr_getstackaddr
pthread_attr_setdetachstate
pthread_attr_getdetachstate
pthread_attr_setscope
pthread_attr_getscope
pthread_attr_setinheritsched
pthread_attr_getinheritsched
pthread_attr_setschedpolicy
pthread_attr_getschedpolicy
pthread_attr_setschedparam
pthread_attr_getschedparam
pthread_create
pthread_exit
pthread_join
pthread_detach
pthread_self
pthread_equal
pthread_once
pthread_getschedparam
pthread_setschedparam
pthread_kill
pthread_sigmask
pthread_cancel
pthread_setcancelstate
pthread_setcanceltype
pthread_testcancel
pthread_cleanup_push
pthread_cleanup_pop
线程专有匙模块
pthread_key_create
pthread_key_delete
pthread_setspecific
pthread_getspecific
线程条件变量模块
pthread_condattr_init
pthread_condattr_destroy
pthread_cond_init
pthread_cond_destroy
pthread_cond_signal
pthread_cond_broadcast
pthread_cond_wait
pthread_cond_timedwait
线程互斥锁模块
pthread_mutexattr_init
pthread_mutexattr_destroy
pthread_mutexattr_setprotocol
pthread_mutexattr_getprotocol
pthread_mutexattr_setprioceiling
pthread_mutexattr_getprioceiling
pthread_mutex_init
pthread_mutex_destroy
pthread_mutex_lock
pthread_mutex_timedlock
pthread_mutex_trylock
pthread_mutex_unlock
pthread_mutex_setprioceiling
pthread_mutex_getprioceiling
调度管理模块
sched_get_priority_max
sched_get_priority_min
sched_rr_get_interval
sched_yield
信号量管理模块
sem_init
sem_destroy
sem_open
sem_close
sem_unlink
sem_wait
sem_trywait
sem_post
sem_getvalue
异步信号模块
sigaddset
sigdelset
sigfillset
sigismember
sigemptyset
sigaction
sigprocmask
sigpending
sigsuspend
kill
sigqueue
sigwait
sigwaitinfo
sigtimedwait
时钟和定时模块
clock_getres
clock_gettime
clock_settime
nanosleep
sleep
alarm
timer_create
timer_delete
timer_settime
timer_gettime
timer_getoverrun
3.1.1.2.2“道”系统VxWorks接口支持列表
“道”系统已支持标准台硬件设备驱动、中间件软件模块所使用的全部VxWorks接口,如下表所示:
功能模块
接口
任务管理
kernelTimeSlice
taskPrioritySet
taskLock
taskUnlock
taskSpawn
taskActivate
taskName
taskNameToId
taskIdSelf
taskIdVerify
taskName
taskNameToId
taskIdSelf
taskIdVerify
taskOptionsGet
taskIdListGet
taskIsSuspended
taskIsReady
taskDelete
taskDeleteForce
taskSafe
taskUnsafe
taskSuspend
taskResume
taskRestart
taskDelay
taskPriorityGet
taskStatusString
taskInfoGet
taskShow
任务变量
taskVarAdd
taskVarDelete
taskVarSet
taskVarGet
taskVarInit
taskVarInfo
任务扩展
taskHookInit
taskCreateHookAdd
taskCreateHookDelete
taskSwitchHookAdd
taskSwitchHookDelete
taskDeleteHookAdd
taskDeleteHookDelete
信号量
semBCreate
semCCreate
semMCreate
semDelete
semFlush
semGive
semTake
semInfo
semBLibInit
semCLibInit
semMLibInit
semMGiveForce
管道
pipeDrv
pipeDevCreate
pipeDevDelete
周期任务
period
repeat
消息
msgQCreate
msgQInit
msgQDelete
msgQSend
msgQReceive
msgQLibInit
msgQNumMsgs
msgQInfoGet
Log信息
logInit
logMsg
logFdSet
中断
intConnect
intContext
intCount
intLock
intUnlock
事件
eventSend
eventReceive
eventClear
错误码
__errno
errnoGet
errnoOfTaskGet
errnoSet
看门狗定时器
wdCreate
wdStart
wdDelete
wdCancel
wdLibInit
内存管理
memPartOptionsSet
memalign
valloc
memPartRealloc
memPartFindMax
memOptionsSet
calloc
realloc
cfree
memFindMax
3.1.1.3性能对比
硬件环境:
宿主机:
CPU:
AMDXP3000+
内存:
512M
网卡:
RTL8139
目标机:
CPU:
Intel845Celeron1.7GHZ
内存:
256M
网卡:
DeltaCORE:
RTL8139
软件环境:
DeltaOS3/“道”系统3
VxWorks5.5/Tornado2.2
测试均使用了CACHE,没有使用编译优化。
性能数据:
任务
DeltaCORE3.0
(时间在微秒级)
VxWorks5.5
(时间在微秒级)
创建任务(delta_task_create/taskInit)
3.12
4.85
启动任务(delta_task_start/taskActivate)
0.33
0.15
删除任务
(delta_task_delete/taskDelete)
删除就绪态任务
1.26
2.27
删除延迟任务
1.25
2.34
删除处于阻塞态的任务
1.44
2.39
删除运行态任务
1.43
4.81
挂起任务
(delta_task_suspend/taskSuspend)
挂起就绪态任务
0.20
0.22
挂起处于挂起态的任务
0.12
0.15
挂起运行态任务
0.62
1.10
解挂任务
(delta_task_resume/taskResume)
解挂就绪态任务不导致切换
0.14
0.12
解挂高优先级任务导致当前任务被抢占
0.65
0.85
获得任务优先级
(delta_task_get_priority/taskPriorityGet)
0.08
0.06
设置任务优先级
(delta_task_set_priority/taskPrioritySet)
设置当前任务优先级
0.25
0.30
设