Syscall 介面
系統呼叫介面是在 //zircon/vdso/
的 .fidl
檔案中定義。如要在該 FIDL 定義中新增物件類型,請按照下列步驟操作:
- 在
//zircon/vdso/zx_common.fidl
中,將新成員新增至ObjType
列舉 - 建立新的 FIDL 檔案,以便在
//zircon/vdso/
中定義物件專屬的系統呼叫,並遵循channel.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 系統呼叫繫結會在 //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