🌳 OpenBMC 技能樹

更新 發佈閱讀 9 分鐘

Ciao, 寫給還在韌體底層摸黑仍然沒有放棄的你們 ☕🇮🇹

很開心這段時間我在義大利生活,透過「大大帶我飛」這個平台,有機會認識許多認真準備投入韌體工程師的你們。看著你們努力學習、提問、準備轉職或甚至剛畢業要投入職場,我心裡有一種熟悉的悸動:那些我走過、犯錯過、也摸索過的階段,如果能在記憶還新鮮時,把一些對大家有幫助的經驗分享出來,也許可以縮短大家的疼痛期。

於是某天,坐在佛羅倫斯街角的咖啡館,我就這樣打開電腦,寫下這封電子報。

目前我正在義大利進修 art & design,課業安排比較緊湊,暫時還無法寫長篇的技術文章,但我希望用簡短、實用、專注的內容,陪伴你們在這個學習的路上。

By 摸黑了這麼多年還在摸黑還沒有放棄的我 Bonnie ( •̀ᴗ•́ )و ̑̑

  • 基礎語言能力
    • C
    • C++
    • Python/Shell scripting

💡 Bonnie 的職場記憶~

U-Boot 和 Linux Kernel 都是使用 C 語言撰寫的,加上我們在免費諮詢時聊過的 OpenBIC,它也是一種基於 RTOS 的韌體,同樣是用 C 語言開發的。對我來說,C 語言是一切系統層開發的基礎,也奠定了後續理解其他程式語言的根本。
因此我會特別建議大家,尤其是跨科系或轉領域的朋友,一定要把 C 語言的基礎打穩。
至於 C++,我就不多說了。如果你曾經打開過 OpenBMC 的程式碼倉庫,會發現其中有不少 Repository(像是 entity-manager、dbus-sensor、bmcweb, phosphor-logging 等)就是用 C++ 撰寫的。這些模組需要較完整的物件導向設計、錯誤處理與資源管理,C++ 在這類結構化服務中非常常見。

最後是 Python 和 Shell Script。OpenBMC 在早期開發階段,為了快速讓韌體具備必要的功能,許多 script 是直接用 Python 或 Shell 撰寫的。這類直譯式語言開發速度快、debug 也方便,非常適合 prototyping。

但隨著功能逐漸複雜,效率問題也開始浮現,因此後來許多原本用 Python 撰寫的功能,會陸續被換成 C 或 C++ 版本,以提升效能與維護穩定度。

那你可能會問:「那 Python 和 Shell Script 現在還有用嗎?」
答案是:當然有!

每一位 Firmware Developer 在完成一項功能後,都需要撰寫 Unit Test,而在整體 Firmware Release 之前,也會進行 Sanity Test、Long-Term Stress Test 等自動化測試。這些測試流程,大多數仍是使用 Python 或 Shell Script 來撰寫的。

所以,即使不是主角,Python 與 Shell 還是每位韌體工程師不可或缺的配角

  • Linux 與開發環境
    • Linux kernel and Driver
    • U-Boot bootloader 基本使用與修改
    • Yocto Project 結構與使用(Poky、BitBake、meta layer)
    • Zephry Project 使用

💡 Bonnie 的職場記憶~

實際上,Linux kernel 的驅動程式多半由 IC 廠商kernel.org 上的維護者負責開發與維護。然而,不同專案在應用同一顆晶片時,會有各自的客製需求。雖然我們不會要求剛入行的工程師必須對 Linux kernel 有深入了解,或能完全讀懂所有 driver 的實作,但在工作中,確實會遇到需要 debug kernel driver、甚至擴充 driver 功能的情況喔!

