系統 Inventory — OpenBMC 如何自動「長出」整台機器?

更新 發佈閱讀 7 分鐘

我覺得這個標題名稱取得有點好笑,但是在我還不認識Entity-manager之前,我心中的疑問確實是...它們怎麼長出來的?!而它們就是我在Dbus上會看到的我系統上不同的板子,或者Devices...etc. 總之各自是一個Field Replace Unit。Entity Manager從字面上的翻譯,你大概可以猜到他在管理所有的Entity。如果再更深入一點往下看,你會發現他要可以:掃描硬體、分析 FRU、管理 Inventory、動態產生物件、觸發其他 daemon以及維護一份「整台機器的配置」。

它是怎麼做到這些的?

開機時,entity-manager 手上只有「設計圖」

當 BMC 剛 boot 起來,entity-manager 起身運作時,它其實對硬體一無所知。它手上只有:

  1. configurations/*.json (建議大家去這個目錄底下,認真的看一看...會發現很多寶物)
    由平台提供,描述「我期待有哪些硬體」。像這裡的 Motherboard FRU 就是其中一筆。(這個Probe資訊在json檔案的最底下)
"Name": "Yosemite5 MB",
"Probe": "xyz.openbmc_project.FruDevice({'PRODUCT_PRODUCT_NAME': 'Yosemite V5 .*', 'BOARD_PRODUCT_NAME': 'Motherboard', 'BOARD_MANUFACTURER': '(Quanta|Wiwynn)'})",
"Type": "Board",
"xyz.openbmc_project.Inventory.Decorator.Asset": {
"BuildDate": "$BOARD_MANUFACTURE_DATE",
"Manufacturer": "$BOARD_MANUFACTURER",
"Model": "$BOARD_PRODUCT_NAME",
"PartNumber": "$BOARD_PART_NUMBER",
"SerialNumber": "$BOARD_SERIAL_NUMBER",
"SparePartNumber": "$BOARD_INFO_AM1"
},

"xyz.openbmc_project.Inventory.Decorator.AssetTag": {
"AssetTag": "$PRODUCT_ASSET_TAG"
}

2. /etc/phosphor-middleware/configurations(可覆蓋)

  1. runtime cache:/var/configuration/system.json
    上一輪掃描後留下的系統快照。但這些都只是「期望」,不是真實世界。entity-manager 的任務不是盲目地把 JSON 映射到 Inventory,而是要 先去外面跑一圈,看機器上實際有哪些 D-Bus 物件存在。只有當 JSON 的 Probe 跟 D-Bus 上的實際屬性吻合時,它才會說:「喔,原來這就是我 JSON 裡那塊 Motherboard。」

Probe:設定檔與真實硬體的連結

每一筆 configuration record 裡最重要的欄位是:

"Probe": "xyz.openbmc_project.FruDevice({...})"

這一行的意義非常重大:

Probe 是「我要去哪裡找這個設備,以及我要如何判斷它是它」。

以 Motherboard FRU 為例,我們用 regex 規範:

  • PRODUCT_PRODUCT_NAME:要是 Yosemite V5 開頭
  • BOARD_PRODUCT_NAME:要是 Motherboard
  • BOARD_MANUFACTURER:要符合 Quanta 或 Wiwynn

如果這三項都符合,就認定:「這個 D-Bus 的 FruDevice,就是 Yosemite V5 的 Motherboard。」entity-manager 不會自己發明創造出任何資訊,它全部都要從 D-Bus 的 GetAll 的 FRU 欄位拿資料。

BMC 上的 FRU 是怎麼出現在 D-Bus 上的?

看完前面那段,如果你知道product name, manufacturer ....etc是什麼?那真是萬幸!如果你並不知道,那你應該會感覺你看了一段廢話。好,總之,每個FRU (Field Replace Unit) 都會有他的一些出廠資訊,這個資訊會來說明他是誰?就像...你的身分證。這個東西會被存在板子或該硬體上的EEPROM,出廠之後理論上就不能被修改了,除非...某些原因。而上述的Probe就是OpenBMC嘗試在設定檔裡面告訴韌體,你再開機的時候要怎麼知道你系統上會有的硬體是誰?符合我在設定檔中告訴你的這些規則的就是我們在找的FRU。

回頭想想,那系統開機的時候肯定有人把FRU的資訊從硬體讀到BMC這兒~不然在做Probe的時候, 要拿什麼資訊跟設定檔的規則做比較??

在Entity-manager底下有一個目錄叫做fru-device,fru_device 是獨立的 systemd 服務(xyz.openbmc_project.FruDevice),在 BMC 上電後及早啟動,讓 Inventory 先建立 FRU 資訊。

你先想像,程式會從 I²C、EEPROM、MCTP 或其他來源讀出 FRU raw data,然後解析成 key/value pair,最後在 D-Bus 上建立:

/xyz/openbmc_project/FruDevice/board0
/xyz/openbmc_project/FruDevice/chassis
/xyz/openbmc_project/FruDevice/nic0
/xyz/openbmc_project/FruDevice/dcscm0

並提供 interface:

xyz.openbmc_project.FruDevice

底下是一堆 property,例如:

  • PRODUCT_PRODUCT_NAME
  • BOARD_PRODUCT_NAME

(詳細的fru-device這支service,我們再找個時間細聊。)

今天就先聊到這邊啦~我們下集見!
喜歡我的OpenBMC系列文章,想鼓勵我繼續寫下去的朋朋,可以留言給我一些評論和指導,覺得不錯也可以請我喝杯咖費贊助我窩在咖啡廳寫文章的摳摳喔!甘溫 :)

留言
avatar-img
留言分享你的想法!
avatar-img
L'Angolo di Embedded
6會員
17內容數
這裡會有一些我對於OpenBMC, Embedded Software的學習與經驗分享, 本來只在Line社群跟大家互動, 但是有夥伴提出想要看到歷史文章的需求, 於是我決定把它放到這裡, 努力磨練自己的技術和文筆。
L'Angolo di Embedded 的其他內容
2025/11/10
本文以 Yocto 與 OpenBMC 為例,說明如何建立新專案 layer,如 meta-taiwanno1,並解釋 layer.conf、bblayers.conf.sample、machine.conf 與 image 設定的作用,幫助讀者理解從零打造專屬 BMC 平台的流程與關鍵設定。
2025/11/10
本文以 Yocto 與 OpenBMC 為例,說明如何建立新專案 layer,如 meta-taiwanno1,並解釋 layer.conf、bblayers.conf.sample、machine.conf 與 image 設定的作用,幫助讀者理解從零打造專屬 BMC 平台的流程與關鍵設定。
2025/11/03
OpenBMC 貢獻的痛點在此公開。這份報告將官方英文規範(Anti-patterns)系統化地整理為中文教學,解析 CLI、DBus、Logging 等十大常見錯誤。無論是新手入門或資深開發者,這都是提升程式碼品質、加速 Upstream 審核的必讀指南。強烈推薦!(去讀原文)
2025/11/03
OpenBMC 貢獻的痛點在此公開。這份報告將官方英文規範(Anti-patterns)系統化地整理為中文教學,解析 CLI、DBus、Logging 等十大常見錯誤。無論是新手入門或資深開發者,這都是提升程式碼品質、加速 Upstream 審核的必讀指南。強烈推薦!(去讀原文)
2025/10/27
這篇文章以實作角度解析 PLDM 的 Instance ID 機制,說明其如何分配、鎖定與釋放,並以簡潔 C++ 範例揭示跨 process 同步設計,帶領讀者理解背後的系統穩定性原理。
2025/10/27
這篇文章以實作角度解析 PLDM 的 Instance ID 機制,說明其如何分配、鎖定與釋放,並以簡潔 C++ 範例揭示跨 process 同步設計,帶領讀者理解背後的系統穩定性原理。
看更多
你可能也想看
Thumbnail
TPMS(胎壓偵測器)或許是許多人相對陌生的領域,但它屬於ADAS系統中的其中一部分,只要新車配備ADAS系統,就需要TPMS,因此它有相當穩固的市場來源,作為這個市場的「挑戰者」系統電,成長動能在哪裡呢? 就讓我們看下去吧!!!
Thumbnail
TPMS(胎壓偵測器)或許是許多人相對陌生的領域,但它屬於ADAS系統中的其中一部分,只要新車配備ADAS系統,就需要TPMS,因此它有相當穩固的市場來源,作為這個市場的「挑戰者」系統電,成長動能在哪裡呢? 就讓我們看下去吧!!!
Thumbnail
題目敘述 題目會給我們一個定義好的類別和function介面,要求我們實作建構子和ping() function來滿足指定的需求。 RecentCounter類別的建構子 建構子應該初始化來電紀錄,內容為空(零筆資料) int ping(int t) t代表來電時刻,單位是毫秒m
Thumbnail
題目敘述 題目會給我們一個定義好的類別和function介面,要求我們實作建構子和ping() function來滿足指定的需求。 RecentCounter類別的建構子 建構子應該初始化來電紀錄,內容為空(零筆資料) int ping(int t) t代表來電時刻,單位是毫秒m
Thumbnail
題目敘述 題目會給定兩個輸入。 第一個輸入是關鍵字清單products,第二個是使用者輸入的字串searchWord。 要求我們實現關鍵字搜尋建議系統,使用者每輸入一個字元就推薦一次。 推薦時,優先返回字典序(Lecial order)最接近的關鍵字,最多不要超過三個關鍵字。 題目的原文
Thumbnail
題目敘述 題目會給定兩個輸入。 第一個輸入是關鍵字清單products,第二個是使用者輸入的字串searchWord。 要求我們實現關鍵字搜尋建議系統,使用者每輸入一個字元就推薦一次。 推薦時,優先返回字典序(Lecial order)最接近的關鍵字,最多不要超過三個關鍵字。 題目的原文
Thumbnail
題目敘述 題目的情境是設計並且實現一個包含所有正整數的數據流,以set集合的方式存在。 數據流 = {1, 2, 3, 4, ..., ∞} 要求我們去實現定義好的function介面: SmallestInfiniteSet()建構子,初始化這個包含所有正整數的數據流。 int po
Thumbnail
題目敘述 題目的情境是設計並且實現一個包含所有正整數的數據流,以set集合的方式存在。 數據流 = {1, 2, 3, 4, ..., ∞} 要求我們去實現定義好的function介面: SmallestInfiniteSet()建構子,初始化這個包含所有正整數的數據流。 int po
Thumbnail
題目敘述 題目會給我們一組定義好的界面和需求,要求我們設計一個資料結構,可以滿足平均O(1)的插入元素、刪除元素、隨機取得元素的操作。 RandomizedSet() 類別建構子 bool insert(int val) 插入元素的function界面 bool remove(int val
Thumbnail
題目敘述 題目會給我們一組定義好的界面和需求,要求我們設計一個資料結構,可以滿足平均O(1)的插入元素、刪除元素、隨機取得元素的操作。 RandomizedSet() 類別建構子 bool insert(int val) 插入元素的function界面 bool remove(int val
Thumbnail
面對問題,我們常說對事不對人,但偏偏「很多事」都是因人而起,也需要人來執行解決的事項,怎麼可能「只對事不對人」呢? 於是【如何對事也對人】這議題,就顯得相當重要? 這也是過往我對於系統思考的疑慮,因為幾年前我參加一場相關的線上直播課程,總覺得用一張圖拆解與分析事情的因果很有效,但最終內心都會有種
Thumbnail
面對問題,我們常說對事不對人,但偏偏「很多事」都是因人而起,也需要人來執行解決的事項,怎麼可能「只對事不對人」呢? 於是【如何對事也對人】這議題,就顯得相當重要? 這也是過往我對於系統思考的疑慮,因為幾年前我參加一場相關的線上直播課程,總覺得用一張圖拆解與分析事情的因果很有效,但最終內心都會有種
Thumbnail
哈囉!大家好,我們繼續來到第二回系統思考的分享,今天要來談談這張我超愛的『問題分析矩陣圖』! 《MIT系統思考力:用圖像溝通解決複雜問題》 連結:https://bit.ly/48dcFH6 專屬折扣碼:YILIN300 (使用期限至10/31,限MIT系統思考力使用) 薛喬仁老師針對問
Thumbnail
哈囉!大家好,我們繼續來到第二回系統思考的分享,今天要來談談這張我超愛的『問題分析矩陣圖』! 《MIT系統思考力:用圖像溝通解決複雜問題》 連結:https://bit.ly/48dcFH6 專屬折扣碼:YILIN300 (使用期限至10/31,限MIT系統思考力使用) 薛喬仁老師針對問
Thumbnail
▋九月系統思考代言人,一起來翻轉你的思考方式吧! 上個月超級開心收到天下學習找我合作推廣 薛喬仁老師的線上課:「MIT系統思考力──用圖像溝通解決複雜問題」。 《MIT系統思考力:用圖像溝通複雜問題》 連結:https://bit.ly/48dcFH6 專屬折扣碼:YILIN300 (使用期
Thumbnail
▋九月系統思考代言人,一起來翻轉你的思考方式吧! 上個月超級開心收到天下學習找我合作推廣 薛喬仁老師的線上課:「MIT系統思考力──用圖像溝通解決複雜問題」。 《MIT系統思考力:用圖像溝通複雜問題》 連結:https://bit.ly/48dcFH6 專屬折扣碼:YILIN300 (使用期
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News