1. 环境搭建

任务目标

在Ubuntu 22.04主机上搭建面向嵌入式AI部署的交叉编译与运行时环境,具体包括:安装ARM交叉编译器、CMake构建工具、Python虚拟环境及ONNX Runtime(ARM64版本),并验证工具链可用性。本案例不涉及具体模型转换或推理代码,仅完成环境就绪与自检。

环境依赖

  • 主机系统:Ubuntu 22.04 x86_64
  • 目标平台:ARM64(aarch64)Linux,例如树莓派4B或RK3588开发板
  • 需联网安装以下软件包

完整实现

以下脚本一次性完成全部环境配置。将脚本保存为 setup_env.sh,在终端执行 bash setup_env.sh。

#!/bin/bash
set -e

# 1. 系统依赖
sudo apt update
sudo apt install -y build-essential cmake git python3 python3-pip python3-venv \
    gcc-aarch64-linux-gnu g++-aarch64-linux-gnu

# 2. 创建Python虚拟环境
python3 -m venv ~/ai_deploy_env
source ~/ai_deploy_env/bin/activate

# 3. 安装Python依赖(numpy为onnxruntime的依赖)
pip install --upgrade pip
pip install numpy

# 4. 下载ARM64版ONNX Runtime(1.17.0,Python接口)
wget https://github.com/microsoft/onnxruntime/releases/download/v1.17.0/onnxruntime-linux-aarch64-1.17.0.tgz
tar -xzf onnxruntime-linux-aarch64-1.17.0.tgz
sudo cp -r onnxruntime-linux-aarch64-1.17.0/lib/* /usr/local/lib/
sudo ldconfig

# 5. 验证工具链
echo "=== 交叉编译器版本 ==="
aarch64-linux-gnu-gcc --version | head -n 1

echo "=== CMake版本 ==="
cmake --version | head -n 1

echo "=== Python虚拟环境 ==="
which python3
python3 --version

echo "=== ONNX Runtime库文件 ==="
ls /usr/local/lib/libonnxruntime.so*

echo "=== 编译测试(交叉编译一个最小C程序) ==="
cat <<EOF > test.c
#include <stdio.h>
int main() { printf("ARM64 OK\n"); return 0; }
EOF
aarch64-linux-gnu-gcc test.c -o test_arm64
file test_arm64

运行与验证

  1. 执行配置:bash setup_env.sh,脚本运行结束无报错即完成安装。
  2. 验证交叉编译产物:脚本最后输出 test_arm64: ELF 64-bit LSB executable, ARM aarch64,说明交叉编译器工作正常。
  3. 验证ONNX Runtime:在虚拟环境中执行 python3 -c "import onnxruntime; print(onnxruntime.get_available_providers())",预期输出包含 CPUExecutionProvider,且无导入错误。
  4. 验证目标板运行(可选):将 test_arm64 拷贝到ARM64开发板,执行后输出 ARM64 OK,确认二进制可在目标平台运行。

判定标准

  • 脚本执行无错误退出(set -e 保证中途失败即停止)。
  • file test_arm64 显示架构为 ARM aarch64。
  • Python虚拟环境中可正常导入 onnxruntime 并列出可用执行提供程序。

常见问题

  • wget下载失败:若网络受限,可手动从GitHub Releases页面下载对应tgz包,放到脚本同目录后注释掉wget行,直接执行解压与拷贝步骤。
  • sudo ldconfig后仍找不到库:确认 /usr/local/lib 在 /etc/ld.so.conf 中已包含,或使用 export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH 临时生效。
  • Python版本冲突:本案例使用Python 3.10(Ubuntu 22.04默认),若系统Python版本不同,建议先安装python3.10-venv再创建虚拟环境。