這個項目是KRS Unleashed系列的一部分,KRS是原始KRS的修訂版。本文將介紹KRS工作空間。
本文介紹了KRS Unleashed的新分離的3個工作區(qū)是如何一起工作的,并解釋了如何在KRS Unleashed中生成交叉編譯的工件和設(shè)計新的應(yīng)用程序。上一篇文章已經(jīng)介紹了誰可以獲得用于交叉編譯的系統(tǒng)根,但它獨立于KRS。
在這里,我們將首先討論文件夾結(jié)構(gòu),以及在KRS Unleashed中交叉編譯應(yīng)用程序?qū)嶋H上需要哪些包。此外,還將解釋配置所選系統(tǒng)根或后續(xù)HLS內(nèi)核的所有相關(guān)位置。
最后,將顯示為示例應(yīng)用程序的Kria KR260生成二進制文件的命令。
文件夾結(jié)構(gòu)
由于將工作作為論文的一部分發(fā)布,存儲庫包含一個示例應(yīng)用程序,其中包括用于重現(xiàn)結(jié)果的配置文件。實際的KRS Unleashed隱藏在內(nèi)部,但由于應(yīng)用于原始KRS的更改,KRS Unleashed的核心更加可見,也更小。
整個存儲庫分為3個目錄:
?基米-雷克南;包含與ROS 2相關(guān)的工作空間
?os_workspace;包含創(chuàng)建系統(tǒng)根和準備SD卡的模塊
?vitis;包含下一篇文章中要創(chuàng)建的Vitis工作區(qū)。Xclbin文件與合成的內(nèi)核
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 ’只是可選的,特定于應(yīng)用程序的包為Apriltag算法提供硬件加速、軟件版本和ros2消息定義,一個用于測試和ros2跟蹤的簡單消息虛擬節(jié)點(必須添加到repo以進行交叉編譯)。
上一篇文章已經(jīng)介紹了os_workspace,但是總結(jié)一下它的結(jié)構(gòu)。我們目前支持KR260板的兩個流程,一個是位于“firmware_kr260_ubuntu”中的基于ubuntu的流程,它包含一個腳本,用于獲取包含sysroot的tar存檔文件,另一個是補丁腳本,用于修改tar archive/bin目錄下的customize.sh shell腳本,以安裝sysroot中的依賴項。firmware_kr260_petalinux流程稍微復(fù)雜一些,但同樣通過petalinux.sh腳本自動執(zhí)行,該腳本首先檢查artifacts文件夾中的一些文件,如XSA文件或BSP(需要下載),然后繼續(xù)在“build_petalinux/images”下創(chuàng)建petalinux項目。然后調(diào)用生成的sdk.sh腳本生成包含sysroot文件的固件文件夾。可選地提供了用于生成設(shè)備樹的進一步腳本,并且可以對‘ petalinx_config文件夾’中的配置應(yīng)用配置。
vitis工作區(qū)將在下一章中詳細介紹,但一般結(jié)構(gòu)不需要將其放在ROS2工作區(qū)旁邊,因為它只依賴于所使用的操作系統(tǒng)。內(nèi)核組織在源代碼中的文件夾中,腳本從其中準備工作空間并生成所有組件。成功執(zhí)行后,結(jié)果存儲在exports文件夾中,以便復(fù)制到電路板上。
本地/本地構(gòu)建
正如在論文和第一篇文章中所解釋的那樣,修訂的主要動機之一是在更改系統(tǒng)時涉及的復(fù)雜性,例如使用不同版本的Vitis或集成另一個操作系統(tǒng)。
與最初的KRS流程相比,KRS Unleashed將這兩個步驟提取到單獨的工作區(qū)中,以使鏈接更加有形和可調(diào)整。對于交叉編譯,之前隱式的Ubuntu系統(tǒng)根準備被移到OS工作區(qū)中,而mixin生成則保留在ROS 2中的新krs_firmware repo中。Krs_firmware在' base/ Krs_firmware /cmake/firmware_setup中定義了一些常量。,但目前只有這一行是真正相關(guān)的:
在這里,需要指定包含要使用的‘ sysroots ’文件夾的文件夾。遺憾的是,Petalinux支持ROS 2(2022.1-2024.1)的版本是基于一個非lts的Yocto版本(Langdale),其中ROS 2層從未真正工作過,因為在該版本期間維護者發(fā)生了變化,現(xiàn)在需要將Kirkstone的錯誤修復(fù)后移植到Langdale。
因此,我們使用兼容abi的Ubuntu系統(tǒng)根作為Petalinux交叉編譯應(yīng)用程序的臨時解決方案。這在簡單的例子中工作得很好,但當庫版本不同時(如OpenCV的情況)會導(dǎo)致問題。我們目前的計劃是將整個工具鏈升級到Jazzy/2025.1作為下一步。
在調(diào)整了變量firmware_dir之后,您只需要執(zhí)行原始KRS框架的命令+額外的環(huán)境準備:
1. 添加遺漏的libpython庫以便交叉編譯,一旦Ubuntu遺漏(使用絕對路徑!!)
2. 源ROS 2, Vitis和定義一些變量
Unset RMW Implementation只有在您為ROS 2安裝了多個DDS時才需要,這只是防止錯誤消息的預(yù)防步驟-如果您遇到一些關(guān)于DDS的依賴關(guān)系,請將此簡單地忽略,導(dǎo)出PATH只是為了防止意外使用Vitis Cmake,…版本
如果你在本地安裝了多個OpenCV版本來測試Petalinux,你需要為本地構(gòu)建設(shè)置一些進一步的變量:
3. 構(gòu)建應(yīng)用程序
這將生成一個構(gòu)建和安裝文件夾,其中包含應(yīng)用程序的本機構(gòu)建,您可以使用它來測試應(yīng)用程序的軟件版本。此外,已經(jīng)通過krs_firmware在系統(tǒng)上安裝了colcon mixin,它允許您對應(yīng)用程序進行交叉編譯
只需通過正常的ROS 2命令運行SW應(yīng)用程序:
交叉編譯配置和如何集成內(nèi)核
之后,我們需要找到生成的安裝腳本并運行交叉編譯命令。打開一個新的終端并運行:
這將創(chuàng)建一個build-kr260和一個install-kr260文件夾。要在板上部署應(yīng)用程序,只需通過scp復(fù)制install-kr260文件夾:
這里需要注意的是,這個安裝文件夾只包含交叉編譯的二進制文件、啟動文件……最后合成的內(nèi)核丟失了,需要在下一篇文章中通過vitis工作空間流在主板上單獨生成和設(shè)置。
到內(nèi)核文件的實際鏈接只發(fā)生在主機代碼上,其中xclbin的名稱、頂級函數(shù)和方法簽名需要與內(nèi)核匹配。
本文編譯自hackster.io





