使用 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 root@127.0.0.1:/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 中運行了它!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM