建造司機

本文件說明如何建構驅動程式庫,並強調定義套件、元件和驅動程式的最佳做法。

概念

驅動程式是元件的一種,因此在繼續操作前,請先瞭解如何建構元件

驅動程式套件 GN 範本

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

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

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


driver_bind_rules("bind") {
    rules = "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 欄位則指向驅動程式庫繫結規則檔案。

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

當然!如要編寫自己的元件資訊清單,只需以檔案的形式將資訊清單加入專案,並更新 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 檔案應包含 Cuchsia 存放區中的所有驅動程式庫標籤。這份清單會持續更新,以便驅動程式架構團隊持續支援及更新所有驅動程式。

如果您的驅動程式庫只能建構 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 檔案中
  • 本機:fx args 中的 board_bootfs_labels

將司機納入基本套件

您可以根據產品、主機板或本機環境,將驅動程式庫納入基本套件中。您要將 fuchsia_package 目標的路徑新增至下列其中一個位置之一:

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