openbmc学习
bmc整体架构
持续学习更新
从上到下可以分为软件层和硬件层
- 1.软件层
- 软件应用层:主要负责与 BMC 各种接口管理协议的交互,如 Redfish、WebUI、IPMI 和 SNMP 等。除此之外,与 BMC 自身操作系统相关的服务也属于这一层,如 D-Bus 间进程通信、SSH 远程登录和 KVM 等.
- 内核层:此部分软件与 BMC 芯片直接相关,包括与 BMC 芯片强相关的驱动程序。需要注意的是显示控制器主存大小在BMC侧设置,但显示控制器驱动需要再Host端运行,温度传感器、eeprom 等 I2C 设备、风扇以及支持 PmBus 的电源模块等部件的驱动需要再BMC上运行。
- Uboot:这一层除了负责引导内核启动外,还配置与 BMC 卡硬件相关的软件参数。如设置显示控制器的显存大小和访问权限等。
- 2.硬件层`
- 包括 BMC 插卡和连接到 BMC 的部件。BMC 插卡内部的部分控制器需要区分 Master 和 Slave 模式,如 I2C 控制器在支持 IPMB 通信及 MCTP 通信的场景下,只能使用 I2C Master Write 操作,因此需要支持 Master 和 Slave 模式的切换。另外,BMC 还与主板上的其他部件相连,如温度传感器、eeprom 等 I2C 设备、风扇以及支持 PmBus 的电源模块等。这些部件通过 BMC 与主机系统进行通信,并由 BMC 进行管理和监控。
图来源https://segmentfault.com/a/1190000044590949
U-boot开发
- 编译
- 1.获取源码
git clone https://github.com/openbmc/u-boot.git - 2.编译
cd u-boot/ #进入工程目录 make pe2201-bmc_defconfig #选择默认配置 make menuconfig #可选配置 make #编译,编译完成后会在工程根目录下生成所需的镜像:u-boot.bin
- 1.获取源码
编译构建 OpenBMC
下面介绍的是 OpenBMC 通用的编译构建步骤。在 OurBMC 下的 OpenBMC 仓库,复制已克隆或下载的代码链接,下载完代码后,执行下面的步骤:
进入 OpenBMC 源码的顶层目录。
选择要编译的 BMC 卡,以 evb-ast2600 为例

执行如下命令会在 build 目录下创建 evb-ast2600 目录
. setup evb-ast2600

进入该目录开始只有 conf 目录, conf 目录下有使用 bitbake 构建使用的配置文件 local.conf 。为了提升构建速度我们需要对该配置文件进行修改,在文件后面添加
BB_NUMBER_THREADS = "8"
PARALLEL_MAKE = "-j 8"
# 解决 GitHub 下载慢的问题,开启 8 线程下载
PREFERRED_PROVIDER_aria2 = "aria2"
FETCHCMD_aria2 = "/usr/bin/aria2c -c -m 0 -x 8 -s 8 -k 1M --timeout=30 --allow-overwrite=true --check-certificate=false -d ${DL_DIR} -o ${FILE} ${URI}"
# 内存占用限制(防 OOM)
BB_MEMORY_LIMIT = "12G"
# 开启 sstate 缓存(加速二次编译)
SSTATE_DIR ?= "${TOPDIR}/sstate-cache"
DL_DIR ?= "${TOPDIR}/downloads"
# 启用 debug 信息(方便 OEM 调试)
# EXTRA_IMAGE_FEATURES += "dbg-pkgs"
# 1. 清华 TUNA 镜像 (基础镜像)
SOURCE_MIRROR_URL = "https://mirrors.tuna.tsinghua.edu.cn/git/openbmc/openbmc.git"
INHERIT += "own-mirrors"
# 2. kkgithub 镜像 (归档包下载,优先级最高)
SRC_URI_PREMIRROR:prepend = " \
https://github.com/.*/.*/archive/.*\.tar\.gz https://kkgithub.com/\$\{MATCH\}; \
https://github.com/.*/.*/archive/.*\.zip https://kkgithub.com/\$\{MATCH\}; \
"
# 3. gitclone 镜像 (Git 克隆)
SRC_URI_PREMIRROR:append = " \
git://github.com/ git://gitclone.com/github.com/ \n \
https://github.com/ https://gitclone.com/github.com/ \n \
"
注意:在我们使用qemu仿真学习过程中EXTRA_IMAGE_FEATURES += "dbg-pkgs"选项需要注释掉,否则构建包的时候会因为包的大小超过机型配置文件中的大小而构建失败。
执行编译构建(注意:首次编译需下载软件包,用时较长,请耐心等待)。
编译构建:
bitbake obmc-phosphor-image
在构建过程中,你会发现有些 do_fetch 任务执行缓慢,原因是对应组件的配方文件中配置的 SRC_URI 的网站是各种境外 url ,访问下载的时候网速会很慢,这里我们可以将其替换成 github 对应的项目 url ,可以大大提高构建速度。
命令执行完成后,会在 ‘tmp/deploy/images/evb-ast2600’ 目录下,生成 u-boot 、内核、文件系统、mtd 格式镜像等文件
进入 OpenBMC 编译构建的目录,将 mtd 格式的 bmc 固件包,烧录到 BMC 卡的 flash。启动 BMC 系统,即可测试 BMC 的功能。同样我们也可以使用 qemu 仿真去访问 bmc 。 可以使用下面的命令去下载 qemu 工具到 openbmc 目录下(下载最快的方式是用浏览器访问下载链接,下载完成后复制到 linux 中)。
wget https://jenkins.openbmc.org/job/latest-qemu-x86/lastSuccessfulBuild/artifact/qemu/build/qemu-system-arm
或者
aria2c -x 8 -s 8 https://jenkins.openbmc.org/job/latest-qemu-x86/lastSuccessfulBuild/artifact/qemu/build/qemu-system-arm
然后可以吧对应的包 obmc-phosphor-image-evb-ast2600.static.mtd 也复制到 openbmc 目录下,然后进入 openbmc 目录使用如下命令启动 qemu 仿真 bmc 环境
./qemu-system-arm -m 1024 -M ast2600-evb -drive file=obmc-phosphor-image-evb-ast2600.static.mtd,format=raw,if=mtd -nographic -net nic -net user,hostfwd=tcp::2222-:22,hostfwd=tcp::2623-:623,hostfwd=tcp::8080-:443

如上图所示, u-boot 启动成功后,就进入了 bmc 的系统中。输入用户名:root,密码:0penBmc,就可以登录进去了。也可以使用浏览器访问 https://localhost:8080/ 进入 bmc 的 web 界面。

也可通过终端远程连接

OpenBMC 开发与调试
OpenBMC 通常使用补丁(patch)的形式,增加新功能、修复 bug。但在开发中,需要在补丁发布前,就能把代码集成到 OpenBMC 做测试验证。为解决前后的依赖问题,OpenBMC 使用 Yocto 自带的 devtool 工具,为 OpenBMC 开发者提供了快捷的代码修改方式。
通常按照下面的步骤,即可对某一软件包的代码做修改:
修改某一软件包
devtool modify <recipe>
进入源码目录,修改代码
cd build/workspace/sources/<recipe>
编译构建 BMC 固件
bitbake obmc-phosphor-image
将 mtd 格式的固件烧录到 BMC 的 flash,启动 BMC 系统,可测试修改功能是否达到预期。若实现了预期的要求,可使用 “git format-patch” 命令,创建补丁。然后将补丁单独放置到软件包 “recipe” 所在的目录,使用命令重置本地修改(重置某一软件包:devtool reset
浙公网安备 33010602011771号