以下博文演示了在Vitis™中对Linux应用程序开发的过程中怎样使用外部库。
我将使用由libxml2库所提供的“ParseandvalidateanXMLfilewithanxmlReader”应用示例来演示本示例,而且和基于ZCU102开发板的PetaLinuxBSP编译下来的Linux镜像相关联。
01
创建Linux域
要在Vitis中开发嵌入式Linux应用,须要在工作空间内创建含Linux域的平台工程。
此平台工程是依照所选的硬件尺寸文件(XSA)创建的,该文件可以是在Vivado中生成的订制XSA,也可以是Vitis内的预定义XSA文件。
因为本示例是使用PetaLinuxBSP建立的,因而用于创建平台的XSA文件与用于PetaLinux工程的XSA文件相同。
据悉,目标的启动组件一般在PetaLinux中生成(或则也可以使用pre-built中的组件),因而无需选中“Generatebootcomponents”(生成启动组件)选项。
生成的硬件平台工程提供了基本Linux域,其中所有可选设置均未定义。
此工程足以用于开发简单的应用LINUX社区,比如,helloworld。
以该域为目标的应用将搭配VitisIDE使用预定义的工具链和sysroot。
编译好的应用程序可能可以在Linux镜像上正常运行,不出现任何问题,但还请牢记,也可能由于主机上安装的库/头文件与Linux镜像上的不一致而造成出错。
预安装的系统仅提供一些基本库,因而在编译我们这个示例的时侯,由于缺乏这种头文件和库,很可能难以编译成功。
02
建立Linux库
PetaLinux提供了根文件系统配置菜单,用于建立库并将其添加到生成的Linux镜像或分发版中。如《PetaLinux工具文档:参考手册》(UG1144)中所述,此配置为静态菜单,其中提供了赛灵思支持的实用工具和库。
据悉,库不支持的配方可从现有/已使用的层次或则从其它层次添加到镜像中。如需获取进一步的指导信息,请参阅(UG1144)中的将现有配方添加到根文件系统中部份。
对于此示例,在镜像中添加了包含开发包和调试包在内的libxml2库。
使用petalinux-build命令把库都编译一下。
03
生成目标sysroot
如(UG1144)的SDK生成部份中所述kali linux,PetaLinux提供了SDK生成功能,用于建立和布署交叉编译工具链和目标sysroot以供应用开发之用。
在默认目录内封装好sysroot后,即可在生成的SDK文件夹内找到libxml2的库和头文件。
04
科技新势力配置Linux域
Vitis中的Linux域配置菜单提供了设置可选sysroot目录的选项。完成配置和建立后,sysroot将复制到平台的导入目录中,便于后续供以Linux域为目标的任何应用使用。
据悉,创建的应用将手动使用导入的sysroot目录。
05
创建Linux应用
使用订制sysroot配置完Linux域linux 获取应用程序路径,并在Vitis中以该Linux域为目标创建Linux应用工程以后,该应用将手动配置为使用原本导入的sysroot路径。
以上配置设置将手动填充应用工程的C/C++设置,拿来设置编译器的“IncludePaths(-I)”(包含路径)选项和sysroot(--sysroot)选项以及联接器的库搜索路径(-L)。由该工具配置的编译器和联接器设置均可在软件平台配置的选项中找到。
有些库文件,比如:libxml2linux 获取应用程序路径,或是include目录中须要包含的额外的分层文件夹等,要配置额外的搜索路径来查找这种头文件。在此示例中,需将/usr/include内的libxml2文件夹添加到工程设置中。
最后,在工程配置选项中,需通过库选项(-l)选少将在应用中使用的所有库。
如今Linux应用工程已正确配置了所须要的第三方库,因而可成功建立该工程。
06
推论
VitisIDE支持以开箱即用形式进行Linux应用开发,在此过程中,它会使用预安装的工具链和库以及为您的目标平台而创建的默认Linux域。
据悉,该域可配置为借助可选sysroot文件夹来使用第三方库。该选项才能与PetaLinux的SDK生成功能完美搭配,便于将该域配置为使用专为Linux镜像建立的库,并将这种库布署在目标平台上。