查看驅動程式庫資訊

ffx driver 指令可擷取 Fuchsia 裝置上驅動程式的各種資訊。

概念

ffx driver 指令可擷取目前在目標 Fuchsia 裝置 (或模擬器) 上可用執行的驅動程式相關資訊。不過,ffx driver 指令會預期您能從主機與目標 Fuchsia 裝置建立 SSH 連線。如要驗證與裝置的連線,可以執行 ffx target show 指令。

使用 ffx driver 指令前,建議您先熟悉驅動程式架構 (DFv2) 的基本概念,尤其是下列概念:

  • 裝置節點 - 裝置節點代表硬體元件、虛擬裝置或硬體裝置的一部分。
  • 節點拓撲:節點拓撲說明系統中裝置節點之間的父項/子項關係。
  • 驅動程式代管程序:驅動程式主機以 Fuchsia 元件的形式執行,可隔離 Fuchsia 系統中的驅動程式。在 Fuchsia 中,每個驅動程式庫都位於驅動程式代管程序中,且單一驅動程式代管程序內可共存多個驅動程式庫。

查看駕駛人

如要查看 Fuchsia 裝置上的所有可用驅動程式,請執行下列指令:

ffx driver list

這個指令會輸出類似以下的結果:

$ ffx driver list
fuchsia-boot:///alc5663#meta/alc5663.cm
fuchsia-boot:///asix-88179#meta/asix-88179.cm
fuchsia-boot:///asix-88772b#meta/asix-88772b.cm
fuchsia-boot:///block-core#meta/block.core.cm
fuchsia-boot:///bt-transport-usb#meta/bt-transport-usb.cm
fuchsia-boot:///bus-pci#meta/bus-pci.cm
fuchsia-boot:///buttons#meta/buttons.cm
fuchsia-boot:///clock#meta/clock.cm
fuchsia-boot:///ctaphid#meta/ctaphid.cm
fuchsia-boot:///display-coordinator#meta/display-coordinator.cm
fuchsia-boot:///e1000#meta/e1000.cm
fuchsia-boot:///ftdi#meta/ftdi.cm
fuchsia-boot:///fvm#meta/fvm.cm
...

如要查看 Fuchsia 裝置上所有可用的驅動程式,並取得更詳細的資訊,請執行含有 -v 旗標的指令:

ffx driver list -v

這個指令會輸出類似以下的結果:

$ ffx driver list -v
URL       : fuchsia-pkg://fuchsia.com/iwlwifi#meta/iwlwifi.cm
DF Version: 2
Device Categories: [misc]
Bind rules bytecode:
  fuchsia.BIND_FIDL_PROTOCOL == 4
  fuchsia.BIND_PCI_VID == 32902
  Jump if fuchsia.BIND_PCI_DID == 2394 to ??
  Jump if fuchsia.BIND_PCI_DID == 2395 to ??
  Jump if fuchsia.BIND_PCI_DID == 9469 to ??
  Jump if fuchsia.BIND_PCI_DID == 9510 to ??
  Jump if fuchsia.BIND_PCI_DID == 41200 to ??
  Abort
  Label ??
  fuchsia.BIND_COMPOSITE == 1

URL       : fuchsia-boot:///virtio_rng#meta/virtio_rng.cm
DF Version: 1
Device Categories: [misc]
Bind rules bytecode:
Node (primary): pci
  fuchsia.BIND_FIDL_PROTOCOL == 4
  fuchsia.BIND_PCI_VID == 6900
  Jump if fuchsia.BIND_PCI_DID == 4164 to ??
  Jump if fuchsia.BIND_PCI_DID == 4101 to ??
...

查看執行中的驅動程式

如要查看目前在 Fuchsia 裝置上執行的所有驅動程式 (已載入),請執行指令並加上 -loaded 標記:

ffx driver list --loaded

這個指令會輸出類似以下的結果:

$ ffx driver list --loaded
fuchsia-boot:///#meta/block.core.cm
fuchsia-boot:///#meta/bus-pci.cm
fuchsia-boot:///#meta/display.cm
fuchsia-boot:///#meta/fvm.cm
fuchsia-boot:///#meta/goldfish-display.cm
fuchsia-boot:///#meta/goldfish.cm
fuchsia-boot:///#meta/goldfish_address_space.cm
fuchsia-boot:///#meta/goldfish_control.cm
fuchsia-boot:///#meta/goldfish_sensor.cm
fuchsia-boot:///#meta/goldfish_sync.cm
fuchsia-boot:///#meta/hid-input-report.cm
fuchsia-boot:///#meta/hid.cm
fuchsia-boot:///#meta/intel-hda.cm
...

