使用 OpenBMC SDK 實現 "Hello World"
阿新 • • 發佈:2021-12-08
使用 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 [email protected]:/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
中運行了它!