建造司機

這份文件說明如何建構驅動程式庫,將 定義套件、元件和驅動程式的實務做法

概念

驅動程式是一種元件 以瞭解 建構元件

驅動程式套件 GN 範本

駕駛人應使用驅動程式庫專屬的 GN 範本。 Fuchsia 定義下列 GN 範本來定義驅動程式庫元件 驅動程式庫套件:

以下是含有一個驅動程式庫元件的假設套件:

import("//build/drivers.gni")


driver_bind_rules("bind") {
    rules = "meta/driver.bind"
    bind_output = "my-driver.bindbc"
}

fuchsia_driver("driver") {
  output_name = "my-driver"
  sources = [ "my_driver.cc" ]
}

fuchsia_driver_component("component") {
  component_name = "my-driver"
  deps = [
      ":driver",
      ":bind",
  ]
}

fuchsia_driver_package("my_package") {
  deps = [ ":component" ]
}

請注意下列細節: * fuchsia_driver_component() 範本會宣告元件。 這依附於驅動程式庫共用資料庫 (fuchsia_driver()), 做為驅動程式庫繫結規則 (driver_bind_rules())。 * fuchsia_driver_component() 會自動產生元件資訊清單 給驅動程式庫使用。我們會在後續章節中展示這樣的運作方式。 * 元件和套件名稱兩者皆衍生自目標名稱。 在上述範例中,這些名稱一起形成 啟動元件: fuchsia-pkg://fuchsia.com/my_package#meta/my_driver.cm

自動產生的元件資訊清單看起來是怎樣的?

使用fuchsia_driver_component範本時,系統會自動產生 驅動程式庫的元件資訊清單以上例子的回答為 下列

{
    program: {
        runner: 'driver',
        binary: driver/my_driver.so,
        bind: meta/bind/my_driver_bind.bindbc
    }
}

請注意下列細節: * binary 欄位會指向驅動程式庫共用資料庫。 * bind 欄位會指向驅動程式庫繫結規則檔案。

我可以加入自己的元件資訊清單嗎?

當然可以!如要編寫自己的元件資訊清單 將此 ID 做為檔案來更新到專案中,然後更新 fuchsia_driver_component 指向:

fuchsia_driver_component("component") {
  component_name = "my-driver"
  manifest = "meta/my-own-manifest.cml
  deps = [
      ":driver",
      ":bind",
      ]
}

包含驅動程式。

如要將驅動程式納入版本, 兩間特殊地點

第一種是 //build/drivers/all_drivers_list.txt。 如果您不這樣做,系統會顯示建構錯誤提醒您。 all_drivers_list.txt 檔案應包含內含的所有驅動程式庫標籤 建立目錄這份清單會持續更新,讓驅動程式架構 確保所有司機都繼續受到支援及更新。

如果您的驅動程式庫只能針對 x64 建構,請將其新增至:

//build/drivers/all_drivers_lists_x64.txt

如果您的驅動程式庫只能針對 arm64 版本建構,請將其新增至:

//build/drivers/all_drivers_lists_arm64.txt

第二個位置是: //bundles:drivers-build-only。 如果您忘記在這裡新增驅動程式,也會發生建構錯誤。 如要新增到這份清單,請務必將驅動程式庫元件新增至 來源位置中的本機驅動程式庫群組。

舉例來說,如果新驅動程式庫在 //src/ui/input/drivers 底下新增,則應進行以下操作: 在 //src/ui/input:drivers 中新增項目。

對於 drivers-build-only 目標,請務必加入 指向 fuchsia_driver_components() 目標的路徑,而不是指向 直接指定fuchsia_driver()

將驅動程式安裝在裝置上

如要在實際裝置上安裝驅動程式,有以下兩種方法: 您可以在啟動檔案系統或基本套件中加入驅動程式庫

將驅動程式納入啟動檔案系統

您可以根據產品、主機板或軟體板,將驅動程式裝入啟動檔案系統 只有本機環境請務必在 fuchsia_driver_component 會指定到下列三個位置的其中一個:

  • 產品://products 相關 .gni 檔案中的 product_bootfs_labels
  • 主面板:board_bootfs_labels (位於 //boards 相關 .gni 檔案中)
  • 當地:board_bootfs_labels (fx args)

將驅動程式納入基本套件

您可以根據產品、遊戲板或遊戲板,將驅動程式納入基本套件 只有本機環境請務必在 fuchsia_package 會指定到下列三個位置的其中一個:

  • 產品://products 相關 .gni 檔案中的 product_driver_package_labels
  • 主面板:board_driver_package_labels (位於 //boards 相關 .gni 檔案中)
  • 當地:base_driver_package_labels (fx args)