使用 OpenBMC SDK 实现 "Hello World"
使用 OpenBMC 的 SDK 实现 hello word
内容: 从头开始编译汇编并在 QEMU 中运行 OpenBMC 应用
受众: 完成开发环境设置 配置文档
克隆并构建一个仓库
本文档使用 openbmc/phosphor-state-manager 仓库。为了保证你的仓库组织结构,将它们放到一个通用的目录下,比如 ~/Code/ 下。
- 克隆仓库
git clone https://github.com/openbmc/phosphor-state-manager.git - 添加打印
Hello World代码
在添加代码后,你的cd phosphor-state-manager vi bmc_state_manager_main.cppdiff看起来会像如下+#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) { - 编译仓库
这个仓库是基于meson,因此执行如下命令meson build ninja -C build
将应用载入到 QEMU 中
- 瘦身生成的内容
OpenBMC是一个嵌入式环境,因此最好载入最小的应用/二进制文件arm-openbmc-linux-gnueabi-strip phosphor-bmc-state-manager - 为你的应用创建一个安全的文件系统
现在是时候载入你的Hello World应用到QEMU虚拟环境中了。OpenBMC覆写PATH变量,来使其首先查看/usr/local/bin/中的内容,因此,只需简单的scp你的应用到/usr/loacl/bin中,运行它就可以了。这在命令行测试下十分有效,但是当你想要通过systemd服务启动你的应用时,将会遇到问题,因为应用路径在服务文件是硬编码的。让我们看看专业人员如何操作,创建一个叠加文件系统。叠加将会节省你的时间与精力。不再需要重命名、恢复原始文件,不再有遗忘你在debug过程中使用的文件,因此,也不再需要搭建你的系统。登录到QEMU示例,然后运行这些命令。 scp这个二进制文件到QEMU实例
如果你启动QEMU时,使用了默认端口,那么如下命令可以直接在你的phosphor-state-manager目录下执行,如果你选择你自己的端口,那么使用自己的端口号替换默认端口2222:scp -P 2222 phosphor-bmc-state-manager root@127.0.0.1:/usr/bin/
在 QEMU 中运行应用
- 终止
BMC的状态管理服务systemctl stop xyz.openbmc_project.State.BMC.service - 在
QEMU会话中运行你的应用
你将会看到你的phosphor-bmc-state-managerHello World打印信息。按下^C终止这个应用。这不是你测试新应用的正规方法。一般应该使用systemd服务 - 通过
systemd服务启动应用
OpenBMC使用systemd来管理它的应用。后面会有相关的教程,现在,只需要简单的运行如下的命令来重启BMC状态管理服务,来查看它是否有使用你的新的应用:
因为systemctl restart xyz.openbmc_project.State.BMC.servicesystemd启动了你的服务,Hello World不会打印到你的终端中,但是这些内容会出现在日志中。在后面的教程中会具体讨论日志相关内容,现在只需要简单运行如下命令:
在其中的一条日志中会看到类似下面的内容:journalctl | tail<date> romulus phosphor-bmc-state-manager[1089]: Hello World
到此就结束了!你定制化一个 BMC 应用,使用 SDK 编译它,并在 QEMU 中运行了它!
浙公网安备 33010602011771号