值得一提的是,Linux kernel 的版本一直在快速演進 ——現在已經來到 6.x,我剛進公司開始改 driver 的時候,還是2.x 呢(lol)。版本升級帶來許多好處,像是更新的 API、新功能與效能改善,但同時也意味著我們得不斷學習新版 API 的用法,並提防潛藏的 bug…(避雷真的很重要!

至於U-Boot被修改的機率相對更低。我目前遇過的修改情境,多數是透過Patch 的形式,放在專案對應的 Project Layer 裡。這種做法的好處是能避免影響其他專案,但壞處是——當 Patch 累積太多,又遇到 U-Boot 的大版本升級時,維護就會變得非常痛苦。因為 Patch 不一定能順利套用回新版,你可能會面臨「10 個 Patch 全部炸掉要一個一個修」的慘況,那絕對是工程師的夢魘之一…。

  • 硬體通訊 Bus and Protocol
    • I2C、I3C、SPI、UART、eSPI、JTAG、GPIO 等基礎通訊原理與 device 驅動
    • Debug 工具使用
    • PMBus / IPMB / SMBus / PCIe / NVMe 等常見通訊介面理解

💡 Bonnie 的職場記憶~

看到我列了這麼多通訊協定,你可能會想:「這麼多,我怎麼學得完?」 確實,這是一個很常見的反應。(;・∀・) 但別擔心,我會建議你從一個歷史悠久、幾乎每個專案都會用到的通訊協定開始學起,例如 I2C。 為什麼從它開始?因為它夠穩定、夠普遍,而且網路上的教學與踩雷心得也特別多。前輩們該踩的坑大概都幫你踩過了,你可以一邊讀 SPEC、一邊對照網路教學,來確認自己的理解程度,也順便看看你對這類技術的學習是否感興趣。

如果你已經有一點基礎,我推薦接著看 I3C,它是 I2C 的延伸版本,也是目前越來越多專案會用到的新協定。(我出來國外遊蕩前, 最後一段時間在公司都在處理I3C的各種bug….啊~多麼痛的領悟~QQ)。另外,如果你的專案搭配的是 Intel 的 CPU,那 eSPI 絕對不能錯過,這也是嵌入式系統裡相當重要的一塊。至於像 PMBus、IPMB 等協定,它們本質上都還是走 I2C bus,難度不高,但也是工作中常見的技術,屬於「食之無味、棄之可惜」的類型。有空可以順便了解,沒空也不用太焦慮。

最後是GPIO,其實你只需要知道一件事: **每顆晶片都會有一堆 IO pin,這些就是硬體的輸入/輸出訊號線路。**想要深入理解?**直接去讀你手上那顆 chip 的 SPEC 就對了。**這塊比較特殊,因為實作上很依賴手邊的硬體資源。除非你有像 Raspberry Pi 這樣的設備可以實際動手玩,否則 GPIO 我覺得也沒有非常必要深入學習。

  • 管理協定與伺服器平台標準
    • IPMI 2.x(SOL、FRU)
    • Redfish(RESTful 介面、API 操作以及HTTP methods)
    • PLDM / MCTP / SPDM 協議(DMTF 規格理解與應用)

💡 Bonnie 的職場記憶~

這邊的內容並不涉及太多硬體相關的知識與實作,我會留到之後的電子報中再逐步介紹,這邊就不先展開啦~而最常被問到的一個問題是:

IPMI 跟 Redfish 到底有什麼不同啊???(黑人問號)

其實這個問題,就有點像你問我:「Linux 的 shell 指令跟滑鼠點兩下操作有什麼不同?」

我的回答會是 —— 他們本質上都是「使用者操作介面」,只是方式不同。

      • IPMI:偏向傳統、指令式的操作方式。
      • Redfish:則是近年興起、設計得更人性化的介面,屬於 RESTful API 架構,操作上更貼近現代軟體工程的語言和習慣。

目前大多數的大企業客戶,都已經逐漸轉向使用 Redfish,所以如果你打算自學,我會建議從 Redfish 開始了解,會比較符合現在與未來的需求趨勢。

不過如果你是習慣循序漸進、先建立基礎觀念的人,也可以從 IPMI 入門,再來理解 Redfish 如何在它的基礎上做了哪些改進與設計。

  • 編譯與 CI/CD 流程工具
    • Git / Gerrit 工作流程
    • Jenkins / GitHub Actions
    • Unit test framework
    • Kernel Contribution Rule
  • Debug 與系統驗證
    • Bring-up 初始測試流程
    • IPMI tool / redfish-client 等工具實測操作
    • Log 檢查與除錯流程設計
    • 自動化測試腳本撰寫與驗證邏輯設計
留言
avatar-img
L'Angolo di Embedded
23會員
26內容數
這裡會有一些我對於OpenBMC, Embedded Software的學習與經驗分享, 本來只在Line社群跟大家互動, 但是有夥伴提出想要看到歷史文章的需求, 於是我決定把它放到這裡, 努力磨練自己的技術和文筆。
你可能也想看
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
這篇文章探討了工程師在如何有效提升自己,強調不僅僅是多coding,而是要對程式碼有更深層的理解。隨著職涯發展,工程師需要從單純的技術執行者轉變為團隊領導者,具備解決複雜問題和與他人有效溝通的能力。
Thumbnail
這篇文章探討了工程師在如何有效提升自己,強調不僅僅是多coding,而是要對程式碼有更深層的理解。隨著職涯發展,工程師需要從單純的技術執行者轉變為團隊領導者,具備解決複雜問題和與他人有效溝通的能力。
Thumbnail
這篇內容,將會講解什麼是表達式(Expression),什麼是陳述式(Statement)。有了這些概念,各位會更容易理解,要如何設計程式碼。
Thumbnail
這篇內容,將會講解什麼是表達式(Expression),什麼是陳述式(Statement)。有了這些概念,各位會更容易理解,要如何設計程式碼。
Thumbnail
程式設計與技術能力 在現代社會中的重要性越來越明顯,尤其是在人工智能(AI)和自動化技術迅速發展的背景下。理解編程語言,如Python、R等,以及熟悉相關技術架構和工具,能夠幫助個人在這樣的環境中更好地工作。這種能力不僅對技術專業人士至關重要,也對非技術領域的人士日益重要,因為基礎的程式設計知識已
Thumbnail
程式設計與技術能力 在現代社會中的重要性越來越明顯,尤其是在人工智能(AI)和自動化技術迅速發展的背景下。理解編程語言,如Python、R等,以及熟悉相關技術架構和工具,能夠幫助個人在這樣的環境中更好地工作。這種能力不僅對技術專業人士至關重要,也對非技術領域的人士日益重要,因為基礎的程式設計知識已
Thumbnail
軟體系統的發展歷程大多相似,首重解決基本需求、提供操作介面,進而提升安全性、擴充功能、優化操作。
Thumbnail
軟體系統的發展歷程大多相似,首重解決基本需求、提供操作介面,進而提升安全性、擴充功能、優化操作。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News