VxWorks中文网站 > 使用教程 > VxWorks的RTP与DKM有何区别 VxWorks的RTP与DKM分别适合哪些程序
教程中心分类
VxWorks的RTP与DKM有何区别 VxWorks的RTP与DKM分别适合哪些程序
发布时间:2026/11/14 14:36:41

  在VxWorks上做一套采集程序,读取设备、处理数据和上传结果,看起来可以写进同一个工程。但设备访问和业务处理对运行权限的要求不同,改动频率也不同。RTP是运行在用户空间的实时进程,DKM是装载到内核空间的可下载内核模块。两者都可以承担实时工作,选型时要看代码需要调用哪些接口、故障会影响多大范围,以及现场准备怎样更新程序。

  一、VxWorks的RTP与DKM有何区别

 

  RTP有自己的进程地址空间,应用通过系统调用或平台提供的接口访问系统资源。DKM装载后在内核空间运行,其代码可以直接使用目标系统提供的内核接口,模块里的错误也可能影响内核和其他任务。

 

  1、从工程类型和编译产物区分

 

  同一段C或C++代码,换一个文件后缀并不能改变它的运行方式。工程类型会影响编译选项、链接库和可用接口。

 

  ①使用与目标镜像配套的【VxWorks SDK】,检查工程采用的是【RTP】还是【DKM】构建配置。

 

  ②构建后核对产物。RTP生成可启动的【.vxe】程序,DKM生成可装载的【.out】可重定位目标文件。

 

  ③检查【头文件】和【链接依赖】,确认用到的接口在相应环境中可用。把DKM改成RTP时,逐项检查直接调用内核的代码。

 

  2、区分进程启动和模块装载

 

  ①部署【.vxe】时,将程序放到目标机可访问的文件系统,或通过SDK提供的调试连接部署,再启动进程。

 

  ②部署【.out】时,通过目标支持的模块装载方式或调试连接加载模块,按工程配置执行入口函数或启动任务。

 

  ③使用带VS Code调试配置的VxWorks 7 SDK时,核对【launch.json】里的目标和程序路径,在【运行和调试】中选择【Launch RTP】或【Launch DKM】。

 

  RTP可以按进程查看运行状态和退出结果。对DKM来说,模块已装载和业务任务已开始运行是两回事。排查“加载成功但没有数据”时,可以先查初始化入口有没有执行,再查负责采集的任务是否已经启动。

 

  二、VxWorks的RTP与DKM分别适合哪些程序

 

  把程序按职责拆开看,选择会容易些。直接操作设备的代码可能需要内核权限,处理采集结果的代码则可能只需要读写接口。

 

  1、协议处理、日志和业务逻辑可考虑RTP

 

  ①列出程序需要的接口,例如【socket】通信、文件读写和设备读取,核对目标镜像提供的用户态支持。

 

  ②将协议解析、日志记录或数据汇总放进【RTP】工程,通过现有驱动或服务接口取得数据。

 

  ③在目标机上结束并重新启动【RTP】,检查连接能否恢复、文件能否重新打开,以及其他程序是否继续工作。

 

  这类程序有时需要单独升级。例如,上报协议加了一个字段,设备采集方式并没有变化。把协议代码放在RTP中,更新范围就可以限在应用层。进程隔离能减少普通应用内存错误波及内核的机会,但应用停掉以后,依赖它的业务仍需有明确的处理方式。

  2、驱动和依赖内核接口的代码可考虑DKM

 

  开发和调试驱动时,可以用DKM装载相应代码。能否采用这种方式,还要看目标镜像、板级支持包和驱动框架的配置。

 

  ①检查代码是否依赖【中断服务例程】、【设备寄存器】或仅在内核可用的驱动接口。

 

  ②将确实需要内核权限的设备访问代码放在【DKM】中,向应用层提供范围明确的读写或控制接口。

 

  ③在测试目标上验证【初始化】和【停止】流程。若计划卸载模块,先确认关联任务已退出、中断与回调已解除、资源已释放。

 

  3、有实时期限的程序按实测判断

 

  ①在目标板上记录【触发时间】和【处理完成时间】,覆盖正常负载和通信繁忙等工况。

 

  ②对使用【RTP】的实现,测量通过驱动接口读取数据后的端到端延迟,核对是否满足任务期限。

 

  ③若确有一段处理依赖内核接口,或实测显示用户态交互开销无法满足期限,再评估把这部分移入【DKM】后的延迟和故障影响。

 

  三、RTP和DKM配合使用时怎样划分职责

 

  以一套定时采集并上传的设备为例,驱动侧要及时取走数据,应用侧则可能遇到网络阻塞。把这两项工作放在清楚的接口两端,才能分别验证采集时序和上传行为。

 

  1、约定数据交接和积压处理

 

  ①在【DKM】侧处理必须在内核完成的采集工作,记录数据序号和时间戳,并通过目标支持的接口提供数据。

 

  ②在【RTP】侧读取数据,完成格式转换、保存和发送。约定应用来不及读取时的缓冲上限,以及发生丢弃时的记录方式。

 

  ③暂停【RTP】读取后再恢复,对照【数据序号】和【时间戳】,检查是否出现丢样、积压或采集周期变化。

 

  2、验证更换应用时采集端的行为

 

  如果现场需要更换上报程序,测试时可以把这次更新当成一次应用暂时离线。原本正常的采集流程,在应用退出和重新接入时可能表现不同。

 

  ①停止【RTP】并检查采集端状态,确认它按项目约定继续采集或有序停机。

 

  ②启动新版【.vxe】,核对它能否重新打开设备,并正确解释【数据格式】和【接口版本】。

 

  ③若这次更新还涉及【DKM】,先验证旧模块能否按设计停止并释放资源。对没有设计运行中卸载流程的模块,在计划内通过重启目标切换版本。

  总结

 

  程序放进内核后,开发者要对它与系统共享的资源负责。程序放在用户空间,则要接受接口和权限带来的边界。遇到采集、控制和通信混在一起的项目,可以先看哪段代码必须接触硬件,再看哪段业务需要独立更新。两部分是否划分得合适,停一次上报程序、看采集有没有按约定运行,往往比单看工程类型更容易判断。

176 5129 0128