功能

元件會透過以下方式相互互動: 功能會結合資源存取權和一組權利,提供存取權控管和與資源互動的管道。

元件只能透過其命名空間的可探索功能和收到的少數編號句柄,與系統和其他元件互動。

能力轉送

元件會在元件資訊清單中宣告提供給系統的新功能,以及其他元件 (或架構) 提供的所需功能。元件架構會使用這些宣告來填入命名空間。

如要讓功能在執行階段可用,您必須提供有效的 由於功能通常會透過父項元件傳送至子項,因此父項元件在定義子項元件的沙箱時扮演著重要角色。

某些能力類型會導向 環境會為指派的領域設定架構行為。系統會存取並使用導向至環境的功能。元件例項無法在執行階段存取其環境中的功能。

可用性功能可讓元件宣告預期的情況,也就是預期可用功能的情況。

路由術語

路由術語可分為下列類別:

  1. 宣告如何在元件、元件父項和子項之間路由功能:
    • offer:宣告列出的能力可供子元件例項或子集合使用。
    • expose:宣告列出的功能可供父項元件或架構使用。您可以從 self 或子元件 expose
  2. 元件所消耗或提供的功能宣告:
    • use:針對可執行的元件,宣告該元件在其 除非另有指定,否則能力會從 parent 轉送,且每項能力都必須有來自來源的有效路徑。
    • capabilities:宣告此元件提供的功能。必須顯示從 self 提供或公開的功能。這些功能通常會對應至以下節點:

週期偵測

元件架構會強制執行元件之間提供的功能不會形成循環。循環的簡單例子是,元件提供從子項 A 到子項 B,以及從 BA 的能力,但沒有弱選項。

系統會偵測下列項目之間的週期:

  • 子項元件及其父項。
  • 目前的元件及其子項。

目前的元件可執行以下操作:

  • use 功能,除非是提供給這些子項的功能。
  • use 從父項取得能力。
  • expose 將能力傳遞至父項。

如果有週期,則有幾種策略可解決這個問題。

  • 將其中一個連結標示為 dependency: "weak"。弱式功能不會視為與週期偵測或關機順序相關的依附元件。如果弱功能不存在或消失,則應將使用弱功能的元件編程,以便正確運作。
  • 將其中一個元件分割為兩個沒有週期的較小元件。
  • 反轉其中一個依附元件的順序。舉例來說,A 可以使用 B 的第二個能力,而非 B 使用 A 的功能。方法是將新的能力新增至 AB 的資訊清單,然後將新的 use 新增至 A 的資訊清單。

能力類型

以下功能可進行路由:

類型 說明 已轉送至
protocol 用於開啟 FIDL 通訊協定所支援管道的檔案系統節點。 元件
service 用於開啟通往多個服務例項的管道的檔案系統目錄。 元件
directory 檔案系統目錄。 元件
storage 可寫入的檔案系統目錄,可隔離使用該目錄的元件。 元件
dictionary 將其他功能組合在一起的功能。 元件
resolver 在環境中註冊時,會讓具有特定網址配置的元件透過該解析器解析的功能。 environments
runner 在環境中註冊時,這項能力可讓架構在啟動元件時使用該執行元件。 environments

範例

請參考以下範例,瞭解如何透過元件執行個體樹狀結構結構進行能力轉送:


能力轉送範例

在這個例子中:

  • echo 元件執行個體會將 fuchsia.Echo 通訊協定做為其宣告的功能之一提供。
  • echo_tool 元件執行個體需要使用 fuchsia.Echo 通訊協定能力。

每個中繼元件都會合作,明確地將 fuchsia.Echoecho 重新導向至 echo_tool

  1. echo 公開 fuchsia.Echoself,讓通訊協定可供其父項 services 查看。
  2. services 會將 fuchsia.Echo 從子項 echo 公開至父項 shell
  3. shell 提供 fuchsia.Echo 從其子項 services 傳送至另一個子項 tools
  4. tools 提供 fuchsia.Echo,從 parent 傳遞至其子項 echo_tool

元件架構會授予 echo_tool 使用 fuchsia.Echo 的要求,因為找到提供該通訊協定能力的元件有效路徑。

如要進一步瞭解元件如何在執行階段連線至功能,請參閱「通訊協定開啟的生命週期」。