0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Vitis嵌入式Linux:Sysroot和库的用法

jf_pJlTbmA9 来源:jf_pJlTbmA9 作者:jf_pJlTbmA9 2023-07-07 14:14 次阅读

以下博文演示了在Vitis™ 中对 Linux 应用程序开发的过程中如何使用外部库。

我将使用由 libxml2 库所提供的“Parse and validate an XML file with an xmlReader”应用示例来演示本示例,并且和基于 ZCU102 开发板的 PetaLinux BSP 编译出来的 Linux 镜像相关联。

创建 Linux 域

要在 Vitis 中开发嵌入式 Linux 应用,需要在工作空间内创建含 Linux 域的平台工程。

此平台工程是根据所选的硬件规格文件 (XSA) 创建的,该文件可以是在 Vivado 中生成的定制 XSA,也可以是 Vitis 内的预定义 XSA 文件。
由于本示例是使用 PetaLinux BSP 构建的,因此用于创建平台的 XSA 文件与用于 PetaLinux 工程的 XSA 文件相同。

此外,目标的启动组件通常在 PetaLinux中生成(或者也可以使用pre-built中的组件),因此无需选中“Generate boot components”(生成启动组件)选项。

100569887-297773-0410-1.png

生成的硬件平台工程提供了基本 Linux 域,其中所有可选设置均未定义。

此工程足以用于开发简单的应用,例如,hello world。

100569887-297774-0410-2.png

以该域为目标的应用将搭配 Vitis IDE 使用预定义的工具链和 sysroot。

编译好的应用程序可能可以在 Linux 镜像上正常运行,不出现任何问题,但还请谨记,也可能因为主机上安装的库/头文件与Linux镜像上的不一致而导致出错。

预安装的系统仅提供一些基本库,因此在编译我们这个示例的时候,因为缺少这些头文件和库,很可能无法编译成功。

100569887-297775-0410-3.png

构建 Linux 库

PetaLinux 提供了根文件系统配置菜单,用于构建库并将其添加到生成的 Linux 镜像或分发版中。如《PetaLinux 工具文档:参考指南》(UG1144) 中所述,此配置为静态菜单,其中提供了赛灵思支持的实用工具和库。

此外,库不支持的配方可从现有/已使用的层次或者从其它层次添加到镜像中。如需获取进一步的指导信息,请参阅 (UG1144) 中的将现有配方添加到根文件系统中部分。

对于此示例,在镜像中添加了包含开发包和调试包在内的 libxml2 库。

100569887-297776-0410-4.png

使用 petalinux-build 命令把库都编译一下。

100569887-297777-0410-5.png

生成目标 sysroot

如 (UG1144) 的SDK 生成部分中所述,PetaLinux 提供了 SDK 生成功能,用于构建和部署交叉编译工具链和目标 sysroot 以供应用开发之用。

100569887-297778-0410-6.png

在默认目录内封装好 sysroot 后,即可在生成的 SDK 文件夹内找到 libxml2 的库和头文件。

100569887-297779-0410-7.png

配置 Linux 域

Vitis 中的 Linux 域配置菜单提供了设置可选 sysroot 目录的选项。完成配置和构建后,sysroot 将复制到平台的导出目录中,以便后续供以 Linux 域为目标的任何应用使用。

此外,创建的应用将自动使用导出的 sysroot 目录。

100569887-297780-0410-8.png

创建 Linux 应用

使用定制 sysroot 配置完 Linux 域,并在 Vitis 中以该 Linux 域为目标创建 Linux 应用工程之后,该应用将自动配置为使用先前导出的 sysroot 路径。

100569887-297781-0410-9.png

以上配置设置将自动填充应用工程的 C/C++ 设置,用来设置编译器的“Include Paths (-I)”(包含路径)选项和 sysroot (--sysroot) 选项以及连接器的库搜索路径 (-L)。由该工具配置的编译器和连接器设置均可在软件平台配置的选项中找到。

有些库文件,例如:libxml2 ,或是include 目录中需要包含的额外的分层文件夹等,要配置额外的搜索路径来查找这些头文件。在此示例中,需将 /usr/include 内的 libxml2 文件夹添加到工程设置中。

100569887-297782-0410-10.png

最后,在工程配置选项中,需通过库选项 (-l) 选中将在应用中使用的所有库。

100569887-297783-0410-11.png

现在 Linux 应用工程已正确配置了所需要的第三方库,因此可成功构建该工程。

100569887-297784-0410-12.png

结论

Vitis IDE 支持以开箱即用方式进行 Linux 应用开发,在此过程中,它会使用预安装的工具链和库以及为您的目标平台而创建的默认 Linux 域。

