Fuchsia 核心库

这部分文档从依赖链的最底端开始,自底向上地对 Fuchsia 系统的核心库进行描述。

Zircon 库

libzircon

这个库定义了 Zircon 的系统 ABI。
由于 VDSO 对其进行了抽象,因此 libzircon 并不是系统调用接口。

libzx

libzircon 中定义了 C 语言类型以及相关的函数调用。libzx 则使用 C++ 对 libzircon 进行了包装。它在zx_handle_t之外增加了类型安全,因此每个内核对象类型都有一个与之相关的 C++ 类型,并且为这些句柄添加了所有权语义。此外,它不在命名和策略上做任何改变。

更多关于 libzx 的信息,参见其文档

FBL

不论是在内核空间还是用户空间,Zircon 大部分都是使用 C++ 编写的。在这种环境下链接 C++ 标准库并不是非常合适(太容易出现内存的不当分配、经常出现异常、标准库本身过于庞大等等)。在标准库中有相当大一部分我们想要使用的内容,例如 type_traitsunique_ptr。然而,我们不想因为这些细微的理由而选择忍受标准库的缺点。因此,我们自己构建了一个与标准库具有相似功能的库,称为 fdl。这个库也包含了一些标准库中没有,但是对内核和设备驱动环境有帮助的功能,例如 Slab 内存分配。

更多关于 FBL 的信息,参见其文档

FXL

FXL 是一个包含基础 C++ 编译模块(例如日志和引用计数)的平台无关库。FXL 只依赖于 C++ 标准库,不包含任何与 Zircon 或 Fuchsia 相关的库。 我们在目标系统(Fuchsia)和主机系统(Linux,Mac)上同时构建了 FXL。

一般来说,我们尝试过使用 C++ 标准库来构造基础模块,但是在某些情况下,C++ 标准库没有我们所需的功能(如,功能强大的日志系统)或者没有符合我们需求的合适版本(例如,std::shared_ptrfxl::RefPtr 的两倍大小)。