系统调用接口
系统调用接口在 //zircon/vdso/
中的 .fidl
文件中定义。如需向该 FIDL 定义添加新对象类型,请执行以下操作:
- 向
//zircon/vdso/zx_common.fidl
中的ObjType
枚举添加了新成员 - 按照其他文件(例如
channel.fidl
)中的模式,在//zircon/vdso/
中创建一个新的 FIDL 文件来定义特定于对象的系统调用。
FIDL 工具链内置了对象类型的知识。这并不优雅,但可以避免一些循环依赖项。您必须更新 FIDL 工具链的部分内容,才能了解新对象类型。具体而言,请更新:
//tools/fidl/fidlc/src/properties.h
中的HandleSubtype
//tools/fidl/fidlc/src/names.cc
中的NameHandleSubtype
//tools/fidl/abi-compat/src/compare/handle.rs
中的HandleType
//tools/fidl/fidlc/schema.json
中的handle-subtype
//tools/fidl/fidlc/tests/types_tests.cc
中的GoodHandleSubtype
//tools/fidl/lib/fidlgen/types.go
中的HandleSubtype
和ObjectType
常量//tools/fidl/fidlgen_rust/codegen/ir.go
中的handleSubtypes
、handleSubtypesFdomain
和objectTypeConsts
内核实现
TODO(b/383761360):在内核中添加
用户空间支持
用户空间开发者不仅希望获得原始 C ABI,还希望获得语言绑定和工具支持。
C++
C++ 系统调用绑定在 //zircon/system/ulib/zx/
中实现。为新对象类型实现适当的 zx::object
子类。
Rust
Rust 系统调用绑定是在 //sdk/rust/zx/
中实现的。为您的新对象类型实现适当的 Handle
封装容器类型。
fidlcat
ffx debug fidl
(也称为 fidlcat
)工具与 Linux 上的 strace
大致类似。它基于 //src/lib/fidl_codec/
中实现的 fidl_codec
库。向模型介绍新对象类型包括更新以下内容:
display_handle.cc
中的ShortObjTypeName
printer.cc
中的PrettyPrinter::DisplayObjType