本页面简要介绍了 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 通道。