查看驅動程式庫主機

如要查看 Fuchsia 裝置上執行的所有驅動程式主機,以及這些主機代管的驅動程式,請執行下列指令:

ffx driver list-hosts

這個指令會輸出類似以下的結果:

$ ffx driver list-hosts
Driver Host: 5416
    fuchsia-boot:///#meta/bus-pci.cm
    fuchsia-boot:///#meta/display.cm
    fuchsia-boot:///#meta/goldfish-display.cm
    fuchsia-boot:///#meta/goldfish.cm
    fuchsia-boot:///#meta/goldfish_control.cm
...

Driver Host: 8248
    fuchsia-boot:///#meta/intel-rtc.cm

Driver Host: 8317
    fuchsia-boot:///#meta/pc-ps2.cm

Driver Host: 9604
    fuchsia-boot:///#meta/block.core.cm
    fuchsia-boot:///#meta/fvm.cm
    fuchsia-boot:///#meta/virtio_block.cm
...

查看節點拓撲

如要查看 Fuchsia 裝置的完整節點拓撲,請執行下列指令:

ffx driver dump

這個指令會輸出類似以下的結果:

$ ffx driver dump
[dev] pid=5521 fuchsia-boot:///platform-bus#meta/platform-bus.cm
  [sys] pid=None unbound
    [platform] pid=None unbound
      [ram-disk] pid=7584 fuchsia-boot:///ramdisk#meta/ramdisk.cm
        [ramctl] pid=None unbound
      [ram-nand] pid=None unbound
      [virtual-audio] pid=25117 fuchsia-pkg://fuchsia.com/virtual_audio#meta/virtual_audio_driver.cm
        [virtual_audio] pid=None unbound
      [bt-hci-emulator] pid=None unbound
      [fake-battery] pid=24707 fuchsia-pkg://fuchsia.com/fake-battery#meta/fake_battery.cm
        [fake-battery] pid=None unbound
        [power-simulator] pid=None unbound
      [pt] pid=5521 fuchsia-boot:///platform-bus-x86#meta/pl
...

查看特定節點下的節點拓撲

如要只查看特定節點下的節點拓撲子圖,請執行下列指令:

ffx driver dump <NODE_NAME>

NODE_NAME 替換為目標節點的名稱,例如:

$ ffx driver dump goldfish-control
[goldfish-control] pid=5521 fuchsia-boot:///goldfish_display#meta/goldfish-display.cm
  [goldfish-display] pid=5521 fuchsia-boot:///display-coordinator#meta/display-coordinator.cm
    [display-coordinator] pid=None unbound
...

繪製節點拓撲圖

如要繪製節點拓撲圖,請執行下列指令:

ffx driver node graph

這個指令會輸出類似以下的結果:

