关于redhawksdr:如何在RedHawk下运行分布式域

 2022-01-08 

How can I run a distributed domain under RedHawk

我正在尝试使用 RedHawk 2.0.1 创建分布式域,但在手册中找不到足够的设置信息。我有两个相关的问题。我想在与 IDE 相同的主机上运行域管理器,但在另一个节点上运行一个或多个组件。我看到了如何创建一个新的节点项目,但没有看到如何指定它应该运行的网络位置。我可以将它添加到域中,但它只是在本地主机上运行两个设备管理器。我也看不到如何使特定组件在备用节点上运行的详细信息。这是否需要手动添加分配属性?

相关问题是我想使用非 x86 节点作为远程节点。我正在尝试使用 ARM 处理器并按照低于 100 美元的手册中的说明,我能够在我的 ARM 上构建和安装运行时系统,但我发现 GPP 设备的 GPP.spd.xml 仍然具有 x86 作为处理器名称而 prf.xml 具有 arm 作为必需的属性。

手册似乎表明所有节点的二进制文件都将在域管理器的 sdr 中,所以我应该将我的 arm gpp 设备和所有组件的 sdr 条目复制回域管理器主机的 sdr然后它们将在域和波形启动时被部署回我的arm?

是否有关于我所缺少的分布式域的更详细说明?


我相信 100 美元以下项目的最后一个受支持的 REDHAWK 版本是 1.10,因此我们处于未知领域。话虽如此,让我们试一试。

您应该做的第一件事是确保您的域管理器的 /etc/omniORB.cfg 文件如下所示:

1
2
InitRef = NameService=corbaname::<external IP>:2809
InitRef = EventService=corbaloc::<external IP>10.3.1.245:11169/omniEvents

where 应替换为您的网络 IP(即,不是 localhost 或 127.0.0.1)。使用以下命令重新启动 CORBA 命名和事件服务:

1
sudo $OSSIEHOME/bin/cleanomni

下一步是配置您的 ARM 设备以指向域管理器。编辑 ARM 设备上的 /etc/omniORB.cfg 文件以匹配您的域管理器中的文件,甚至是 IP 地址。请注意,您不必在 ARM 设备上启动命名和事件服务。

现在要在 ARM 设备上运行 GPP,您必须在 ARM 设备上创建该节点,因为域还不知道该设备并且无法访问其文件系统。 Sub$100 文档的 1.10 版本的第 16 页 (http://ufpr.dl.sourceforge.net/project/redhawksdr/redhawk-doc/1.10.0/REDHAWK-Sub100-Manual-v1.10.0.pdf) 有安装 GPP 的说明。

请注意,现在最新版本的 GPP 实际上是 C 设备,所以第二步应该是"cd framework-GPP/cpp",第三步应该是"git checkout 2.0.1"。安装完成后,还有几个问题需要处理。首先,运行以下命令:

1
$SDRROOT/dev/devices/GPP/cpp/devconfig.py --location $SDRROOT/dev/devices/GPP

这将配置您的 GPP 以识别它在 ARM 平台上(只要您的处理器是 armv7l 处理器)。

接下来,运行以下命令:

1
$SDRROOT/dev/devices/GPP/cpp/create_node.py --domainname <RH Domain Name>

这实际上会创建包含您的 GPP 的 DeviceManager 配置文件。

最后一步是确保正确配置节点。查看第 21 页,步骤 5。基本上,您可以删除 x86_64 实现并将"x86"的任何实例替换为"armv7l"。

关于构建组件的问题,是的,您必须为感兴趣的平台构建它们,然后将它们安装到域管理器 SDRROOT。如果您设置了一个交叉编译器来构建您的组件(和框架),这将使您的生活更轻松。但是,如果您不这样做,解决方法是在您的 ARM 设备上构建组件,然后将 XML 文件和可执行文件安装到域中。为了使任何组件与您的 ARM GPP 一起工作,它们需要有一个 ARM 实现,其处理器名称与您的 GPP 在其 SPD 中的名称相匹配。

我知道这太多了,而且我有一段时间没有阅读这些说明,所以如果您有任何问题或有任何问题,请告诉我。


更新。更密切地遵循 sub$100 文档中的步骤,似乎 $SDRROOT/dev/devices/GPP/cpp/devconfig.py 没有编辑 GPP.spd.xml 以放入正确的处理器和编译器版本,但是在手动编辑这些之后,我能够在 ARM 处理器上启动整个域(domainManager、deviceManager、GPPdevice),并且能够从运行在 x86 上的 IDE 连接到这个正在运行的域。在导出和重建我的波形组件并编辑它们的域配置文件后,我能够使用 IDE 成功启动一个非常小的三分量波形并对其进行控制。所以在 ARM 上运行整个域就可以了。
但是我仍然无法在 ARM 上启动 deviceManager 并将其注册到 x86 上的 DomainManager(在编辑 DCD 以指向 x86 域之后,即运行具有两个节点的分布式域。它启动并说它正在注册domainManager,它必须部分成功,因为 devMgr 显示在域下的 NamingService 中,但 IDE 从未在域中显示新的 deviceManager。并且 devMgr 永远不会启动 GPPdevice。如果 devMgr 被杀死,它会打印"中断等待向 DomainManager 注册",因此即使它已注册到命名服务中,DomainManager 似乎也从未回复过注册请求。


显然回复的长度非常有限,所以我将其称为答案。感谢您的答复。我实际上已经尝试了其中的一部分,但会尝试看看你的信息是否能让我更进一步。写完这个问题后,我进一步探索了一点。我发现我在 ARM 上编译并安装的代码在设备管理器的域配置文件中仍然有"x86"和"x86-64",并且没有"armv7l",所以我修补了配置文件并尝试在设备管理器上启动设备管理器ARM 手动(在将 omniORB.cfg 设置为指向域管理器主机上的名称服务器之后。它启动正常并说它正在尝试连接,并且域管理器主机上的名称服务器现在有一个 ARM 设备的条目管理器,但 IDE 没有列出额外的设备管理器,如果我杀死了 ARM 设备管理器,它说它在等待注册时被中断,所以我假设设备管理器注册到名称服务器但从未得到域管理器的回复. 这不会让我对你的步骤会奏效抱有希望,但我会试一试。