Arm Neoverse V3 BSA测试实战:FVP环境搭建与验证
1. 项目概述在Arm架构的芯片开发流程中系统级验证是确保硬件设计符合标准规范的关键环节。Arm Neoverse V3作为新一代基础设施级处理器其参考设计(RD-V3)需要通过BSA(基本系统架构)和SBSA(服务器基础系统架构)测试套件的严格验证。Fixed Virtual Platform(FVP)技术让开发者能够在流片前就完成完整的系统验证大幅降低开发风险和成本。我最近在项目中完整实施了Neoverse V3的BSA测试流程本文将分享从FVP环境搭建到测试执行的全套实战经验。不同于官方文档的简要说明这里会重点解析实际操作的难点和技巧包括PCIe设备树配置、中断控制器参数调优等关键细节。2. 环境准备与FVP模型部署2.1 基础环境配置首先需要准备x86_64架构的Linux主机推荐Ubuntu 20.04 LTS配置至少16GB内存和100GB磁盘空间。以下是依赖环境的安装步骤# 安装基础工具链 sudo apt update sudo apt install -y \ git repo gcc make cmake \ python3 python3-pip \ device-tree-compiler \ dosfstools mtools # 设置工作目录 mkdir -p ~/workspace/rdv3 cd ~/workspace/rdv3注意建议使用普通用户操作仅在必须时使用sudo。所有路径保持为英文且不含空格避免后续脚本解析问题。2.2 FVP模型获取与安装Arm官方提供了Neoverse V3的参考设计模型需从Arm开发者网站获取wget https://developer.arm.com/-/cdn-downloads/permalink/FVPs-Neoverse-Infrastructure/RD-V3-Cfg1/FVP_RD_V3_Cfg1_11.29_35_Linux64.tgz tar -xf FVP_RD_V3_Cfg1_11.29_35_Linux64.tgz ./FVP_RD_V3_Cfg1.sh安装完成后设置环境变量指向模型二进制文件export MODEL$(pwd)/Linux64_GCC-9.3/FVP_RD_V3_Cfg1 echo export MODEL$MODEL ~/.bashrc实测发现模型版本与工具链存在兼容性要求建议使用文档指定的11.29_35版本。若遇到段错误尝试更新主机GLIBC到2.31以上版本。3. 软件栈构建与定制3.1 源码同步与依赖安装使用repo工具同步代码仓库repo init -u https://github.com/ARM-software/rd-infra -b main -m manifest.xml repo sync -c -j$(nproc) --fetch-submodules --force-sync --no-clone-bundle安装构建依赖sudo ./build-scripts/rdinfra/install_prerequisites.sh3.2 中断控制器关键修改BSA测试需要支持大量中断源需修改UEFI代码中的默认配置# 修改文件uefi/edk2/ArmPkg/Drivers/ArmGic/GicV3/ArmGicV3Dxe.c - mGicNumInterrupts ArmGicGetMaxNumInterrupts (mGicDistributorBase); mGicNumInterrupts 16384;这个修改将GICv3中断控制器支持的中断数扩展到16384个满足多设备测试场景。修改后执行完整构建./build-scripts/build-test-uefi.sh -p rdv3cfg1 all3.3 PCIe设备树配置RD-V3支持灵活的PCIe拓扑配置以下是典型操作流程下载预定义的PCIe层级文件wget https://raw.githubusercontent.com/ARM-software/sysarch-acs/main/docs/pcie/example_pcie_hierarchy_0.json集成到软件栈cp example_pcie_hierarchy_0.json ~/workspace/model-scripts/rdinfra/platforms/rdv3cfg1/修改启动脚本run_model.shsed -i s/hierarchy_file_namedefault/hierarchy_file_nameexample_pcie_hierarchy_0.json/ \ ~/workspace/model-scripts/rdinfra/platforms/rdv3cfg1/run_model.sh技巧可通过修改JSON文件自定义PCIe拓扑结构每个端口可配置为Root Port、Switch或Endpoint设备。4. 裸机模式BSA测试实施4.1 测试套件编译创建裸机构建目录并克隆ACS仓库mkdir -p ~/workspace/bm_build cd ~/workspace/bm_build git clone https://github.com/ARM-software/sysarch-acs.git安装Arm GNU工具链版本需严格匹配wget https://developer.arm.com/-/media/Files/downloads/gnu/14.3.rel1/binrel/arm-gnu-toolchain-14.3.rel1-x86_64-aarch64-none-elf.tar.xz tar -xf arm-gnu-toolchain-14.3.rel1-x86_64-aarch64-none-elf.tar.xz export CROSS_COMPILE~/workspace/arm-gnu-toolchain-14.3.rel1-x86_64-aarch64-none-elf/bin/aarch64-none-elf-执行构建cd sysarch-acs mkdir build cd build cmake ../ -GUnix Makefiles -DTARGETRDV3CFG1 make bsa4.2 测试执行与结果收集修改软件栈以加载ACS二进制# 替换build-scripts/build-target-bins.sh中的uefi.bin为acs_latest.bin sed -i s/uefi.bin/acs_latest.bin/g ~/workspace/build-scripts/build-target-bins.sh # 复制测试镜像 cp ~/workspace/bm_build/sysarch-acs/build/bsa_build/output/bsa.bin \ ~/workspace/output/rdv3cfg1/components/css-common/acs_latest.bin # 重新打包FIP cd ~/workspace ./build-scripts/build-test-uefi.sh -p rdv3cfg1 package启动测试cd model-scripts/rdinfra/platforms/rdv3cfg1 ./run_model.sh测试日志保存在rdv3cfg1/目录下关键文件包括bsa.log详细测试输出acs_results.xml结构化测试结果console.log完整控制台记录5. UEFI模式测试方案5.1 EDK2环境搭建创建独立构建目录mkdir -p ~/workspace/uefi_build cd ~/workspace/uefi_build git clone --recurse-submodules --branch edk2-stable202505 https://github.com/tianocore/edk2.git git clone https://github.com/tianocore/edk2-libc.git edk2/edk2-libc配置工具链wget https://developer.arm.com/-/media/Files/downloads/gnu/14.3.rel1/binrel/arm-gnu-toolchain-14.3.rel1-x86_64-aarch64-none-linux-gnu.tar.xz tar -xf arm-gnu-toolchain-14.3.rel1-x86_64-aarch64-none-linux-gnu.tar.xz export GCC_AARCH64_PREFIX~/workspace/arm-gnu-toolchain-14.3.rel1-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-5.2 ACS测试镜像制作编译测试套件cd edk2 git submodule update --init --recursive git clone https://github.com/ARM-software/sysarch-acs.git ShellPkg/Application/sysarch-acs source edksetup.sh make -C BaseTools/Source/C source ShellPkg/Application/sysarch-acs/tools/scripts/acsbuild.sh bsa创建虚拟磁盘并载入测试程序mkfs.vfat -C -n HD0 hda.img 2097152 sudo mkdir /mnt/bsa sudo mount hda.img /mnt/bsa sudo cp Build/Shell/DEBUG_GCC/AARCH64/Bsa.efi /mnt/bsa/ sudo umount /mnt/bsa5.3 UEFI Shell测试执行启动FVP并挂载磁盘镜像cd ~/workspace/model-scripts/rdinfra/platforms/rdv3cfg1 ./run_model.sh -v ~/workspace/uefi_build/hda.img在UEFI Shell中执行选择Boot Manager→UEFI Shell输入FS2:切换到虚拟磁盘执行Bsa.efi -f acs.txt启动测试测试完成后挂载磁盘镜像获取结果sudo mount ~/workspace/uefi_build/hda.img /mnt/bsa cat /mnt/bsa/acs.txt6. 常见问题与调试技巧6.1 网络问题解决方案当repo sync因网络超时失败时使用-j4降低并发数配置git代理git config --global http.proxy http://proxy.example.com:80806.2 测试卡住处理若测试在某个用例卡住检查模型启动参数是否包含-C bp.vis.disable_visualisation1关闭图形界面增加日志级别在run_model.sh中添加--verbose参数使用GDB附加调试gdb --args $MODEL --cadi-server6.3 结果分析要点BSA测试结果重点关注SBSA_LEVEL通过的SBSA合规级别PASS/FAIL统计SKIP用例的合理性评估典型失败案例处理PCIe枚举失败检查PCIe层级文件配置中断测试失败确认GICv3参数修改已生效内存测试失败验证DDR控制器配置7. 进阶配置建议7.1 多节点测试配置对于复杂拓扑测试可启动多个FVP实例并通过参数互联# 节点1 $MODEL -C cluster0.NUM_CORES4 -C bp.pl011_uart0.out_filenode1.log # 节点2 $MODEL -C cluster0.NUM_CORES4 -C bp.pl011_uart0.out_filenode2.log \ -C bp.hostbridge.extra_cluster_interfaces0.socket0.cluster07.2 性能优化参数提升FVP运行效率的关键参数-C cache_state_modelled0 # 禁用缓存建模 -C bp.dram_metadata.is_sync1 # 同步内存访问 -C bp.vis.disable_visualisation1 # 禁用可视化7.3 自动化测试集成示例CI脚本框架#!/bin/bash # 构建阶段 ./build-scripts/build-test-uefi.sh -p rdv3cfg1 all # 测试阶段 cd model-scripts/rdinfra/platforms/rdv3cfg1 ./run_model.sh test.log # 结果分析 grep -q Overall Test Status : PASS test.log || exit 1通过这套方案我们成功在Neoverse V3平台上实现了BSA/SBSA的全套测试验证最终获得SystemReady SR认证。实际项目中建议将FVP测试纳入持续集成流程每次硬件设计变更后自动执行合规性验证。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2593852.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!