如何在RedHawk下运行分布式域



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

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

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

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

我相信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

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

sudo $OSSIEHOME/bin/cleanomni

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

现在,为了在ARM设备上运行GPP,您必须在ARM设备中创建该节点,因为域还不知道该设备,也无法访问其文件系统。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"。一旦安装好,还有几个问题需要解决。首先,运行以下命令:

$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实现,并用"armv7l"替换任何"x86"实例。

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

我知道这太多了,我已经有一段时间没有看这些说明了,所以如果你有任何问题或任何不起作用的地方,请告诉我。

显然回复的长度非常有限,所以我称之为答案。感谢您的回复。事实上,我已经尝试过其中的一部分,但会尝试看看你的信息是否能让我进一步了解。写下这个问题后,我进一步探究了一下。我发现我在ARM上编译并安装的代码在设备管理器的域配置文件中仍然有"x86"one_answers"x86-64",没有"armv7l",所以我修补了配置文件,并尝试手动启动ARM上的设备管理器(在将omniORB.cfg设置为指向域管理器主机上的名称服务器之后。它启动良好,并表示正在尝试连接,域管理器上的名称server现在有一个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从不在域中显示新的设备管理器。devMgr也从不启动GPPdevice。如果devMgr被终止,它将打印"在等待向DomainManager注册时中断",因此即使它已注册到命名服务中,DomainManager似乎从未回复注册请求。

最新更新