此外,该域可配置为利用可选 sysroot 文件夹来使用第三方库。该选项能够与 PetaLinux 的 SDK 生成功能完美搭配,以便将该域配置为使用专为 Linux 镜像构建的库,并将这些库部署在目标平台上。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    4984

    文章

    18300

    浏览量

    288666
  • Linux
    +关注

    关注

    87

    文章

    10994

    浏览量

    206772
  • SDK
    SDK
    +关注

    关注

    3

    文章

    966

    浏览量

    44730
  • Vitis
    +关注

    关注

    0

    文章

    144

    浏览量

    7164
收藏 人收藏

    评论

    相关推荐

    嵌入式Linux应用开发详解 光盘

    `本书立足于嵌入式Linux平台,侧重于实际开发应用,是一本结合嵌入式Linux技术最新发展潮流和编者多年开发经验,精心编写的嵌入式
    发表于 06-02 10:26

    什么是嵌入式Linux

    一、什么是嵌入式linuxLinux从1991年问世到现在,短短的十几年时间已经发展成为功能强大、设计完善的操作系统之一,不仅可以与各种传统的商业操作系统分庭抗争,在新兴的嵌入式操作
    发表于 01-23 11:59

    嵌入式linux培训教程 嵌入式linux学习方法步骤

      嵌入式开发技术入门易,精通难。当然,如果相对于其他的开发技术来说,嵌入式学习门槛相对较高。但嵌入式如今的发展前景也要高于其他开发技术领域。因此,在起步学习阶段,创客学院嵌入式
    发表于 07-03 18:25

    精通嵌入式Linux编程

    LINUX 构造嵌入式系统............................................................................ 81.4 GUI 在
    发表于 11-06 14:57

    嵌入式Linux系统的设计与应用

    的框架。用户进程可直接通过系统调用或者函数来访问内核资源。正因为Linux内核具有这样的结构,因此修改内核时必须注意各个子系统之间的协调。 嵌入式Linux内核一般由标准
    发表于 07-09 06:33

    嵌入式Linux系统基础概念讲解

    进行层次划分。嵌入式Linux系统做模块化处理就是可划分为Bootloader(引导程序),Kernel(内核),fs(文件系统),Shell(命令行界面),Gui(图形)和 Embeded Sql
    发表于 12-25 16:37

    嵌入式linux学习书籍汇总

    C语言中用户自定义的数据类型。第10章介绍了嵌入式Linux C语言的高级用法。第11章介绍了嵌入式Linux内核中常见的数据结构。  本
    发表于 06-08 08:31

    什么是嵌入式linux

    一、什么是嵌入式linux?Linux从1991年问世到现在,短短的十几年时间已经发展成为功能强大、设计完善的操作系统之一,不仅可以与各种传统的商业操作系统分庭抗争,在新兴的嵌入式操作
    发表于 10-27 09:47

    嵌入式Linux系统的资料大合集

    进行层次划分。嵌入式Linux系统做模块化处理就是可划分为Bootloader(引导程序),Kernel(内核),fs(文件系统),Shell(命令行界面),Gui(图形)和 Embeded Sq...
    发表于 10-28 06:41

    大佬都在用的嵌入式linux开发工具

    1.嵌入式linux开发工具-编译器gcc(静态 动态的制作)可以制作 的使用2.
    发表于 11-02 09:47

    基于QT的嵌入式linux图形应用软件设计

    嵌入式数据或图形软件开发有兴趣,可以进一步学习嵌入式linux数据开发或基于 QT的嵌入式
    发表于 11-05 08:11

    掌握嵌入式Linux操作的使用

    、make、shell)4、掌握嵌入式Linux应用开发;(文件、多任务、网络)(数据)5、了解嵌入式产品开发流程;(硬件–软件–系统)6、了解
    发表于 11-08 08:52

    嵌入式网络编程+嵌入式Linux系统

    D2.25嵌入式网络编程+嵌入式Linux系统一、Linux操作系统安装与使用(命令)二、Linux开发工具(gcc、gdb、make)三、
    发表于 12-22 07:10

    嵌入式常用的开源是什么

    阅读目录 linux/嵌入式常用开源列表其他资料参考资料linux下/嵌入式常用的开源名字及
    发表于 12-24 06:53

    嵌入式linux、arm嵌入式操作系统的相关资料分享

    开发工具链异常处理linux内核裁剪与移植GCC命令基本用法系统调用与中断进程间通信接口中断驱动程序引导程序C语言与汇编语言嵌入式操作系统嵌入式系统应用领域
    发表于 12-27 07:35