以下博文演示了在Vitis? 中對(duì) Linux 應(yīng)用程序開(kāi)發(fā)的過(guò)程中如何使用外部庫(kù)。
我將使用由 libxml2 庫(kù)所提供的“Parse and validate an XML file with an xmlReader”應(yīng)用示例來(lái)演示本示例,并且和基于 ZCU102 開(kāi)發(fā)板的 PetaLinux BSP 編譯出來(lái)的 Linux 鏡像相關(guān)聯(lián)。
創(chuàng)建 Linux 域
要在 Vitis 中開(kāi)發(fā)嵌入式 Linux 應(yīng)用,需要在工作空間內(nèi)創(chuàng)建含 Linux 域的平臺(tái)工程。
此平臺(tái)工程是根據(jù)所選的硬件規(guī)格文件 (XSA) 創(chuàng)建的,該文件可以是在 Vivado 中生成的定制 XSA,也可以是 Vitis 內(nèi)的預(yù)定義 XSA 文件。
由于本示例是使用 PetaLinux BSP 構(gòu)建的,因此用于創(chuàng)建平臺(tái)的 XSA 文件與用于 PetaLinux 工程的 XSA 文件相同。
此外,目標(biāo)的啟動(dòng)組件通常在 PetaLinux中生成(或者也可以使用pre-built中的組件),因此無(wú)需選中“Generate boot components”(生成啟動(dòng)組件)選項(xiàng)。
生成的硬件平臺(tái)工程提供了基本 Linux 域,其中所有可選設(shè)置均未定義。
此工程足以用于開(kāi)發(fā)簡(jiǎn)單的應(yīng)用,例如,hello world。
以該域?yàn)槟繕?biāo)的應(yīng)用將搭配 Vitis IDE 使用預(yù)定義的工具鏈和 sysroot。
編譯好的應(yīng)用程序可能可以在 Linux 鏡像上正常運(yùn)行,不出現(xiàn)任何問(wèn)題,但還請(qǐng)謹(jǐn)記,也可能因?yàn)橹鳈C(jī)上安裝的庫(kù)/頭文件與Linux鏡像上的不一致而導(dǎo)致出錯(cuò)。
預(yù)安裝的系統(tǒng)僅提供一些基本庫(kù),因此在編譯我們這個(gè)示例的時(shí)候,因?yàn)槿鄙龠@些頭文件和庫(kù),很可能無(wú)法編譯成功。
構(gòu)建 Linux 庫(kù)
PetaLinux 提供了根文件系統(tǒng)配置菜單,用于構(gòu)建庫(kù)并將其添加到生成的 Linux 鏡像或分發(fā)版中。如《PetaLinux 工具文檔:參考指南》(UG1144) 中所述,此配置為靜態(tài)菜單,其中提供了賽靈思支持的實(shí)用工具和庫(kù)。
此外,庫(kù)不支持的配方可從現(xiàn)有/已使用的層次或者從其它層次添加到鏡像中。如需獲取進(jìn)一步的指導(dǎo)信息,請(qǐng)參閱 (UG1144) 中的將現(xiàn)有配方添加到根文件系統(tǒng)中部分。
對(duì)于此示例,在鏡像中添加了包含開(kāi)發(fā)包和調(diào)試包在內(nèi)的 libxml2 庫(kù)。
使用 petalinux-build 命令把庫(kù)都編譯一下。
生成目標(biāo) sysroot
如 (UG1144) 的SDK 生成部分中所述,PetaLinux 提供了 SDK 生成功能,用于構(gòu)建和部署交叉編譯工具鏈和目標(biāo) sysroot 以供應(yīng)用開(kāi)發(fā)之用。
在默認(rèn)目錄內(nèi)封裝好 sysroot 后,即可在生成的 SDK 文件夾內(nèi)找到 libxml2 的庫(kù)和頭文件。
配置 Linux 域
Vitis 中的 Linux 域配置菜單提供了設(shè)置可選 sysroot 目錄的選項(xiàng)。完成配置和構(gòu)建后,sysroot 將復(fù)制到平臺(tái)的導(dǎo)出目錄中,以便后續(xù)供以 Linux 域?yàn)槟繕?biāo)的任何應(yīng)用使用。
此外,創(chuàng)建的應(yīng)用將自動(dòng)使用導(dǎo)出的 sysroot 目錄。
創(chuàng)建 Linux 應(yīng)用
使用定制 sysroot 配置完 Linux 域,并在 Vitis 中以該 Linux 域?yàn)槟繕?biāo)創(chuàng)建 Linux 應(yīng)用工程之后,該應(yīng)用將自動(dòng)配置為使用先前導(dǎo)出的 sysroot 路徑。
以上配置設(shè)置將自動(dòng)填充應(yīng)用工程的 C/C++ 設(shè)置,用來(lái)設(shè)置編譯器的“Include Paths (-I)”(包含路徑)選項(xiàng)和 sysroot (--sysroot) 選項(xiàng)以及連接器的庫(kù)搜索路徑 (-L)。由該工具配置的編譯器和連接器設(shè)置均可在軟件平臺(tái)配置的選項(xiàng)中找到。
有些庫(kù)文件,例如:libxml2 ,或是include 目錄中需要包含的額外的分層文件夾等,要配置額外的搜索路徑來(lái)查找這些頭文件。在此示例中,需將 /usr/include 內(nèi)的 libxml2 文件夾添加到工程設(shè)置中。
最后,在工程配置選項(xiàng)中,需通過(guò)庫(kù)選項(xiàng) (-l) 選中將在應(yīng)用中使用的所有庫(kù)。
現(xiàn)在 Linux 應(yīng)用工程已正確配置了所需要的第三方庫(kù),因此可成功構(gòu)建該工程。
結(jié)論
Vitis IDE 支持以開(kāi)箱即用方式進(jìn)行 Linux 應(yīng)用開(kāi)發(fā),在此過(guò)程中,它會(huì)使用預(yù)安裝的工具鏈和庫(kù)以及為您的目標(biāo)平臺(tái)而創(chuàng)建的默認(rèn) Linux 域。
此外,該域可配置為利用可選 sysroot 文件夾來(lái)使用第三方庫(kù)。該選項(xiàng)能夠與 PetaLinux 的 SDK 生成功能完美搭配,以便將該域配置為使用專(zhuān)為 Linux 鏡像構(gòu)建的庫(kù),并將這些庫(kù)部署在目標(biāo)平臺(tái)上。
審核編輯:湯梓紅
-
嵌入式
+關(guān)注
關(guān)注
5150文章
19665瀏覽量
317459 -
Linux
+關(guān)注
關(guān)注
87文章
11509瀏覽量
213751 -
SDK
+關(guān)注
關(guān)注
3文章
1077瀏覽量
49078 -
Vitis
+關(guān)注
關(guān)注
0文章
150瀏覽量
7942
發(fā)布評(píng)論請(qǐng)先 登錄
Vitis里如何創(chuàng)建嵌入式軟件工程

嵌入式Linux和嵌入式Linux開(kāi)發(fā)環(huán)境說(shuō)明
基于嵌入式Linux的漁探系統(tǒng)
嵌入式Linux
嵌入式LINUX開(kāi)發(fā)基礎(chǔ)知識(shí)
【嵌入式】基于ARM的嵌入式Linux開(kāi)發(fā)總結(jié)

嵌入式常用的開(kāi)源庫(kù)

嵌入式linux開(kāi)發(fā)工具總結(jié)

嵌入式linux和物聯(lián)網(wǎng),嵌入式Linux或RTOS:用于物聯(lián)網(wǎng)

【嵌入式Linux(基礎(chǔ)篇)】從標(biāo)準(zhǔn)Linux到嵌入式Linux + 嵌入式Linux知識(shí)架構(gòu)

嵌入式Linux network

嵌入式Linux路線(xiàn)

視頻教程-嵌入式Linux開(kāi)發(fā)基礎(chǔ)-嵌入式

嵌入式網(wǎng)絡(luò)編程+嵌入式Linux系統(tǒng)

揭秘Vitis嵌入式加速平臺(tái)的創(chuàng)建

評(píng)論