系統 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
L'Angolo di Embedded
25會員
26內容數
這裡會有一些我對於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
面對問題,我們常說對事不對人,但偏偏「很多事」都是因人而起,也需要人來執行解決的事項,怎麼可能「只對事不對人」呢? 於是【如何對事也對人】這議題,就顯得相當重要? 這也是過往我對於系統思考的疑慮,因為幾年前我參加一場相關的線上直播課程,總覺得用一張圖拆解與分析事情的因果很有效,但最終內心都會有種
Thumbnail
面對問題,我們常說對事不對人,但偏偏「很多事」都是因人而起,也需要人來執行解決的事項,怎麼可能「只對事不對人」呢? 於是【如何對事也對人】這議題,就顯得相當重要? 這也是過往我對於系統思考的疑慮,因為幾年前我參加一場相關的線上直播課程,總覺得用一張圖拆解與分析事情的因果很有效,但最終內心都會有種
Thumbnail
哈囉!大家好,我們繼續來到第二回系統思考的分享,今天要來談談這張我超愛的『問題分析矩陣圖』! 《MIT系統思考力:用圖像溝通解決複雜問題》 連結:https://bit.ly/48dcFH6 專屬折扣碼:YILIN300 (使用期限至10/31,限MIT系統思考力使用) 薛喬仁老師針對問
Thumbnail
哈囉!大家好,我們繼續來到第二回系統思考的分享,今天要來談談這張我超愛的『問題分析矩陣圖』! 《MIT系統思考力:用圖像溝通解決複雜問題》 連結:https://bit.ly/48dcFH6 專屬折扣碼:YILIN300 (使用期限至10/31,限MIT系統思考力使用) 薛喬仁老師針對問
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
題目敘述 題目會給定兩個輸入。 第一個輸入是關鍵字清單products,第二個是使用者輸入的字串searchWord。 要求我們實現關鍵字搜尋建議系統,使用者每輸入一個字元就推薦一次。 推薦時,優先返回字典序(Lecial order)最接近的關鍵字,最多不要超過三個關鍵字。 題目的原文
Thumbnail
題目敘述 題目會給定兩個輸入。 第一個輸入是關鍵字清單products,第二個是使用者輸入的字串searchWord。 要求我們實現關鍵字搜尋建議系統,使用者每輸入一個字元就推薦一次。 推薦時,優先返回字典序(Lecial order)最接近的關鍵字,最多不要超過三個關鍵字。 題目的原文
Thumbnail
TPMS(胎壓偵測器)或許是許多人相對陌生的領域,但它屬於ADAS系統中的其中一部分,只要新車配備ADAS系統,就需要TPMS,因此它有相當穩固的市場來源,作為這個市場的「挑戰者」系統電,成長動能在哪裡呢? 就讓我們看下去吧!!!
Thumbnail
TPMS(胎壓偵測器)或許是許多人相對陌生的領域,但它屬於ADAS系統中的其中一部分,只要新車配備ADAS系統,就需要TPMS,因此它有相當穩固的市場來源,作為這個市場的「挑戰者」系統電,成長動能在哪裡呢? 就讓我們看下去吧!!!
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
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
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
▋九月系統思考代言人,一起來翻轉你的思考方式吧! 上個月超級開心收到天下學習找我合作推廣 薛喬仁老師的線上課:「MIT系統思考力──用圖像溝通解決複雜問題」。 《MIT系統思考力:用圖像溝通複雜問題》 連結:https://bit.ly/48dcFH6 專屬折扣碼:YILIN300 (使用期
Thumbnail
▋九月系統思考代言人,一起來翻轉你的思考方式吧! 上個月超級開心收到天下學習找我合作推廣 薛喬仁老師的線上課:「MIT系統思考力──用圖像溝通解決複雜問題」。 《MIT系統思考力:用圖像溝通複雜問題》 連結:https://bit.ly/48dcFH6 專屬折扣碼:YILIN300 (使用期
Thumbnail
題目敘述 題目會給我們一個定義好的類別和function介面,要求我們實作建構子和ping() function來滿足指定的需求。 RecentCounter類別的建構子 建構子應該初始化來電紀錄,內容為空(零筆資料) int ping(int t) t代表來電時刻,單位是毫秒m
Thumbnail
題目敘述 題目會給我們一個定義好的類別和function介面,要求我們實作建構子和ping() function來滿足指定的需求。 RecentCounter類別的建構子 建構子應該初始化來電紀錄,內容為空(零筆資料) int ping(int t) t代表來電時刻,單位是毫秒m
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
題目敘述 題目的情境是設計並且實現一個包含所有正整數的數據流,以set集合的方式存在。 數據流 = {1, 2, 3, 4, ..., ∞} 要求我們去實現定義好的function介面: SmallestInfiniteSet()建構子,初始化這個包含所有正整數的數據流。 int po
Thumbnail
題目敘述 題目的情境是設計並且實現一個包含所有正整數的數據流,以set集合的方式存在。 數據流 = {1, 2, 3, 4, ..., ∞} 要求我們去實現定義好的function介面: SmallestInfiniteSet()建構子,初始化這個包含所有正整數的數據流。 int po
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News