☰
Vitis SDK 建工程实战:GUI 与 TCL 命令创建 HelloWorld 应用
2026/11/6 3:06:59 网站建设 项目流程

SEO 摘要:本文详解 Vitis SDK 应用工程创建全流程,对比 GUI 向导与 TCL 命令两种方式,覆盖处理器选择、HelloWorld 模板配置、库文件添加、串口验证与常见报错排查,附完整可复用脚本,助你快速跑通第一个嵌入式 HelloWorld 工程。

在嵌入式 SDK 开发中,快速搭建一个可运行的工程往往是上手的第一步,而不同开发者对图形化向导和命令行脚本各有偏好。本文分别演示如何通过 GUI 界面和 TCL 命令两种方式创建 SDK 应用工程,并逐步说明处理器选择、模板工程与库文件配置等关键环节。读完本文,你可以根据自己的开发习惯选择更高效的建工程方式,并顺利跑通第一个 HelloWorld 应用。

TL;DR:

  • GUI 方式适合新手:按“选择工作空间 → Create Application Project → 选择处理器 → 选择 Hello World 模板 → 添加库文件”的顺序操作即可完成建工程。
  • TCL 命令方式适合批量与自动化场景:通过脚本一次性完成工程创建,便于复用和版本管理。
  • 两种方式最终得到的工程结构一致,区别只在操作入口;建议先跑通 GUI 流程理解各步骤含义,再切换到 TCL 命令提升效率。

目录

  • 1. 使用 GUI 界面建立 SDK 应用工程
  • 2. 使用 TCL 命令建立 SDK 应用工程
    • 2.1 完整 TCL 脚本示例
    • 2.2 关键命令与参数说明
    • 2.3 验证工程是否创建成功
    • 2.4 使用注意事项
      • 2.4.1 常见报错与排查
  • 3. 总结
  • 参考资料

1. 使用 GUI 界面建立 SDK 应用工程

  • 选择建立应用的工作空间

图 1:在 Workspace 输入框中填写或浏览选择工程存放目录,点击 Launch 进入主界面。

  • Create Application Project

图 2:在菜单栏点击 File → New → Application Project,或直接点击工具栏的 New Application Project 按钮。

  • 选择处理器

图 3:在 Processor 下拉框中选择目标处理器实例(如 ps7_cortexa9_0),并确认 Target 与硬件平台一致。

  • 选择模板工程 Hello World

图 4:在 Templates 列表中勾选 Hello World,并在 Project Name 输入框中填写工程名,点击 Finish 完成创建。

  • 添加需要的各种类型的库文件。

工程创建完成后,通常还需要在 BSP 设置中按需勾选库文件。常见需要添加的库类型及选择依据如下:

  • 基础输出库(如 xil_printf):用于串口打印调试信息,几乎每个裸机工程都会用到,建议默认添加。
  • 定时器库(如 xiltimer):工程中需要延时、定时中断或时间戳时添加,依赖处理器私有定时器资源。
  • 通信与总线库(如 xilmailbox、xilpm):涉及多核通信、电源管理或核间消息传递时添加,需与硬件设计中实际启用的 IP 对应。
  • 外设驱动库(如 GPIO、UART、SPI、I2C 等):按工程实际使用的外设勾选,未使用的外设不必添加,以免增大代码体积。
  • 第三方或中间件库(如 lwIP、FatFS、xilffs):需要网络、文件系统等上层功能时添加,注意同时补齐其依赖的底层库。

选择依据可以概括为:先看工程功能需求,再看硬件设计中实际例化的外设与 IP,最后确认库之间的依赖关系,只添加真正被调用的库。

2. 使用 TCL 命令建立 SDK 应用工程

与 GUI 向导逐步点击不同,TCL 命令方式把建工程的每个步骤都写成脚本,一次执行即可完成。下面给出一个完整的脚本示例,覆盖创建工程、选择处理器、指定 Helloworld 模板和添加库文件四个关键环节,并逐行注释说明参数含义。

2.1 完整 TCL 脚本示例

