2. Linux 系统工程开发环境搭建
Agilex SoC 的开发环境不是“装一个软件”就能完成的,而是由四条相互咬合的软件链组成:Quartus Prime 负责硬件工程与 HPS 配置导出,SoC EDS(或后续的 Ashling RiscFree / Arm DS)负责硬件到软件的交接与裸机/驱动调试,交叉编译工具链负责生成 ARM64 目标代码,Linux 源码与 Yocto/Buildroot 负责生成内核、设备树与根文件系统。四者之间通过版本号、器件系列和 HPS 配置信息强耦合,任何一环版本错位,都会在编译或启动阶段以难以定位的错误暴露出来。
四条软件链的职责与交接关系
理解环境搭建的关键,是先看清各工具之间的数据流向,而不是孤立地安装。下图给出本节的核心结构:Quartus 工程产出 .sof 与 HPS 配置信息,SoC EDS 的 embedded_command_shell.sh 提供 hps_config、bsp-editor、quartus_hps 等工具,把硬件信息转换为 U-Boot 设备树、preloader 和启动镜像;交叉工具链则被 U-Boot、内核和应用程序共同调用。
安装顺序与关键配置
推荐按“Quartus → SoC EDS → 工具链 → Linux 源码”的顺序安装,因为后一步依赖前一步的产物。Quartus Prime Pro 安装时需勾选 Agilex 器件支持包,安装完成后确认 quartus_sh --version 输出与下载版本一致。SoC EDS 安装后,必须通过 embedded_command_shell.sh 进入其环境,而不是直接使用系统 shell,否则 bsp-editor、hps_config 等命令会找不到。
# 进入 SoC EDS 环境(示例路径)
~/intelFPGA_pro/23.4/embedded/embedded_command_shell.sh
# 确认工具可用
which bsp-editor
which quartus_hps
aarch64-linux-gnu-gcc --version
交叉工具链建议优先使用 SoC EDS 自带的 aarch64-linux-gnu,或使用 Yocto 生成的 SDK 安装脚本。若自行下载 Linaro 工具链,必须核对 glibc 版本与 rootfs 一致。一个常见错误是:用 glibc 2.35 的工具链编译,却把二进制放进 glibc 2.31 的 rootfs,运行时报 GLIBC_2.34 not found。
从硬件工程到启动镜像的交接
Quartus 工程编译完成后,在 Platform Designer 中打开 HPS 组件,配置 DDR 型号、时钟频率、外设使能(UART、SD/MMC、Ethernet、USB 等),然后生成 .sopcinfo。接着在 SoC EDS 环境中执行 bsp-editor,导入 .sopcinfo,选择启动方式(SD/MMC 或 QSPI),生成 U-Boot 设备树和 preloader 源码。这一步的实质是把硬件描述翻译成软件可读的设备树节点。
# 生成 preloader 与设备树(示例)
bsp-editor
# 在 GUI 中:File → New BSP → 选择 .sopcinfo → 设置启动器件
# 生成后进入 software/uboot-socfpga 目录
make
# 产出:u-boot-with-spl.sfp、socfpga_agilex_socdk.dtb
内核编译时,ARCH=arm64、CROSS_COMPILE=aarch64-linux-gnu- 必须与工具链前缀一致。设备树使用上一步生成的 .dtb,或使用内核源码中对应开发板的 dts 并叠加 HPS 配置。最终把 u-boot-with-spl.sfp、Image、.dtb 和 rootfs 按分区写入 SD 卡。
版本匹配的检查清单
| 检查项 | 判断方法 | 不匹配的典型现象 |
|---|---|---|
| Quartus 与 SoC EDS 同代 | 对比安装目录版本号 | bsp-editor 无法识别 .sopcinfo |
| 工具链 ABI 与 rootfs 一致 | readelf -l 查看 interpreter | GLIBC 版本找不到 |
| 内核分支与 preloader 对齐 | 检查 dts 中 compatible 字符串 | 串口无输出、DDR 初始化失败 |
| U-Boot 与内核设备树一致 | 对比 dtb 与内核 dts | 外设 probe 失败 |
quartus_hps -c 1 -o P 读取 HPS 状态,再通过串口确认 preloader 和 U-Boot 的版本打印,最后启动内核并检查 dmesg 中 HPS 外设是否全部 probe 成功。这三步能快速定位是硬件配置、启动链还是内核配置的问题。环境搭建的本质是让四条软件链在版本和接口上对齐。只要 Quartus、SoC EDS、工具链和 Linux 源码四者的版本关系清晰,后续的驱动开发、应用部署和调试才有稳定的基础。