本文档介绍了 Fuchsia 系统中的核心库,从依赖项链的底部开始。
Zircon 库
libzircon
此库定义了 Zircon 系统 ABI。
libzx
libzircon 定义了对这些对象执行的 C 类型和函数调用。libzx 是这些对象的轻量 C++ 封装容器。它在 zx_handle_t
的基础上增加了类型安全性,以便每个内核对象类型都有对应的 C++ 类型,并为这些句柄添加了所有权语义。否则,它不会对命名或政策提出任何意见。
如需详细了解 libzx,请参阅其文档。
FBL
Zircon 的大部分内容(包括内核和用户空间)都是使用 C++ 编写的。与 C++ 标准库关联并不特别适合此环境(分配、抛出异常等操作过于容易,并且库本身很大)。标准库中有一些我们希望使用的实用结构,例如类型 trait 和唯一指针。不过,C++ 标准库实际上不应像这样分块使用。因此,我们构建了一个库,提供名为 fbl 的类似结构。此库还包含标准库中不存在但对内核和设备驱动程序环境有用的库代码(例如,slab 分配)。
如需详细了解 FBL,请参阅其概览。
FXL
FXL 是一个独立于平台的库,包含基本的 C++ 构建块,例如日志记录和引用计数。FXL 依赖于 C++ 标准库,但不依赖于任何 Zircon 或 Fuchsia 专用库。我们会为目标 (Fuchsia) 和主机 (Linux、Mac) 系统构建 FXL。
一般来说,我们会尝试使用 C++ 标准库作为基本构建块,但在某些情况下,C++ 标准库可能不包含我们需要的功能(例如功能丰富的日志记录系统),或者我们所需功能的版本不符合我们的要求(例如std::shared_ptr
是 fxl::RefPtr
的两倍)。