# --------------------------------------------------------------- # 使用 TCL 命令创建 SDK 应用工程(以 Xilinx Vitis/SDK 为例) # 执行方式:xsct create_app.tcl # --------------------------------------------------------------- # 1. 设置工作空间目录,工程文件将生成在该路径下 setws ./workspace # 2. 创建平台工程(若已有平台工程可跳过此步) # -name 平台工程名称 # -hw 硬件描述文件(.xsa),由 Vivado 导出 # -proc 处理器名称,需与硬件设计中的实例名一致 platform create -name my_platform -hw ./design_1_wrapper.xsa -proc ps7_cortexa9_0 # 3. 基于平台工程生成 BSP(板级支持包),提供驱动与库 platform generate # 4. 创建应用工程 # -name 应用工程名称 # -platform 指定所依赖的平台工程 # -domain 指定使用的 BSP 域(默认域为 standalone_domain) app create -name hello_world -platform my_platform -domain standalone_domain # 5. 指定 Hello World 模板工程 # -template 模板名称,Vitis 内置模板包括 Empty Application、Hello World 等 # -lang 源码语言,可选 c 或 cpp app config -name hello_world -set template "Hello World" -set lang c # 6. 添加需要的库文件 # -add 追加库名,可多次调用;常见库如 xil_printf、xiltimer、xilmailbox app config -name hello_world -add libraries xil_printf app config -name hello_world -add libraries xiltimer # 7. 生成应用工程源码与编译配置 app build -name hello_world # 8. 输出工程创建结果,便于脚本化校验 puts "Application project hello_world created successfully."

2.2 关键命令与参数说明

命令作用关键参数
setws指定工作空间目录路径参数,支持相对路径与绝对路径
platform create创建平台工程-name平台名;-hw硬件描述文件;-proc处理器实例名
app create创建应用工程-name工程名;-platform依赖平台;-domainBSP 域
app config配置模板与库-set template模板名;-set lang语言;-add libraries追加库
app build编译应用工程-name目标工程名

2.3 验证工程是否创建成功

工程创建并编译完成后,最直接的验证方式是通过串口终端查看 HelloWorld 的打印输出。将开发板的 UART 调试口连接到主机,打开串口终端工具(如 PuTTY、Tera Term、MobaXterm 或 minicom),按下表配置串口参数后给开发板上电或复位,即可观察启动与打印信息。

参数典型取值说明
波特率(Baud Rate)115200需与 BSP 中 UART 驱动的配置一致;若打印乱码,优先检查波特率是否匹配
数据位(Data Bits)8标准 8 位数据位,绝大多数裸机工程默认使用
停止位(Stop Bits)11 位停止位,与常见 UART 配置一致
校验位(Parity)None无校验;若硬件设计启用了校验,需同步修改为 Even 或 Odd
流控(Flow Control)None一般关闭硬件流控,避免因 RTS/CTS 未连接导致无法收发

配置完成后,在串口终端中应能看到类似下面的预期输出:

--- Entering main() --- Hello World Successfully ran Hello World application --- Exiting main() ---

编译产物默认位于工作空间的工程目录下,常见路径如下:

  • ELF 可执行文件:./workspace/hello_world/Debug/hello_world.elf,可直接用于下载与调试。
  • 编译中间文件:./workspace/hello_world/Debug/目录下的.o、.d等文件,用于增量编译。
  • BSP 与库文件:./workspace/my_platform/export/my_platform/sw/standalone_domain/,包含驱动源码与编译生成的静态库。
  • 链接脚本与映射文件:./workspace/hello_world/Debug/下的lscript.ld与hello_world.map,可用于确认内存布局与符号地址。

如果串口终端没有任何输出,可以按以下顺序逐项排查:

  1. 确认串口号与连接:检查 USB 转串口设备是否被主机识别,串口终端中选择的 COM 口是否与设备管理器中一致。
  2. 确认串口参数:核对波特率、数据位、停止位、校验位是否与 BSP 配置一致,波特率不匹配通常表现为乱码而非完全无输出。
  3. 确认程序已下载运行:检查是否已将hello_world.elf下载到板卡并执行,或是否已通过 JTAG 启动调试会话。
  4. 确认 UART 引脚与硬件设计:核对硬件设计中 UART 控制器是否使能、引脚约束是否正确,以及板卡上调试串口是否与设计对应。
  5. 确认 BSP 中 UART 驱动:检查 BSP 设置中是否启用了对应 UART 外设的驱动,必要时重新生成 BSP 并重新编译。
  6. 确认打印函数配置:若使用xil_printf,确认已添加xil_printf库;若使用printf,确认已配置stdout指向 UART。

