在VxWorks 6.9 RTP应用程序中执行shell命令

问题描述 投票:0回答:4

如何从RTP应用程序执行

dump memory (d())
xbdCreatePartition
dosFsVolFormat
dosFsShow
等shell命令? Linux提供了系统命令来完成这项工作,这在VxWorks6.9中是如何实现的?

rtp vxworks
4个回答
0
投票

如果您正在寻找

system()
的等效项,以允许您执行任意命令,那么您就不走运了。

但是,您习惯与之交互的“Shell”实际上是一个 C 解释器,您正在运行的任何命令都可以从代码中调用。因此,您可以从您自己的代码中调用

dosFsVolFormat

这里需要注意的是,大多数功能都是在内核中实现的,因此这些功能可能在您的 RTP 中不可用。可用的功能因版本而异,并且还可能取决于您的内核配置。您可以将标头的用户版本与内核版本进行比较,以查看可用的内容。

但是,您始终可以编写自己的系统调用,以向 RTP 应用程序公开内核功能。


0
投票

您不能直接从 RTP 调用内核函数。您可以创建一个内核模块项目,该项目可以从 TCP 获取命令并为您执行内核函数。在 RTP 项目中,您将从 TCP 发送这些命令。 您可以使用串行通道协议或消息通道等来代替 TCP。
这样做的主要原因是将内核空间与应用程序空间分开,这样您的应用程序就不会导致内核崩溃。


0
投票

对于 7 年后想知道并使用 VxWorks 7 和更新版本的人...

有一个 API 允许您注册“系统调用”,您可以从 RTP 调用该 API 来执行内核函数。

阅读“syscallLib - VxWorks系统调用基础设施管理库”。总的来说,您使用 syscallGroupRegister() 注册一个函数,实现内核函数例程来完成您想要的工作,然后您应该能够从 RTP 调用它。

此 API 允许您传递最多 8 个参数。或者您也可以将内存地址传递给结构(例如)以传递更多自定义参数。


-1
投票

我假设您有一台主机和一个在 vxworks 上运行的目标。这意味着您正在使用交叉编译器 IDE,例如 Windriver Workbench 或 Tornado。

此时此刻,你有2种可能。

1) 您的目标上有一个 VGA 或 HDMI 端口,因此您可以轻松插入显示器,并且可以看到 vxworks shell 在蓝屏上运行。

您可以在其中运行 shell 命令。

https://userweb.jlab.org/~brads/Manuals/VxWorks/vxWorks_commands.html

2)可以使用windriver调试工具。但您需要向 vxworks 内核映像添加组件,例如 INCLUDE_DEBUG_AGENT。您可以自行配置。连接远程设备时,您可以打开 shell 窗口并开始键入系统调用。

https://borkhuis.home.xs4all.nl/vxworks/vxw_pt2.html

祝你好运...

© www.soinside.com 2019 - 2024. All rights reserved.