4. Vitis与PetaLinux开发环境搭建
Kria 智能相机与视觉边缘终端的开发,本质上是一条“主机交叉编译 + 目标板运行”的链路。KV260、KD240 这类 Kria SOM 上运行的是 Ubuntu 或 PetaLinux 构建的嵌入式 Linux,而 PL 侧的加速逻辑、AI 推理引擎、设备树覆盖层(dtbo)以及固件包(.xclbin)都需要在 x86_64 主机上编译生成。因此,本节要解决的核心问题是:在主机上把 Vitis Unified IDE 与 PetaLinux 两套工具链装好、把 BSP 与工程创建起来、把交叉编译环境配通,并能在出错时快速定位。
4.1 两套工具的分工与版本对齐
Vitis Unified IDE 是 AMD 自 2023.2 起主推的统一开发界面,它把原来的 Vitis IDE、Vitis HLS、Vivado 的硬件导出流程整合到一个基于 VS Code 内核的界面中,主要负责 PL 侧加速器开发、AI 引擎编译、平台(.xsa)导入与 xclbin 生成。PetaLinux 则是基于 Yocto 的嵌入式 Linux 构建系统,负责生成 BOOT.BIN、image.ub、rootfs、设备树与内核模块。
两者必须使用同一版本号,例如统一使用 2023.2 或 2024.1。版本错配是新手最常见的坑:用 2024.1 的 Vitis 去链接 2023.2 的 PetaLinux 生成的 sysroot,会出现 glibc 符号版本不匹配、undefined reference to `__libc_start_main@GLIBC_2.34' 之类的链接错误。安装前先确定版本,再下载对应安装包。
4.2 主机环境与安装要点
官方推荐 Ubuntu 20.04.6 LTS 或 22.04.4 LTS,内存建议 32 GB 以上(PetaLinux 构建峰值可超过 16 GB),磁盘预留 200 GB 以上。安装前先装依赖:
sudo apt update
sudo apt install -y build-essential git libncurses5-dev \
libssl-dev zlib1g-dev libbz2-dev libreadline-dev \
libsqlite3-dev wget curl python3 python3-pip \
gcc-multilib g++-multilib libgtk2.0-0 libcanberra-gtk-module \
iproute2 net-tools libncursesw5-dev texinfo chrpath \
socat cpio python3-pexpect xz-utils debianutils \
python3-git python3-jinja2 libsdl1.2-dev pylint3 \
tftpd-hpa autoconf libtool rsync
Vitis 安装使用统一安装器 Xilinx_Unified_2023.2_1013_2256_Lin64.bin,运行后选择 “Vitis” 与 “Vivado” 组件,安装路径建议 /tools/Xilinx,避免路径含空格或中文。PetaLinux 是独立安装包 petalinux-v2023.2-10121855-installer.run,安装时用 --dir /tools/Xilinx/petalinux/2023.2 指定目录,安装完成后必须 source 其 settings.sh 才能使用 petalinux-* 命令。
~/.bashrc,但注意 Vitis 与 PetaLinux 的 settings 脚本会互相覆盖部分变量,推荐在独立终端中分别使用,或写两个别名 alias sv='source /tools/Xilinx/Vitis/2023.2/settings64.sh' 与 alias sp='source /tools/Xilinx/petalinux/2023.2/settings.sh'。4.3 BSP 获取与工程创建
Kria 官方 BSP 从 AMD 下载中心获取,例如 xilinx-kv260-starterkit-v2023.2-10121855.bsp。BSP 里已经包含硬件平台描述、预配置的 device-tree、kernel 配置与 rootfs 配方,是快速起步的最佳入口。创建工程:
petalinux-create -t project -s xilinx-kv260-starterkit-v2023.2-10121855.bsp -n kv260_cam
cd kv260_cam
petalinux-config --get-hw-description=./ # 若已有自定义 xsa 可指定路径
若不用 BSP,也可以从零创建:petalinux-create -t project --template zynqMP -n myproj,再导入 Vivado 导出的 .xsa。BSP 方式的优势是省去大量手工配置,适合先跑通再定制。
Vitis 侧则通过 vitis -w ./workspace 启动 Unified IDE,新建 Platform Component 时导入 .xsa,再新建 Application Component 选择 “Empty Application (C)” 或 “Acceleration” 模板。平台编译成功后会生成 export/ 目录,其中的 hw/ 与 sw/ 子目录就是后续 sysroot 的来源。
4.4 交叉编译环境配置
交叉编译的关键是让主机编译器找到目标板的头文件与库。PetaLinux 提供了 petalinux-build --sdk 生成 SDK 安装包,安装后得到 sysroot:
petalinux-build --sdk
petalinux-package --sysroot
# 生成 images/linux/sdk.sh,执行安装
./images/linux/sdk.sh -d /opt/petalinux/2023.2/sdk
安装后 source /opt/petalinux/2023.2/sdk/environment-setup-cortexa72-cortexa53-xilinx-linux,此时 $CC、$CXX、$SYSROOT 等变量自动就绪。用 aarch64-xilinx-linux-gcc 编译一个测试程序验证:
aarch64-xilinx-linux-gcc hello.c -o hello
file hello
# 期望输出:ELF 64-bit LSB executable, ARM aarch64
若输出为 x86-64,说明环境未生效或 PATH 被覆盖。Vitis 中则通过 Platform 的 sysroot 设置自动关联,无需手工指定,但需保证 Platform 编译时使用的 PetaLinux 版本与 SDK 一致。
4.5 常见问题排查
下面这张图把本节最容易出问题的几个环节串成一条排查路径,从环境变量、版本、sysroot 到链接与运行,按“先看现象、再定位根因”的顺序组织,便于对照使用。
排查时建议按顺序执行三条命令快速定位:which aarch64-xilinx-linux-gcc 确认交叉编译器是否在 PATH;echo $SYSROOT 确认 sysroot 是否指向目标板;file ./your_binary 确认产物架构。三条都正常却仍报错,再检查 Vitis Platform 与 PetaLinux 的版本号是否严格一致。