本文件說明如何建構驅動程式庫,並強調定義套件、元件和驅動程式的最佳做法。
概念
驅動程式是元件的一種,因此在繼續操作前,請先瞭解如何建構元件。
驅動程式套件 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