2.4 使用注意事项

  • 处理器名称必须匹配:-proc的取值要与硬件设计中实际例化的处理器实例名完全一致,否则平台工程创建会失败。
  • 模板名称区分大小写:不同版本工具链的模板名称可能略有差异,可通过app list -templates查看当前环境支持的模板列表。
  • 库文件按需添加:只添加工程实际依赖的库,避免引入不必要的代码体积;若库之间存在依赖,需一并添加。
  • 脚本可复用:把工程名、处理器名等提取为变量,即可在不同项目间复用同一份建工程脚本,适合批量构建与持续集成场景。

2.4.1 常见报错与排查

TCL 脚本建工程时,报错信息往往比较简短,定位问题需要结合命令参数和工程目录一起看。下表整理了四类典型问题的报错现象、原因与解决方式。

问题类型报错现象原因解决命令或修改方法
处理器名称不匹配ERROR: [Common 17-55] 'set_property' expects at least one object.或No processor named 'ps7_cortexa9_0' found in the hardware design-proc参数与硬件设计中实际例化的处理器实例名不一致,例如写成了ps7_cortexa9_0,而实际实例名为psu_cortexa53_0,或大小写、下划线写法有差异先执行platform report -name my_platform或report_property [get_property PROCESSOR [get_hw_devices]]查看可用处理器名,再用正确名称重建:platform create -name my_platform -hw ./design_1_wrapper.xsa -proc psu_cortexa53_0
模板名称不存在ERROR: Template 'Helloworld' not found或app config failed: invalid template name模板名称拼写或大小写与工具链内置模板不一致,例如写成Helloworld,而实际模板名为Hello World;不同版本工具链的模板集合也有差异先执行app list -templates查看当前环境支持的模板列表,再按实际名称配置:app config -name hello_world -set template "Hello World" -set lang c
库文件缺失依赖undefined reference to 'xil_printf'、cannot find -lxiltimer或编译阶段出现大量未定义符号只添加了上层库,未添加其依赖的底层库;或库名拼写错误、该库在当前 BSP 域中不可用按依赖顺序补齐库:app config -name hello_world -add libraries xiltimer,再app config -name hello_world -add libraries xil_printf;可用app config -name hello_world -get libraries确认已添加的库,用repo -apps查看可用库清单
.xsa 路径错误ERROR: File './design_1_wrapper.xsa' does not exist或Failed to open hardware handoff file-hw指定的路径为相对路径,而脚本执行目录与预期不一致;或文件名、扩展名写错,文件未从 Vivado 正确导出改用绝对路径或先切换目录:cd [file dirname [info script]],再platform create -name my_platform -hw [file normalize ./design_1_wrapper.xsa] -proc psu_cortexa53_0;执行前用file exists ./design_1_wrapper.xsa校验文件是否存在

排查时建议按“先校验输入文件、再校验名称参数、最后校验库依赖”的顺序逐项确认,并在脚本开头加上setws与路径校验,能避免大部分因环境差异导致的报错。

3. 总结

  • GUI 方式的关键步骤:选择工作空间 → Create Application Project → 选择处理器 → 选择 Helloworld 模板 → 添加库文件,全程向导式点击,适合新手快速理解建工程的每个环节。
  • TCL 方式的关键步骤:setws设置工作空间 →platform create创建平台工程 →platform generate生成 BSP →app create创建应用工程 →app config指定模板与库 →app build编译,一条脚本即可完成全部流程。
  • 两种方式结果一致:无论走 GUI 还是 TCL,最终生成的平台工程、BSP 与应用工程结构相同,区别只在操作入口,因此可以先用 GUI 熟悉流程,再用 TCL 复现。
  • 选型建议:单次调试、学习阶段优先用 GUI,直观且便于观察每一步;需要批量创建、版本管理或持续集成时优先用 TCL,脚本可参数化复用,减少重复点击带来的误差。
  • 验证与排错:工程创建后务必通过串口终端确认 HelloWorld 打印输出,遇到报错时按“先校验输入文件、再校验名称参数、最后校验库依赖”的顺序定位,可覆盖大部分常见问题。

参考资料

  • AMD(Xilinx)Vitis 统一软件平台文档首页:Vitis Unified Software Platform Documentation (UG1416)
  • platform create命令参考:Vitis Embedded Software Development Command Reference — platform create
  • app create命令参考:Vitis Embedded Software Development Command Reference — app create
  • app config命令参考:Vitis Embedded Software Development Command Reference — app config
  • XSCT 命令行工具与 TCL 脚本说明:Vitis Embedded Software Development Command Reference — XSCT Commands
  • Xilinx SDK(历史版本)命令与工程管理文档:Xilinx Software Development Kit (SDK) Documentation (UG782)

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询