建造司機

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

概念

驅動程式是一種元件,因此在深入瞭解前,請務必先瞭解如何建構元件

驅動程式套件 GN 範本

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

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

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


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

fuchsia_cc_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_cc_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 檔案應包含 Fuchsia 存放區中包含的所有驅動程式庫標籤。這份清單會持續更新,讓驅動程式架構團隊確保所有驅動程式都能持續獲得支援及更新。

如果您的驅動程式庫只能針對 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_cc_driver() 目標。

在裝置上加入驅動程式

如果您想在實際裝置上加入驅動程式庫,有兩種做法:您可以將驅動程式庫加入啟動檔案系統中,或做為基本套件。

在啟動檔案系統中加入驅動程式

您可以根據產品、電路板或本機環境,在啟動檔案系統中加入驅動程式庫。您需要將路徑新增至 fuchsia_driver_component 目標的其中一個位置:

  • 產品://products 中相關 .gni 檔案中的 product_bootfs_labels
  • board://boards 中相關 .gni 檔案中的 board_bootfs_labels
  • 本地:fx args 中的 board_bootfs_labels

在基本套件中加入驅動程式

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

  • 產品://products 中相關 .gni 檔案中的 product_driver_package_labels
  • board://boards 中相關 .gni 檔案中的 board_driver_package_labels
  • 本地:fx args 中的 base_driver_package_labels