DFv1 与 DFv2 的比较

本页面简要介绍了两个版本的 Fuchsia 驱动程序框架之间的差异:DFv1(旧版)和 DFv2

DF1 和 DFv2 之间的主要区别如下:

设备与节点

在 DFv1 中,我们使用“设备”和“设备图”这两个术语。设备可以视为一项硬件。驱动程序绑定到设备并在设备上运行。驾驶人还可以创建儿童设备。在 DFv1 中,当驱动程序绑定到某个设备时,它必须创建一个子设备。之后,设备将归创建它的驱动程序所有。

在 DFv2 中,我们使用术语“节点”和“节点图”(或“节点拓扑”)。可以将节点视为用于公开 Fuchsia 系统功能的事物。 它可以是物理硬件设备或硬件的虚拟表示。驱动程序绑定到节点并使用其功能。驱动程序也可以创建子节点。然后,该节点将由与其绑定的驱动程序拥有。

libDDK 与 capability

在 DFv1 中,驱动程序不是组件。它们没有传入或传出命名空间,因此无法使用 Fuchsia 系统中的功能。驱动程序使用 libDDK(一个提供函数的共享库)与驱动程序框架进行通信。如果驱动程序希望被放入 /dev 目录(虚拟文件系统)中,则会创建可发送消息的设备。然后,驱动程序框架会将 FIDL 消息转发回驱动程序。

在 DFv2 中,驱动程序是组件。它们的传入命名空间中具有功能。其中一些功能允许它们向驱动程序框架发出 FIDL。驱动程序可以使用 DevfsExporter FIDL 协议向 /dev 目录公开一个通道。通过此渠道,驱动程序和其他组件可以直接相互读出 FIDL。

Banjo 与 FIDL

在 DFv1 中,赛车手可以互相说班卓琴。为了获取 Banjo 协议,驾驶员从其绑定的设备请求该协议。

在 DFv2 中,驱动程序相互交谈 FIDL,就像紫红色系统中的其他组件一样。驱动程序从其传入组件命名空间获取 FIDL 通道。