$ ffx driver node graph
digraph {
    forcelabels = true; splines="ortho"; ranksep = 5; nodesep = 1;
    node [ shape = "box" color = " #0a7965" penwidth = 2.25 fontname = "prompt medium" fontsize = 10 margin = 0.22 ];
    edge [ color = " #283238" penwidth = 1 style = solid fontname = "roboto mono" fontsize = 10 ];
    rankdir = "TB"
    subgraph "cluster_19434" {
        label = "Host 19434";
        style = "filled,rounded";
        fillcolor = " #b1b9be";
        subgraph "cluster_19434_virtual-audio-driver.cm" {
            label = "virtual-audio-driver.cm";
            style = "filled,rounded";
            fillcolor = " #dce0e3";
            "4358549555312" [label="virtual-audio", id = "4358549555312"]
            "4358549791216" [label="virtual-audio", id = "4358549791216"]
        }
    }
...

篩選

完整的 Fuchsia 系統圖表可能相當龐大。使用 --only (或 -o) 旗標,將圖表篩選為特定區段。您也可以使用這個標記,只篩選繫結或未繫結的節點。舉例來說,下列指令只會繪製「virtio-input」節點的相關節點:

ffx driver node graph -o relatives:dev.sys.platform.pt.PCI0.bus.00_03_0.00_03_0.virtio-input

使用下列篩選器和 --only 旗標 (複數形式,即 ancestors,也接受這個值,且效果相同):

  • --only bound 只顯示繫結節點。如果節點符合下列任一條件,即為已繫結:
    • 驅動程式會直接繫結至該介面。
    • 這是複合節點的父項。
    • 其父項節點明確擁有該節點。
  • --only unbound 只顯示未繫結的節點 (不符合任何繫結條件的節點)。
  • --only ancestor(s):dev.sys.xyz 只顯示指定節點的祖先。
  • --only descendant(s):dev.sys.xyz 只顯示指定節點的子項。
  • --only relative(s):dev.sys.xyz 只顯示指定節點的親戚。親戚包括祖先和後代。
  • --only sibling(s):dev.sys.xyz 只顯示指定節點的同層節點。
  • --only primary_ancestor(s):dev.sys.xyz 與祖先相同,但如果是複合節點,則只會遍歷主要父項。
  • --only primary_relative(s):dev.sys.xyz 與相對位置相同,但如果是複合節點,則只會遍歷主要父項。
  • --only primary_sibling(s):dev.sys.xyz 與同層級節點相同,但如果篩選器目標是複合節點,這個篩選器只會納入主要父項的子項。

顯示服務路線

您可以使用 --services 旗標,將服務路徑新增至圖表。圖表會以箭頭顯示這些路徑,與父項/子項關係有所區別。

新增服務路線可能會建立非常大的圖表,導致圖形引擎不堪負荷。為避免發生這種情況,請務必搭配篩選器使用這個標記。例如:

ffx driver node graph --services -o relatives:dev.sys.platform.pt.PCI0.bus.00_03_0.00_03_0.virtio-input

建立圖表圖片

如要將這項輸出內容轉換為 png 檔案,可以安裝 dot 指令並傳遞輸出內容,產生 png 檔案。或者,您也可以將輸出內容貼到 GraphViz

生成互動式圖表

您可以從 SVG 輸出內容產生互動式 HTML 網頁,更輕鬆地探索圖表。這個 HTML 頁面可讓您將滑鼠游標懸停在服務或父項/子項路徑上,並醒目顯示這些路徑。

如要使用單一指令建立 HTML 檔案,請透過 dot 管道傳送圖表輸出內容,然後使用 --html 標記將產生的 SVG 傳回圖表指令。

例如:

ffx driver node graph --services -o relatives:dev.sys.platform.pt.PCI0.bus.00_03_0.00_03_0.virtio-input | \
    dot -Tsvg | \
    ffx driver node graph --html > local/graph.html

如果您使用 GraphViz,可以提供現有的 SVG 檔案,並使用 --svg 標記,不必從 dot 管道輸出。

查看裝置節點

如要查看 Fuchsia 裝置上所有裝置節點的屬性,請執行下列指令:

ffx driver node list

這個指令會輸出類似以下的結果:

$ ffx driver node list
dev
dev.sys
dev.sys.platform
dev.sys.platform.ram-disk
dev.sys.platform.ram-nand
dev.sys.platform.virtual-audio
dev.sys.platform.bt-hci-emulator
dev.sys.platform.fake-battery
dev.sys.platform.pt
dev.sys.platform.00_00_1b
dev.sys.platform.ram-disk.ramctl
dev.sys.platform.virtual-audio.virtual_audio
dev.sys.platform.fake-battery.fake-battery
dev.sys.platform.fake-battery.power-simulator
dev.sys.platform.pt.PCI0
dev.sys.platform.pt.acpi
dev.sys.platform.00_00_1b.sysmem
dev.sys.platform.pt.PCI0.bus
dev.sys.platform.pt.acpi.acpi-_SB_
dev.sys.platform.pt.acpi.acpi-_TZ_
dev.sys.platform.00_00_1b.sysmem.sysmem-banjo
dev.sys.platform.00_00_1b.sysmem.sysmem-fidl
dev.sys.platform.pt.PCI0.bus.00_00_0
dev.sys.platform.pt.PCI0.bus.00_01_0
dev.sys.platform.pt.PCI0.bus.00_02_0
...

如要查看裝置節點的狀態和擁有者資訊,請執行指令並加上 -v 旗標:

ffx driver node list -v

這個指令會輸出類似以下的結果:

$ ffx driver node list -v
...
 State          Moniker                                                          Owner
 Bound        dev                                                               fuchsia-boot:///platform-bus#meta/platform-bus.cm
 Bound        dev.sys                                                           parent
 Bound        dev.sys.platform                                                  parent
 Bound        dev.sys.platform.pt                                               fuchsia-boot:///platform-bus-x86#meta/platform-bus-x86.cm
 Bound        dev.sys.platform.virtual-audio                                    fuchsia-pkg://fuchsia.com/virtual-audio#meta/virtual-audio-driver.cm
 Bound        dev.sys.platform.virtual-audio-legacy                             fuchsia-pkg://fuchsia.com/virtual-audio-legacy#meta/virtual-audio-legacy-driver.cm
 Bound        dev.sys.platform.fake-battery                                     fuchsia-pkg://fuchsia.com/fake_battery#meta/fake_battery.cm
 Bound        dev.sys.platform.pt.PCI0                                          fuchsia-boot:///bus-pci#meta/bus-pci.cm
 Bound        dev.sys.platform.pt.acpi                                          parent
 Bound        dev.sys.platform.virtual-audio.virtual-audio                      parent
 Bound        dev.sys.platform.virtual-audio-legacy.virtual-audio-legacy        parent
 Bound        dev.sys.platform.pt.PCI0.bus                                      parent
 Bound        dev.sys.platform.pt.acpi._SB_                                     parent
 Bound        dev.sys.platform.pt.acpi._TZ_                                     parent
 Unbound      dev.sys.platform.pt.PCI0.bus.00_00_0                              none
...

如要查看特定裝置節點的屬性,並取得更詳細的資訊,請使用 ffx driver node show

ffx driver node show dev.sys.platform.virtual-audio

這個指令會輸出類似以下的結果:

$ ffx driver node show dev.sys.platform.virtual-audio
          Name:  virtual-audio
       Moniker:  dev.sys.platform.virtual-audio
         Owner:  fuchsia-pkg://fuchsia.com/virtual-audio#meta/virtual-audio-driver.cm
    Node State:  Bound
     Host Koid:  19434
  Parent Count:  1
   Child Count:  1

  Bus Topology:  Bus Type  Stability  Address
                 Platform  Stable     virtual-audio

  Node Properties:  Key                                       Value
                    fuchsia.BIND_PLATFORM_DEV_VID             0
                    fuchsia.BIND_PLATFORM_DEV_PID             0
                    fuchsia.BIND_PLATFORM_DEV_DID             57
                    fuchsia.BIND_PLATFORM_DEV_INSTANCE_ID     0
                    fuchsia.BIND_PROTOCOL                     85
                    fuchsia.resource.MMIO_COUNT               0
                    fuchsia.resource.INTERRUPT_COUNT          0
                    fuchsia.resource.BTI_COUNT                0
                    fuchsia.resource.SMC_COUNT                0
                    fuchsia.hardware.platform.device.Service  fuchsia.hardware.platform.device.Service.ZirconTransport

  Node Offers:  Service                                   Source  Instances
                fuchsia.hardware.platform.device.Service  dev     default


篩選特定裝置節點

您可以使用篩選部分所述的相同篩選器,篩選節點清單。

舉例來說,這個範例只會列出指定節點的後代:

ffx driver node list -o descendants:<NODE>

<NODE> 改為元件路徑名稱。

這個範例會篩選結果,只顯示 acpi 節點的子項:

$ ffx driver node list -o descendants:dev.sys.platform.pt.acpi
dev.sys.platform.pt.acpi
dev.sys.platform.pt.acpi.acpi-_SB_
dev.sys.platform.pt.acpi.acpi-_TZ_
dev.sys.platform.pt.acpi.acpi-_SB_.pt
dev.sys.platform.pt.acpi.acpi-_SB_.acpi-PCI0
dev.sys.platform.pt.acpi.acpi-_SB_.acpi-HPET
dev.sys.platform.pt.acpi.acpi-_SB_.acpi-LNKE
dev.sys.platform.pt.acpi.acpi-_SB_.acpi-LNKF
dev.sys.platform.pt.acpi.acpi-_SB_.acpi-LNKG
dev.sys.platform.pt.acpi.acpi-_SB_.acpi-LNKH
dev.sys.platform.pt.acpi.acpi-_SB_.acpi-GSIE
dev.sys.platform.pt.acpi.acpi-_SB_.acpi-GSIF
dev.sys.platform.pt.acpi.acpi-_SB_.acpi-GSIG
dev.sys.platform.pt.acpi.acpi-_SB_.acpi-GSIH
...

查看複合節點

如要查看 Fuchsia 裝置上的所有複合節點,請執行下列指令:

ffx driver list-composites

這個指令會輸出類似以下的結果:

$ ffx driver list-composites
...
acpi-GFRO-composite
acpi-CPUS-composite
acpi-_TZ_-composite
goldfish-control-2
00:00.0
00:01.0
00:02.0
00:03.0
00:04.0
00:05.0
00:06.0
00:0b.0
...

如要查看複合節點的詳細資訊,請執行指令並加上 -v 標記:

ffx driver list-composites -v

這個指令會輸出類似以下的結果:

$ ffx driver list-composites -v
...
Name     : 00_02_0
Driver   : fuchsia-boot:///#meta/virtio_block.cm
Device   : dev/sys/platform/pt/PCI0/bus/00:02.0/00_02_0
Parents  : 3
Parent 0 : sysmem
   Device : dev/sys/platform/00:00:1b/sysmem/sysmem-fidl
Parent 1 : pci (Primary)
   Device : dev/sys/platform/pt/PCI0/bus/00:02.0
Parent 2 : acpi
   Device : dev/sys/platform/pt/acpi/acpi-_SB_/acpi-PCI0/acpi-S10_/pt
...

查看複合節點規格

如要在 Fuchsia 裝置上查看所有複合節點規格,請執行下列指令:

ffx driver list-composite-node-specs

這個指令會輸出類似以下的結果:

$ ffx driver list-composite-node-specs
...
00_1f_0             : None
00_1f_2             : fuchsia-boot:///ahci#meta/ahci.cm
00_06_0             : None
00_02_0             : fuchsia-boot:///virtio_block#meta/virtio_block.cm
00_1f_3             : None
00_05_0             : fuchsia-boot:///virtio_input#meta/virtio_input.cm
00_0b_0             : fuchsia-boot:///goldfish_address_space#meta/goldfish_address_space.cm
00_01_0             : fuchsia-boot:///intel-hda#meta/intel-hda.cm
00_03_0             : fuchsia-boot:///virtio_input#meta/virtio_input.cm
00_04_0             : fuchsia-boot:///virtio_netdevice#meta/virtio_netdevice.cm
00_00_0             : None
...

如要查看複合節點規格的詳細資訊,請執行指令並加上 -v 標記:

ffx driver list-composite-node-specs -v

這個指令會輸出類似以下的結果:

$ ffx driver list-composite-node-specs -v
...
Name      : ft3x27_touch
Driver    : fuchsia-boot:///#meta/focaltech.cm
Nodes     : 2
Node 0    : "i2c" (Primary)
  3 Bind Rules
  [ 1/ 3] : Accept "fuchsia.BIND_FIDL_PROTOCOL" { 0x000003 }
  [ 2/ 3] : Accept "fuchsia.BIND_I2C_BUS_ID" { 0x000001 }
  [ 3/ 3] : Accept "fuchsia.BIND_I2C_ADDRESS" { 0x000038 }
  2 Properties
  [ 1/ 2] : Key "fuchsia.BIND_FIDL_PROTOCOL"   Value 0x000003
  [ 2/ 2] : Key "fuchsia.BIND_I2C_ADDRESS"     Value 0x000038
Node 1    : "gpio-int"
  2 Bind Rules
  [ 1/ 2] : Accept "fuchsia.BIND_PROTOCOL" { 0x000014 }
  [ 2/ 2] : Accept "fuchsia.BIND_GPIO_PIN" { 0x000004 }
  2 Properties
  [ 1/ 2] : Key "fuchsia.BIND_PROTOCOL"        Value 0x000014
  [ 2/ 2] : Key "fuchsia.gpio.FUNCTION"        Value "fuchsia.gpio.FUNCTION.TOUCH_INTERRUPT"
...

附錄

將元件註冊為驅動程式庫

如要將元件註冊為 Fuchsia 裝置的驅動程式庫,請執行下列指令:

ffx driver register <URL>

URL 替換為 Fuchsia 套件伺服器中的元件網址,例如:

$ ffx driver register fuchsia-pkg://fuchsia.com/my_example#meta/my_new_driver.cm

停用驅動程式庫

如要從 Fuchsia 裝置停用 (即取消註冊) 驅動程式庫,請執行下列指令:

ffx driver disable <URL>

URL 替換為 Fuchsia 套件伺服器中的元件網址,例如:

$ ffx driver disable fuchsia-pkg://fuchsia.com/my_example#meta/my_driver.cm