2. 开发环境搭建与工具链准备
PolarFire SoC 的嵌入式 Linux 开发不是单一工具能完成的任务,而是一条从 FPGA 逻辑设计到 Linux 应用部署的完整工具链。主机上需要同时存在四类工具:负责硬件平台构建的 Libero SoC、负责裸机与驱动调试的 SoftConsole、负责生成 Linux 发行版的 Yocto/OpenEmbedded,以及负责编译 RISC-V 程序的 GNU 工具链。它们各自输出不同产物,最终通过 JTAG 与串口汇聚到目标板。理解这条链上每个工具的输入输出关系,比记住安装命令更重要。
四类工具的职责与产物
Libero SoC 是 Microchip 的 FPGA 设计套件,在 PolarFire SoC 上它负责生成 FPGA 配置比特流(.job/.bit)、硬件描述文件(.hdf)以及包含存储器映射信息的 XML。SoftConsole 是基于 Eclipse 的 RISC-V 集成开发环境,内置 OpenOCD 与 GDB,用于调试 HSS(Hart Software Services)、U-Boot 和裸机程序。Yocto/OpenEmbedded 通过 BitBake 与 meta-riscv、meta-polarfire-soc 等层,把内核、根文件系统、设备树打包成可启动镜像。RISC-V GNU 工具链(riscv64-unknown-linux-gnu- 与 riscv64-unknown-elf-)则提供编译器、汇编器、链接器和 objdump 等基础能力,前两者实际上会被 SoftConsole 和 Yocto 内部调用。
这四者的依赖关系是:Libero 产出硬件描述 → Yocto 依据硬件描述生成设备树与镜像 → GNU 工具链编译所有软件 → SoftConsole 通过 JTAG 把 HSS 和镜像加载到目标板。因此安装顺序建议为:先装 GNU 工具链,再装 Libero SoC,然后装 SoftConsole,最后配置 Yocto 构建环境。
安装与配置要点
GNU 工具链建议从 Microchip 提供的 RISC-V 工具链包安装,而非直接使用上游 riscv-gnu-toolchain 源码编译,因为 PolarFire SoC 的 HSS 与 U-Boot 依赖特定补丁。安装后执行 riscv64-unknown-elf-gcc --version 与 riscv64-unknown-linux-gnu-gcc --version,确认版本号与 Libero 发布说明中标注的版本一致。若版本不匹配,后续链接 HSS 时可能出现 ABI 不兼容错误。
Libero SoC 安装时需勾选 PolarFire SoC 器件支持包,并安装对应的 FlashPro 编程器驱动。安装完成后在 Libero/bin 下运行 libero 启动图形界面,通过 License 管理器加载 .lic 文件。SoftConsole 安装后需在 Preferences 中指定 RISC-V 工具链路径,并确认 OpenOCD 的 openocd 可执行文件位于 SoftConsole/openocd/bin 下。
Yocto 环境通过 repo 工具同步。典型流程如下:
mkdir -p ~/polarfire-soc && cd ~/polarfire-soc
repo init -u https://github.com/polarfire-soc/polarfire-soc-yocto-manifests.git -b main
repo sync
source meta-polarfire-soc/oe-init-build-env
bitbake core-image-minimal
首次构建约需 2–4 小时,取决于主机 CPU 与网络。构建完成后在 tmp/deploy/images/mpfs-icicle-kit/ 下可看到 core-image-minimal-mpfs-icicle-kit.wic 与对应的设备树 .dtb。若构建失败,优先检查 conf/local.conf 中 MACHINE 是否设置为 mpfs-icicle-kit,以及 DL_DIR 是否有足够磁盘空间。
JTAG 与串口连接
PolarFire SoC 开发板通常通过板载 FTDI 芯片同时提供 JTAG 与 UART。连接后 Linux 主机上会出现两个设备节点:/dev/ttyUSB0 为 JTAG 接口,/dev/ttyUSB1 为串口控制台。串口参数为 115200-8-N-1,无流控。使用 minicom -D /dev/ttyUSB1 -b 115200 或 picocom -b 115200 /dev/ttyUSB1 打开终端。上电后若能看到 HSS 启动日志,说明 JTAG 与串口链路均已连通。
/dev/ttyUSB1 无输出,先确认拨码开关处于 JTAG 启动模式,再用 dmesg | grep ftdi 检查驱动是否正常加载。部分主机需将当前用户加入 dialout 组并重新登录。
工具链可用性验证
安装完成后应逐项验证,而不是等到编译失败再排查。建议按以下顺序检查:
- GNU 工具链:编译一个最小 RISC-V 程序并检查 ELF 架构。
riscv64-unknown-elf-gcc -march=rv64gc -mabi=lp64d hello.c -o hello.elf,然后riscv64-unknown-elf-readelf -h hello.elf,确认 Machine 为 RISC-V,Flags 包含 rv64gc。 - Libero SoC:打开一个 PolarFire SoC 示例工程,运行综合与布局布线,确认能生成 .job 文件且无 License 报错。
- SoftConsole:导入 HSS 工程,配置 Debug Configuration 指向
openocd与riscv64-unknown-elf-gdb,连接目标板后应能停在main函数。 - Yocto:执行
bitbake -e core-image-minimal | grep ^MACHINE=,确认 MACHINE 值为mpfs-icicle-kit,且bitbake-layers show-layers中能看到 meta-riscv 与 meta-polarfire-soc。 - 串口与 JTAG:上电后串口打印 HSS 版本号与 DDR 初始化信息,即表示两条链路均正常。