4. 开发环境搭建
Ryzen Embedded 开发板(如 AMD Ryzen Embedded V2000/V3000 系列评估板、Sapphire 7 等)出厂时通常预装 Windows 或精简 Linux 镜像,要用于边缘 AI 推理,第一步是把系统替换为可长期维护的 Ubuntu LTS,并让主机具备交叉编译与固件更新能力。本节围绕“板端系统—主机工具链—驱动固件”三条线展开,给出可直接复现的操作路径。
一、板端 Ubuntu 安装:从启动介质到首次登录
推荐使用 Ubuntu 22.04 LTS(Jammy)或 24.04 LTS(Noble)的 x86_64 桌面/服务器镜像。Ryzen Embedded 是标准 x86_64 架构,不需要像 ARM 那样寻找专用镜像,但需要确认内核版本对板载网卡、NVMe、USB 控制器和显示输出的支持。建议选择 5.15 以上内核,若使用较新的 Radeon 核显做推理显示,24.04 的 6.8 内核兼容性更好。
制作启动盘时,在主机上使用 dd 或 balenaEtcher 将 ISO 写入 U 盘。写入后不要直接拔盘,先执行 sync 确保缓存落盘。开发板侧进入 BIOS/UEFI(通常开机按 Del 或 F2),关闭 Secure Boot,将 USB 设为第一启动项。若板卡有 eMMC 与 NVMe 双存储,建议把系统装到 NVMe,eMMC 留给模型缓存或日志分区。
# 主机端写入 U 盘(/dev/sdX 需替换为实际设备,务必确认)
sudo dd if=ubuntu-22.04.4-desktop-amd64.iso of=/dev/sdX bs=4M status=progress oflag=sync
# 板端首次启动后确认关键硬件
lscpu | grep -E "Model name|CPU\(s\)"
lspci | grep -Ei "vga|ethernet|nvme"
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT
uname -r
安装过程中建议勾选“安装第三方驱动”,以便自动加载 amdgpu 固件。安装完成后先执行一次完整更新,再安装基础工具:
sudo apt update && sudo apt full-upgrade -y
sudo apt install -y build-essential git cmake pkg-config \
linux-firmware linux-headers-$(uname -r) \
python3-pip python3-venv htop iotop
判断安装是否成功,不只看能否进桌面,还要看三项:lspci 能识别 Radeon 显卡、ip a 能拿到有线网卡地址、lsblk 能看到目标系统盘。若网卡未识别,多半是内核版本或固件缺失,可先升级内核再排查。
二、交叉编译工具链:主机与板端的分工
边缘 AI 部署中,交叉编译主要解决两类问题:一是在性能更强的主机上编译大型 C++ 推理程序,避免板端编译耗时;二是为不同内核版本或不同板卡生成可移植二进制。由于 Ryzen Embedded 与主机同为 x86_64,严格意义上的“跨架构”交叉编译并不常见,更实用的是“同架构、不同 sysroot”的交叉编译,即用主机工具链配合板端根文件系统,生成与板端库版本匹配的可执行文件。
推荐使用 gcc-aarch64-linux-gnu 仅用于 ARM 协处理器场景;对 Ryzen 本体,使用 gcc + --sysroot 即可。先在主机安装基础工具链:
sudo apt install -y gcc g++ gdb make ninja-build \
gcc-multilib g++-multilib
# 从板端导出 sysroot(示例:板端 IP 192.168.1.50)
mkdir -p ~/ryzen-sysroot
rsync -avz --delete \
--exclude=/proc --exclude=/sys --exclude=/dev \
--exclude=/run --exclude=/tmp \
root@192.168.1.50:/usr/include ~/ryzen-sysroot/usr/
rsync -avz root@192.168.1.50:/usr/lib ~/ryzen-sysroot/usr/
rsync -avz root@192.168.1.50:/lib ~/ryzen-sysroot/
随后在 CMake 工具链文件中固定编译器与 sysroot,避免每次手动传参:
# toolchain-ryzen.cmake
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR x86_64)
set(CMAKE_C_COMPILER /usr/bin/gcc)
set(CMAKE_CXX_COMPILER /usr/bin/g++)
set(CMAKE_SYSROOT $ENV{HOME}/ryzen-sysroot)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
编译时用 cmake -DCMAKE_TOOLCHAIN_FILE=toolchain-ryzen.cmake .. 即可。验证方法:把生成的二进制拷到板端执行 ldd ./app,若所有依赖都能解析,说明 sysroot 与板端库版本一致;若出现 not found,通常是主机 sysroot 中缺少对应 .so,需重新同步。
三、驱动与固件更新:让 GPU 与 NPU 可用
Ryzen Embedded 的 AI 推理主要依赖 Radeon GPU(ROCm/OpenCL/Vulkan)和部分型号的 XDNA NPU。Ubuntu 安装后,先确认 amdgpu 驱动已加载:
lsmod | grep amdgpu
dmesg | grep -i amdgpu | tail -20
sudo apt install -y mesa-utils clinfo
clinfo | head -30
若 clinfo 能列出 GPU 设备,说明 OpenCL 运行时可用。若需要 ROCm,建议按官方源安装,并注意 ROCm 对内核版本有要求,升级内核后需重新编译 DKMS 模块。固件方面,linux-firmware 包已包含大部分 amdgpu 固件;若板卡厂商提供独立固件包,应优先使用厂商版本,并在更新后重启验证。
BIOS/固件更新通常通过厂商提供的 UEFI Shell 或 Linux 下的 flashrom 完成。更新前务必记录当前版本,并保证供电稳定。更新后重新进入系统,用 dmesg 检查是否有固件加载失败或版本回退的提示。
四、常见问题与判断依据
安装后若出现黑屏或分辨率异常,优先检查 BIOS 中显存分配是否过小,以及是否加载了 amdgpu 而非 vesa。若 clinfo 报 No platforms found,通常是 OpenCL ICD 未安装,可安装 ocl-icd-libopencl1 与 mesa-opencl-icd 后重试。交叉编译产物在板端运行时报 GLIBC_2.35 not found,说明主机 sysroot 中的 glibc 版本高于板端,应重新从板端同步 /lib/x86_64-linux-gnu 下的库文件,而不是使用主机自带版本。
make env-check 脚本,每次换板或升级内核后执行一次,能显著减少“主机能编、板端跑不起来”的排查时间。