核心提供低階的建立及設定程序。然而,這些設施不易使用,因為它們會直接對應執行檔、共用程式庫和堆疊的記憶體。請改用較高層級的機制建立程序。
fuchsia.process.Launcher
Fuchsia 提供 fuchsia.process.Launcher
服務,可為您完成建構程序的低階工作。您需要向這項服務提供建構程序所需的所有核心物件 (例如建立程序的工作物件、可執行映像檔,以及標準的輸入和輸出控點),服務則會執行以下作業:剖析 ELF 執行檔格式、設定處理程序的位址空間,以及傳送啟動訊息。
大多數客戶不需要直接使用這項服務,大部分的用戶端都可以使用 FDIO 程式庫中名為 fdio_spawn
的簡易 C 前端。此函式和更進階的 fdio_spawn_etc
和 fdio_spawn_vmo
配套會連線至 fuchsia.process.Launcher
服務,並傳送適當訊息建立程序。傳遞至 fdio_spawn_etc
的 fdio_spawn_action_t
陣列可用來自訂已建立的程序。
無論您是直接使用 fuchsia.process.Launcher
服務還是 fdio_spawn
前端,這種方法建立程序最適用於在您的命名空間內建立程序,因為您需要為新程序提供所有核心物件。
早期啟動
在開機程序的初期,系統會手動建立一些程序。舉例來說,核心手動建立第一個使用者空間程序 userboot
。
使用者啟動作業最重要的工作是從 ZBI 中的啟動檔案系統映像檔載入下一個程序,預設為 component_manager
。
使用工作政策的 fuchsia
工作樹狀結構中,不得直接建構程序 (例如 userboot
載入 component_manager
的方式)。可能用於 fuchsia
工作樹狀結構的程式庫或程式可能會使用 fdio_spawn
(或其隨附程式) 建立程序,同時遵守安全性政策。