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>
替换为组件 moniker。
此示例会过滤结果,以仅显示 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