我如何运行 RedHawk下的分布式域

How can I run a distributed domain under RedHawk

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

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

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

是否有我遗漏的关于分布式域的更详细的说明?

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

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

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

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

sudo $OSSIEHOME/bin/cleanomni

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

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

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

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

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

接下来,运行以下内容:

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

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

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

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

我知道很多,我已经有一段时间没有 运行 完成这些说明了,所以如果您有任何问题或有任何问题,请告诉我。

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

更新。更仔细地按照低于 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 永远不会启动 GPP 设备。如果 devMgr被杀死后它会打印 "Interrupted waiting to register with DomainManager",因此即使它已注册到命名服务中,DomainManager 似乎从未回复过注册请求。