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