使用 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.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) {
- 編譯倉庫
這個倉庫是基於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-manager
Hello World
打印信息。按下^C
終止這個應用。這不是你測試新應用的正規方法。一般應該使用systemd
服務 - 通過
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
中運行了它!