飞腾E2000S平台实战:从零构建OpenBMC镜像到烧录上电的全过程记录
飞腾E2000S平台实战从零构建OpenBMC镜像到烧录上电的全过程记录在国产化硬件开发领域飞腾E2000S evb-pe2201开发板因其出色的性能和开放的生态正成为越来越多工程师进行BMC开发的理想选择。OpenBMC作为开源的基础管理控制器固件为服务器硬件提供了灵活的管理方案。本文将手把手带你完成从环境搭建到镜像烧录的全流程特别针对E2000S平台的特性优化和常见问题提供解决方案。1. 开发环境准备与依赖项配置工欲善其事必先利其器。在开始构建之前我们需要确保开发环境完全就绪。推荐使用Ubuntu 20.04 LTS作为基础系统这个版本在Yocto项目兼容性方面表现最为稳定。1.1 系统基础依赖安装执行以下命令安装必备工具链sudo apt update sudo apt install -y gawk git git-core diffstat unzip texinfo \ gcc-multilib build-essential chrpath socat cpio python3 \ python3-pip python3-pexpect xz-utils debianutils iputils-ping \ python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev \ pylint3 xterm python3-subunit mesa-common-dev zstd liblz4-tool注意如果使用代理网络环境需要提前配置好git和apt的代理设置否则后续软件包下载可能失败。1.2 特别依赖项处理针对飞腾E2000S平台还需要额外安装一些架构相关的工具sudo apt install -y gcc-aarch64-linux-gnu binutils-aarch64-linux-gnu验证交叉编译工具链是否安装成功aarch64-linux-gnu-gcc --version预期应输出类似aarch64-linux-gnu-gcc (Ubuntu 9.4.0-1ubuntu1~20.04) 9.4.0的版本信息。2. 源码获取与初始化配置2.1 仓库克隆与子模块初始化首先创建工作目录并克隆官方仓库mkdir -p ~/openbmc cd ~/openbmc repo init -u https://github.com/openbmc/openbmc -b master -m ft2000/evb-pe2201.xml repo sync常见问题处理若遇到repo: command not found需先安装repo工具mkdir -p ~/bin curl https://storage.googleapis.com/git-repo-downloads/repo ~/bin/repo chmod ax ~/bin/repo export PATH~/bin:$PATH同步过程中若出现网络错误可尝试设置git参数git config --global http.postBuffer 1048576000 git config --global https.postBuffer 10485760002.2 环境变量设置初始化构建环境cd ~/openbmc . setup evb-pe2201验证环境变量是否生效echo $MACHINE正确应输出evb-pe2201。3. 构建过程详解与优化3.1 首次构建准备首次构建前建议执行以下优化操作下载缓存配置 在build/conf/local.conf中添加SSTATE_MIRRORS file://.* https://sstate.yoctoproject.org/all/PATH;downloadfilenamePATH并行编译设置 根据CPU核心数调整echo BB_NUMBER_THREADS 8 build/conf/local.conf echo PARALLEL_MAKE -j 8 build/conf/local.conf3.2 核心构建命令执行完整构建bitbake obmc-phosphor-image构建过程可分为几个关键阶段阶段耗时预估主要任务fetch30-60分钟下载所有源码和依赖configure10-20分钟配置各软件包compile1-2小时实际编译过程package20-30分钟生成最终镜像实用技巧可使用bitbake -c fetchall obmc-phosphor-image预先下载所有资源中断后恢复构建使用bitbake obmc-phosphor-image -c continue3.3 常见错误排查问题1网络超时导致下载失败解决方案# 重试单个失败的任务 bitbake -c compile -f 失败的任务名问题2依赖冲突典型错误示例ERROR: Nothing PROVIDES virtual/kernel解决方法bitbake -g obmc-phosphor-image cat pn-depends.dot | grep -v -e -native | grep -v digraph | grep -v -e -image | awk {print $1} | sort | uniq4. 镜像烧录与上电测试4.1 生成镜像文件构建成功后镜像位于tmp/deploy/images/evb-pe2201/obmc-phosphor-image-evb-pe2201.mtd验证镜像完整性ls -lh tmp/deploy/images/evb-pe2201/ file tmp/deploy/images/evb-pe2201/obmc-phosphor-image-evb-pe2201.mtd4.2 烧录工具准备推荐使用flashrom进行烧录sudo apt install -y flashrom连接开发板与烧录器后检测Flash芯片sudo flashrom -p ft2232_spi:type2232H -V4.3 实际烧录步骤擦除Flashsudo flashrom -p ft2232_spi:type2232H -E写入镜像sudo flashrom -p ft2232_spi:type2232H -w \ tmp/deploy/images/evb-pe2201/obmc-phosphor-image-evb-pe2201.mtd验证写入sudo flashrom -p ft2232_spi:type2232H -v \ tmp/deploy/images/evb-pe2201/obmc-phosphor-image-evb-pe2201.mtd4.4 上电与功能测试成功烧录后通过串口连接开发板sudo picocom -b 115200 /dev/ttyUSB0预期启动日志应包含[ OK ] Started OpenBMC Phosphor State Manager [ OK ] Reached target Multi-User System.基础功能测试命令ipmitool mc info ipmitool sensor list5. 开发进阶使用devtool进行定制开发5.1 创建开发工作区以修改phosphor-host-ipmi为例devtool modify phosphor-host-ipmi cd workspace/sources/phosphor-host-ipmi-*5.2 典型开发流程修改代码后测试devtool build phosphor-host-ipmi devtool deploy-target phosphor-host-ipmi rootbmc-ip生成补丁devtool finish phosphor-host-ipmi meta-layer重新构建完整镜像bitbake obmc-phosphor-image5.3 调试技巧实时日志监控journalctl -f -u phosphor-ipmi-hostGDB远程调试devtool build -c install -f phosphor-host-ipmi gdbserver :1234 /usr/bin/phosphor-ipmi-host在开发机上连接gdb-multiarch target remote bmc-ip:1234