DFv1 与 DFv2 的比较

本页面简要介绍了 Fuchsia 驱动程序框架的两个版本(DFv1 [旧版] 和 DFv2)之间的区别。

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

设备与节点

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

在 DFv2 中,我们使用“节点”和“节点图”(或“节点拓扑”)一词。节点可被视为在 Fuchsia 系统中公开功能的某种实体。它可以是实体硬件设备,也可以是硬件的虚拟表示。驱动程序会绑定到节点并使用其功能。驱动程序还可以创建子节点。然后,该节点将归绑定到它的驱动程序所有。

libDDK 与 capability

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

在 DFv2 中,驱动程序是组件。它们在传入命名空间中具有功能。其中一些功能可让它们向驱动程序框架发送 FIDL 命令。驱动程序可以向其他驱动程序或非驱动程序组件通告服务。借助这些服务,驱动程序和其他组件可以直接使用 FIDL 进行通信。

班卓琴与 FIDL

在 DFv1 中,驱动程序之间使用 Banjo 进行通信。如需获取 Banjo 协议,驱动程序会向其绑定的设备发出请求。

在 DFv2 中,驱动程序彼此之间使用 FIDL 进行通信,就像 Fuchsia 系统中的任何其他组件一样。驱动程序从其传入组件命名空间获取 FIDL 通道。