使用 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 中運行了它!
