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





