驅動程式執行器

使用驅動程式庫執行元件

如要使用驅動程式庫執行元件,元件的資訊清單必須包含類似以下的 program 區塊:

{
    program: {
        runner: "driver",
        binary: "driver/example.so",
        bind: "meta/bind/example.bindbc",
    }
}

驅動程式庫元件的 program 區塊至少需要下列欄位:

  • runner:這個欄位必須設為 driver 字串。
  • binary:元件套件中驅動程式庫的二進位輸出路徑。
  • bind:元件套件中已編譯繫結程式的路徑。

選填欄位

除了必填欄位,驅動程式執行程式也接受一組選用欄位,用來指定中繼資料或設定驅動程式庫元件的執行階段環境。

主機代管

如果 colocate 欄位設為 true 字串,驅動程式庫會盡可能放入與父項驅動程式相同的驅動程式主機。不過,這是一個公告。然而,驅動程式管理員可能仍會將驅動程式庫放在獨立的驅動程式代管程序中,例如,如果父項裝置已設定 MUST_ISOLATE,在 DFv1 中,如果父項裝置為複合型裝置,則會一律在共置驅動程式庫。不過,系統仍可以透過在複合的主要片段上設定 MUST_ISOLATE 來強制執行隔離。

{
    program: {
        runner: "driver",
        binary: "driver/example.so",
        bind: "meta/bind/example.bindbc",
        colocate: "true"
    }
}

如未指定 colocate 欄位,則該欄位的值會預設為 false 字串。

colocatehost_restart_on_crash 欄位互斥。只有一顆對驅動程式庫可以成功。

預設調度工具選項

default_dispatcher_opts 欄位提供建立驅動程式庫預設調度工具時要使用的選項,例如:

{
    program: {
        runner: "driver",
        binary: "driver/example.so",
        bind: "meta/bind/example.bindbc",
        default_dispatcher_opts: [ "allow_sync_calls" ]
    }
}

這個欄位中的選項對應至這個 types.h 檔案中定義的標記。目前支援的選項如下:

  • allow_sync_calls:此選項表示調度器不得與其他驅動程式共用 Zircon 執行緒。這項設定可讓驅動程式庫在調度器上進行同步 Banjo 或 FIDL 呼叫,而不會死結。

備用

如果 fallback 欄位設為 true 字串,這個備用驅動程式庫只會在所有基本驅動程式庫套件編入索引後嘗試繫結。此外,如果這個驅動程式庫與節點相符,且非備用驅動程式庫與同一個節點相符,則非備用驅動程式庫會改為繫結至該節點。

{
    program: {
        runner: "driver",
        binary: "driver/example.so",
        bind: "meta/bind/example.bindbc",
        fallback: "true"
    }
}

如未指定 fallback 欄位,則該欄位的值會預設為 false 字串。

下一個 vDSO

如果將 use_next_vdso 欄位設為 true 字串,驅動程式庫就會放入驅動程式主機,並含有下一個 vdso 動態連結。驅動程式也必須將 colocate 設為 true,否則系統會忽略這個欄位。

{
    program: {
        runner: "driver",
        binary: "driver/example.so",
        bind: "meta/bind/example.bindbc",
        colocate: "true"
        use_next_vdso: "true"
    }
}

如未指定 use_next_vdso 欄位,則該欄位的值會預設為 false 字串。

裝置類別

device_categories 欄位提供中繼資料,指出驅動程式庫控制的裝置類別,例如:

{
    program: {
        runner: "driver",
        binary: "driver/example.so",
        bind: "meta/bind/example.bindbc",
        device_categories: [
            { category: "board", subcategory: "i2c" },
            { category: "sensor", subcategory: "temperature" },
        ]
    }
}

此中繼資料可用來判斷驅動程式庫在認證過程中會通過的測試。如需裝置類別和子類別的完整清單,請參閱 FHCP 結構定義

主機在當機時重新啟動

host_restart_on_crash 欄位會向驅動程式庫架構說明應重新啟動驅動程式代管程序的節點主機,該驅動程式庫會在驅動程式庫意外停止運作時。

包括:

  • 驅動程式主機異常終止。
  • 驅動程式執行時會將用戶端的用戶端關閉到 fuchsia.driver.framework/Node 通訊協定。

由於這會影響驅動程式代管程序,因此只能由主機的根驅動程式庫進行設定。根驅動程式庫是建立主機的驅動程式庫。只有在 colocate 欄位設為 false 時,才適用這種情況。

因此,host_restart_on_crashcolocate 彼此互斥。只有其中一個可為驅動程式庫的 true

{
    program: {
        runner: "driver",
        binary: "driver/example.so",
        bind: "meta/bind/example.bindbc",
        host_restart_on_crash: "true"
    }
}

如未指定 host_restart_on_crash 欄位,則該欄位的值會預設為 false 字串。

host_restart_on_crashfalse 時,如果驅動程式庫意外停止運作,則會從驅動程式庫架構的節點拓撲中移除節點。

其他資訊

如要進一步瞭解驅動程式繫結方式,請參閱「驅動程式繫結」。