Look for any podcast host, guest or anyone
Showing episodes and shows of

TMPDIR

Shows

The TMPDIR podcast2026-10-2250 minThe TMPDIR podcast2026-08-1418 minThe TMPDIR podcast2026-07-221h 03底層邏輯:從蠑螈到 OpenBMC
底層邏輯:從蠑螈到 OpenBMC看懂 OpenBMC 的 Yocto 核心架構:從 Poky 解剖到建置流程全透視💡 一句話核心摘要 OpenBMC 對 Yocto/Poky 採取「精準斷捨離」策略,保留核心建置引擎 OE-Core、捨棄圖形介面與無關硬體層,並透過 BitBake 的 DAG 排程與 SState cache 機制實現高效建置——但需警惕 hash blindness 這個隱藏盲區。 📌 核心內容重整與深度分析 1. Poky 的三層結構:引擎蓋底下的真相 許多人誤以為 Poky 是一個單一軟體,但打開其資料夾後會發現,它實際上是三個獨立上游專案的集合體: BitBake(位於 bitbake/ 目錄) 關鍵觀點:整個建置系統的任務排程引擎,等同於 C 生態系中 make 指令的極致強化版。 詳細說明:負責解析所有食譜(recipes)的相依性,決定任務執行順序與時間點。它是「發號施令的大腦」,但本身不包含任何建置知識。 OpenEmbedded-Core(OE-Core)(位於 meta/ 目錄) 關鍵觀點:整個建置系統的「物理法則」,是核心中的核心,不可移除。 詳細說明:包含建構基礎 Linux 所需的通用套件食譜(recipes)以及定義建置流程的類別庫(build classes)。其中 base.bbclass 定義了軟體套件從無到有的標準生命週期(do_fetch → do_unpack → 編譯 → 安裝);image.bbclass 負責最終組裝 MTD 或 WIC 格式的檔案系統映像。沒有 OE-Core,BitBake 只是一個空轉的排程器。 meta-yocto(包含 meta-poky 與 meta-yocto-bsp) 關鍵觀點:定義 Poky 作為「參考發行版」的具體樣貌,並提供特定參考硬體支援。 詳細說明:為了展示完整功能,預設開啟了 Wayland、OpenGL 等圖形介面相關套件,以及 BeagleBone、通用 x86 等泛用硬體設定。 2. OpenBMC 的精準斷捨離:為何要主動拋棄現成資源 在 OpenBMC 的 bblayers.conf 設定檔中,刻意排除了 meta-poky 與 meta-yocto-bsp 兩個層。 關鍵觀點:多餘的程式碼就是潛在的漏洞;BMC 的應用場景決定了其對極簡化與安全性的極端要求。 詳細說明: BMC 的本質:基板管理控制器(BMC) 是伺服器主機板上負責管理電源、監控溫度的晶片,根本無需螢幕輸出。將 3D 圖形渲染套件塞入 BMC,不僅浪費寶貴的儲存空間,更會無謂地擴大潛在資安攻擊面。 發行版替換:OpenBMC 透過自身的 meta-phosphor 層重新定義發行版變數,設定 DISTRO = "openbmc-phosphor",完全取代 meta-poky。 硬體層替換:OpenBMC 運行在特定的 ASPEED 晶片上,因此直接引入 meta-aspeed 或 meta-arm 等專屬底層硬體 layer,取代泛用的 meta-yocto-bsp。 3. 六步建置流程:從混沌到秩序 當開發者執行 bitbake obmc-phosphor-image,系統在背後完成以下六個關鍵步驟: | 步驟| 名稱 | 說明 | | 0–1 | **初始化與解析 | **執行 source setup 腳本,將 BitBake 路徑加入環境變數並載入 local.conf;接著 BitBake 依 bblayers.conf 讀取所有啟用 meta-layer 中的食譜,建立內部資料結構。| | 2 | **計算任務圖(DAG)| **runqueue.py 分析所有食譜的 DEPENDS(編譯時依賴)與 RDEPENDS(執行時依賴),建立有向無環圖(DAG)。DAG 的核心價值在於找出所有互不相依的任務節點,實現極致平行化——同時將多個任務分配給不同 CPU 核心執行。| | 3 | **SState Cache 查詢 | **在執行任何任務前,sstate.bbclass 為每個任務計算一組獨立的 hash 雜湊值(涵蓋原始碼版本、套件依賴、編譯環境變數等所有輸入)。若 hash 命中快取(cache hit),直接取用已編譯的二進位檔案,跳過編譯;若未命中(cache miss),進入步驟 4。| | 4 | **實際編譯 | **執行 do_fetch、do_unpack、do_compile 等任務,老老實實地從原始碼開始編譯。| | 5 | **RootFS 組裝 | **所有套件編譯完成並打包成 RPM 或 IPK 格式後,呼叫 image-types.bbclass 進行根檔案系統(RootFS)組裝。| | 6 | **產出映像檔 | **生成專屬於目標硬體的 MTD 映像檔,建置完成。| 4. 關鍵效能變數:BB_NUMBER_THREADS vs. PARALLEL_MAKE 這兩個變數都用於加速編譯,但作用層級完全不同,混淆兩者可能導致系統 OOM 崩潰。 BB_NUMBER_THREADS 作用層級:BitBake 任務層級(DAG 層面) 功能:決定 BitBake 可以同時啟動多少個獨立的軟體配方(recipes)。設為 8 代表可同時平行建置 kernel、OpenSSL、BusyBox 等 8 個不同套件。 建議值:對應機器的實體 CPU 核心數。 PARALLEL_MAKE 作用層級:單一配方內部(make 層面) 功能:當 BitBake 開始編譯某個套件(如 Linux kernel)時,告訴底層的 GNU make 使用幾個執行緒。 建議值:同樣對應 CPU 核心數,但須考量與 BB_NUMBER_THREADS 的乘積效應。 警告:若在 16 核心機器上將兩者皆設為 16,系統全力運作時可能產生 16 × 16 = 256 個執行緒,導致記憶體耗盡(OOM)並被強制終止。 5. 關鍵目錄路徑:精準除錯的利器 熟悉以下目錄,能將除錯效率從「大海撈針」提升至「精準定位」: TMPDIR/work/:編譯暫存區。建置失敗時,直接查看出錯套件下的 temp/log.do_compile,而非在終端機輸出中迷失。 DL_DIR:原始碼下載快取目錄。存放所有已下載的原始碼壓縮包,避免重複下載。 SSTATE_DIR:Shared State Cache 目錄。在團隊之間共享此目錄,可將建置時間從數小時大幅縮短至數分鐘。 6. SState Cache 的
2026-06-2917 minThe Claude Code Changelog2026-06-0502 minThe TMPDIR podcast2026-04-241h 08The TMPDIR podcast2026-01-3048 minThe TMPDIR podcast2025-12-231h 20The TMPDIR podcast2025-11-221h 30The TMPDIR podcast2025-10-1031 minThe TMPDIR podcast2025-07-251h 10The TMPDIR podcast2025-06-2755 minThe TMPDIR podcast2025-05-3023 minThe TMPDIR podcast2025-05-2755 minThe TMPDIR podcast2025-05-0955 minThe TMPDIR podcast2025-04-0422 minThe TMPDIR podcast2025-02-2808 minThe TMPDIR podcast2025-02-1420 minThe TMPDIR podcast2024-12-1317 minThe TMPDIR podcast2024-11-0154 minThe TMPDIR podcast2024-10-1828 minThe TMPDIR podcast2024-09-2746 minThe TMPDIR podcast2024-08-3051 minThe TMPDIR podcast2024-08-1654 minThe TMPDIR podcast2024-07-1958 minThe TMPDIR podcast2024-06-2946 minThe TMPDIR podcast2024-05-1848 minThe TMPDIR podcast2024-05-1722 minThe TMPDIR podcast2024-04-1212 minThe TMPDIR podcast2024-02-1736 minThe TMPDIR podcast2024-01-1234 minThe TMPDIR podcast2023-12-0429 minThe TMPDIR podcast2023-11-2727 minThe TMPDIR podcast2023-11-0927 minThe TMPDIR podcast2023-10-2839 minThe TMPDIR podcast2023-06-1931 minThe TMPDIR podcast2023-05-2634 minThe TMPDIR podcast2023-05-1525 minThe TMPDIR podcast2023-05-1236 minThe TMPDIR podcast2023-03-3153 minThe TMPDIR podcast2022-12-1625 minThe TMPDIR podcast2022-12-0928 minThe TMPDIR podcast2022-12-021h 03The TMPDIR podcast2022-01-0732 minThe TMPDIR podcast2021-12-3124 minRustacean Station2021-10-2544 minThe TMPDIR podcast2021-05-2124 minThe TMPDIR podcast2021-04-1553 minThe TMPDIR podcast2021-04-0240 minThe TMPDIR podcast2021-02-2645 minThe TMPDIR podcast2021-02-1230 minThe TMPDIR podcast2021-01-2246 minThe TMPDIR podcast2021-01-1143 minThe TMPDIR podcast2020-12-211h 03The TMPDIR podcast2020-09-211h 00The TMPDIR podcast2020-07-1750 minThe TMPDIR podcast2020-07-1055 minThe TMPDIR podcast2020-07-0329 min