KRS Unleashed: 3——KRS工作区
扫描二维码
随时随地手机看文章
这个项目是KRS Unleashed系列的一部分,KRS是原始KRS的修订版。本文将介绍KRS工作空间。
本文介绍了KRS Unleashed的新分离的3个工作区是如何一起工作的,并解释了如何在KRS Unleashed中生成交叉编译的工件和设计新的应用程序。上一篇文章已经介绍了谁可以获得用于交叉编译的系统根,但它独立于KRS。
在这里,我们将首先讨论文件夹结构,以及在KRS Unleashed中交叉编译应用程序实际上需要哪些包。此外,还将解释配置所选系统根或后续HLS内核的所有相关位置。
最后,将显示为示例应用程序的Kria KR260生成二进制文件的命令。
文件夹结构
由于将工作作为论文的一部分发布,存储库包含一个示例应用程序,其中包括用于重现结果的配置文件。实际的KRS Unleashed隐藏在内部,但由于应用于原始KRS的更改,KRS Unleashed的核心更加可见,也更小。
整个存储库分为3个目录:
•基米-雷克南;包含与ROS 2相关的工作空间
•os_workspace;包含创建系统根和准备SD卡的模块
•vitis;包含下一篇文章中要创建的Vitis工作区。Xclbin文件与合成的内核
ROS 2工作空间通常将所有包都包含在“src”文件夹中。在这里,KRS Unleashed Core软件包被放在一个名为“base”的特殊目录中。‘ adaptive_component ’是可选的,包含一些很好的实用程序。剩余的包确保使用Vitis支持的标志编译主机代码/是旧合成流(‘ ament_acceleration ‘, ‘ ament_vitis ’和’ Vitis common ‘)的回忆,配置工具链以针对sysroot (’ krs_firmware ’)进行交叉编译或引入基于ros2-tracing (' tracetools_kernels ')的进一步跟踪功能。
‘ Apriltag_* ’, ‘ minimal_image_pub ’和‘ ros2_tracing ’只是可选的,特定于应用程序的包为Apriltag算法提供硬件加速、软件版本和ros2消息定义,一个用于测试和ros2跟踪的简单消息虚拟节点(必须添加到repo以进行交叉编译)。
上一篇文章已经介绍了os_workspace,但是总结一下它的结构。我们目前支持KR260板的两个流程,一个是位于“firmware_kr260_ubuntu”中的基于ubuntu的流程,它包含一个脚本,用于获取包含sysroot的tar存档文件,另一个是补丁脚本,用于修改tar archive/bin目录下的customize.sh shell脚本,以安装sysroot中的依赖项。firmware_kr260_petalinux流程稍微复杂一些,但同样通过petalinux.sh脚本自动执行,该脚本首先检查artifacts文件夹中的一些文件,如XSA文件或BSP(需要下载),然后继续在“build_petalinux/images”下创建petalinux项目。然后调用生成的sdk.sh脚本生成包含sysroot文件的固件文件夹。可选地提供了用于生成设备树的进一步脚本,并且可以对‘ petalinx_config文件夹’中的配置应用配置。
vitis工作区将在下一章中详细介绍,但一般结构不需要将其放在ROS2工作区旁边,因为它只依赖于所使用的操作系统。内核组织在源代码中的文件夹中,脚本从其中准备工作空间并生成所有组件。成功执行后,结果存储在exports文件夹中,以便复制到电路板上。
本地/本地构建
正如在论文和第一篇文章中所解释的那样,修订的主要动机之一是在更改系统时涉及的复杂性,例如使用不同版本的Vitis或集成另一个操作系统。
与最初的KRS流程相比,KRS Unleashed将这两个步骤提取到单独的工作区中,以使链接更加有形和可调整。对于交叉编译,之前隐式的Ubuntu系统根准备被移到OS工作区中,而mixin生成则保留在ROS 2中的新krs_firmware repo中。Krs_firmware在' base/ Krs_firmware /cmake/firmware_setup中定义了一些常量。,但目前只有这一行是真正相关的:
在这里,需要指定包含要使用的‘ sysroots ’文件夹的文件夹。遗憾的是,Petalinux支持ROS 2(2022.1-2024.1)的版本是基于一个非lts的Yocto版本(Langdale),其中ROS 2层从未真正工作过,因为在该版本期间维护者发生了变化,现在需要将Kirkstone的错误修复后移植到Langdale。
因此,我们使用兼容abi的Ubuntu系统根作为Petalinux交叉编译应用程序的临时解决方案。这在简单的例子中工作得很好,但当库版本不同时(如OpenCV的情况)会导致问题。我们目前的计划是将整个工具链升级到Jazzy/2025.1作为下一步。
在调整了变量firmware_dir之后,您只需要执行原始KRS框架的命令+额外的环境准备:
1. 添加遗漏的libpython库以便交叉编译,一旦Ubuntu遗漏(使用绝对路径!!)
2. 源ROS 2, Vitis和定义一些变量
Unset RMW Implementation只有在您为ROS 2安装了多个DDS时才需要,这只是防止错误消息的预防步骤-如果您遇到一些关于DDS的依赖关系,请将此简单地忽略,导出PATH只是为了防止意外使用Vitis Cmake,…版本
如果你在本地安装了多个OpenCV版本来测试Petalinux,你需要为本地构建设置一些进一步的变量:
3. 构建应用程序
这将生成一个构建和安装文件夹,其中包含应用程序的本机构建,您可以使用它来测试应用程序的软件版本。此外,已经通过krs_firmware在系统上安装了colcon mixin,它允许您对应用程序进行交叉编译
只需通过正常的ROS 2命令运行SW应用程序:
交叉编译配置和如何集成内核
之后,我们需要找到生成的安装脚本并运行交叉编译命令。打开一个新的终端并运行:
这将创建一个build-kr260和一个install-kr260文件夹。要在板上部署应用程序,只需通过scp复制install-kr260文件夹:
这里需要注意的是,这个安装文件夹只包含交叉编译的二进制文件、启动文件……最后合成的内核丢失了,需要在下一篇文章中通过vitis工作空间流在主板上单独生成和设置。
到内核文件的实际链接只发生在主机代码上,其中xclbin的名称、顶级函数和方法签名需要与内核匹配。
本文编译自hackster.io





