使用 OpenBMC SDK 实现 "Hello World"

使用 OpenBMC 的 SDK 实现 hello word

内容: 从头开始编译汇编并在 QEMU 中运行 OpenBMC 应用
受众: 完成开发环境设置 配置文档

克隆并构建一个仓库

本文档使用 openbmc/phosphor-state-manager 仓库。为了保证你的仓库组织结构,将它们放到一个通用的目录下,比如 ~/Code/ 下。

  1. 克隆仓库
    git clone https://github.com/openbmc/phosphor-state-manager.git
    
  2. 添加打印 Hello World 代码
    cd phosphor-state-manager
    vi bmc_state_manager_main.cpp
    
    在添加代码后,你的 diff 看起来会像如下
    +#include <iostream> 
     int main(int argc, char**)
     {
    @@ -17,6 +18,8 @@ int main(int argc, char**)
    
        bus.request_name(BMC_BUSNAME);
    
    +    std::cout<<"Hello World" <<std::endl;
    +
         while (true)
         {
    
  3. 编译仓库
    这个仓库是基于 meson,因此执行如下命令
    meson build
    ninja -C build
    

将应用载入到 QEMU

  1. 瘦身生成的内容
    OpenBMC 是一个嵌入式环境,因此最好载入最小的应用/二进制文件
    arm-openbmc-linux-gnueabi-strip phosphor-bmc-state-manager
    
  2. 为你的应用创建一个安全的文件系统
    现在是时候载入你的 Hello World 应用到 QEMU 虚拟环境中了。OpenBMC 覆写 PATH 变量,来使其首先查看 /usr/local/bin/中的内容,因此,只需简单的 scp 你的应用到 /usr/loacl/bin 中,运行它就可以了。这在命令行测试下十分有效,但是当你想要通过 systemd 服务启动你的应用时,将会遇到问题,因为应用路径在服务文件是硬编码的。让我们看看专业人员如何操作,创建一个叠加文件系统。叠加将会节省你的时间与精力。不再需要重命名、恢复原始文件,不再有遗忘你在 debug 过程中使用的文件,因此,也不再需要搭建你的系统。登录到 QEMU 示例,然后运行这些命令。
  3. scp 这个二进制文件到 QEMU 实例
    如果你启动 QEMU 时,使用了默认端口,那么如下命令可以直接在你的 phosphor-state-manager 目录下执行,如果你选择你自己的端口,那么使用自己的端口号替换默认端口 2222:
    scp -P 2222 phosphor-bmc-state-manager root@127.0.0.1:/usr/bin/
    

QEMU 中运行应用

  1. 终止 BMC 的状态管理服务
    systemctl stop xyz.openbmc_project.State.BMC.service
    
  2. QEMU 会话中运行你的应用
    phosphor-bmc-state-manager
    
    你将会看到你的 Hello World 打印信息。按下 ^C 终止这个应用。这不是你测试新应用的正规方法。一般应该使用 systemd 服务
  3. 通过 systemd 服务启动应用
    OpenBMC 使用 systemd 来管理它的应用。后面会有相关的教程,现在,只需要简单的运行如下的命令来重启 BMC 状态管理服务,来查看它是否有使用你的新的应用:
    systemctl restart xyz.openbmc_project.State.BMC.service
    
    因为 systemd 启动了你的服务,Hello World 不会打印到你的终端中,但是这些内容会出现在日志中。在后面的教程中会具体讨论日志相关内容,现在只需要简单运行如下命令:
    journalctl | tail
    
    在其中的一条日志中会看到类似下面的内容:
    <date> romulus phosphor-bmc-state-manager[1089]: Hello World
    

到此就结束了!你定制化一个 BMC 应用,使用 SDK 编译它,并在 QEMU 中运行了它!

posted @ 2021-12-08 21:17  ArvinDu  阅读(1248)  评论(0编辑  收藏  举报