1. 程式人生 > 其它 >使用 OpenBMC SDK 實現 "Hello World"

使用 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 [email protected]:/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 中運行了它!