├── .gitignore ├── .vscode ├── extensions.json └── settings.json ├── README.md ├── contribution.md ├── docs ├── CONTRIBUTING.md ├── LICENSE ├── development │ ├── languages │ │ └── fidl │ │ │ ├── README.md │ │ │ └── ftp │ │ │ ├── README.md │ │ │ ├── ftp-001.md │ │ │ └── ftp-002.md │ ├── source_code │ │ ├── README.md │ │ └── layers.md │ └── workflows │ │ └── multilayer_changes.md ├── getting_started.md ├── glossary.md └── the-book │ ├── README.md │ ├── block_devices.md │ ├── boot_sequence.md │ ├── core_libraries.md │ ├── filesystems.md │ ├── launchpad.md │ ├── libc.md │ ├── life_of_an_open.md │ ├── namespaces.md │ ├── sandboxing.md │ └── wireless_networking.md ├── garnet ├── bin │ ├── bluetooth │ │ └── README.md │ └── ui │ │ └── view_manager │ │ └── README.md ├── docs │ ├── ui_input.md │ └── ui_scenic.md ├── lib │ └── magma │ │ └── README.md └── public │ └── lib │ ├── escher │ └── README.md │ └── fidl │ ├── README.md │ ├── compatibility_test │ └── README.md │ └── tools │ └── vim │ └── README.md ├── jiri ├── BUILD.md ├── HACKING.md ├── LICENSE ├── README.md ├── behaviour.md ├── filesystem.md ├── howdoi.md └── manifest.md ├── peridot └── docs │ ├── ledger │ └── README.md │ └── modular │ ├── agent.md │ ├── module.md │ └── story.md └── zircon ├── LICENSE ├── README.md ├── docs ├── architecture_support.md ├── block_device_testing.md ├── concepts.md ├── ddk │ └── overview.md ├── editors.md ├── errors.md ├── fidl │ ├── compiler.md │ ├── grammar.md │ ├── index.md │ ├── language.md │ └── wire-format │ │ ├── arrays.png │ │ ├── dual-forms.png │ │ ├── epitaph.png │ │ ├── events.png │ │ ├── index.md │ │ ├── method-call-messages.png │ │ ├── method-result-messages.png │ │ ├── objects.png │ │ ├── strings.png │ │ ├── structs.png │ │ ├── tables.png │ │ ├── unions.png │ │ └── vectors.png ├── getting_started.md ├── h2md.md ├── handles.md ├── libc.md ├── objects.md ├── objects │ ├── bus_transaction_initiator.md │ ├── channel.md │ ├── event.md │ ├── eventpair.md │ ├── fifo.md │ ├── futex.md │ ├── interrupts.md │ ├── job.md │ ├── log.md │ ├── pinned_memory_token.md │ ├── port.md │ ├── process.md │ ├── resource.md │ ├── socket.md │ ├── task.md │ ├── thread.md │ ├── vm_address_region.md │ └── vm_object.md ├── rights.md ├── signals.md ├── syscalls.md ├── syscalls │ ├── bti_create.md │ ├── bti_pin.md │ ├── bti_release_quarantine.md │ ├── cache_flush.md │ ├── channel_call.md │ ├── channel_create.md │ ├── channel_read.md │ ├── channel_write.md │ ├── clock_get.md │ ├── clock_get_monotonic.md │ ├── cprng_add_entropy.md │ ├── cprng_draw.md │ ├── deadline_after.md │ ├── event_create.md │ ├── eventpair_create.md │ ├── fifo_create.md │ ├── fifo_read.md │ ├── fifo_write.md │ ├── futex_requeue.md │ ├── futex_wait.md │ ├── futex_wake.md │ ├── futex_wake_handle_close_thread_exit.md │ ├── guest_create.md │ ├── guest_set_trap.md │ ├── handle_close.md │ ├── handle_close_many.md │ ├── handle_duplicate.md │ ├── handle_replace.md │ ├── interrupt_ack.md │ ├── interrupt_bind.md │ ├── interrupt_create.md │ ├── interrupt_destroy.md │ ├── interrupt_trigger.md │ ├── interrupt_wait.md │ ├── job_create.md │ ├── job_set_policy.md │ ├── nanosleep.md │ ├── object_get_child.md │ ├── object_get_cookie.md │ ├── object_get_info.md │ ├── object_get_property.md │ ├── object_set_cookie.md │ ├── object_set_property.md │ ├── object_signal.md │ ├── object_wait_async.md │ ├── object_wait_many.md │ ├── object_wait_one.md │ ├── pmt_unpin.md │ ├── port_cancel.md │ ├── port_create.md │ ├── port_queue.md │ ├── port_wait.md │ ├── process_create.md │ ├── process_exit.md │ ├── process_read_memory.md │ ├── process_start.md │ ├── process_write_memory.md │ ├── resource_create.md │ ├── smc_call.md │ ├── socket_accept.md │ ├── socket_create.md │ ├── socket_read.md │ ├── socket_share.md │ ├── socket_write.md │ ├── system_get_features.md │ ├── system_get_num_cpus.md │ ├── system_get_physmem.md │ ├── system_get_version.md │ ├── system_mexec.md │ ├── task_bind_exception_port.md │ ├── task_kill.md │ ├── task_resume.md │ ├── task_resume_from_exception.md │ ├── task_suspend.md │ ├── task_suspend_token.md │ ├── thread_create.md │ ├── thread_exit.md │ ├── thread_read_state.md │ ├── thread_start.md │ ├── thread_write_state.md │ ├── ticks_get.md │ ├── ticks_per_second.md │ ├── timer_cancel.md │ ├── timer_create.md │ ├── timer_set.md │ ├── vcpu_create.md │ ├── vcpu_interrupt.md │ ├── vcpu_read_state.md │ ├── vcpu_resume.md │ ├── vcpu_write_state.md │ ├── vmar_allocate.md │ ├── vmar_destroy.md │ ├── vmar_map.md │ ├── vmar_protect.md │ ├── vmar_unmap.md │ ├── vmar_unmap_handle_close_thread_exit.md │ ├── vmo_clone.md │ ├── vmo_create.md │ ├── vmo_create_physical.md │ ├── vmo_get_size.md │ ├── vmo_op_range.md │ ├── vmo_read.md │ ├── vmo_replace_as_executable.md │ ├── vmo_set_cache_policy.md │ ├── vmo_set_size.md │ └── vmo_write.md ├── time.md └── zx_and_lk.md └── system ├── host └── fidl │ └── README.md └── ulib └── fidl └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | _book/ 2 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | // See http://go.microsoft.com/fwlink/?LinkId=827846 to learn about workspace recommendations. 3 | // Extension identifier format: ${publisher}.${name}. Example: vscode.csharp 4 | 5 | // List of extensions which should be recommended for users of this workspace. 6 | "recommendations": [ 7 | "yzhang.markdown-all-in-one" 8 | ], 9 | // List of extensions recommended by VS Code that should not be recommended for users of this workspace. 10 | "unwantedRecommendations": [ 11 | 12 | ] 13 | } -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "markdown.extension.toc.githubCompatibility": true, 3 | "markdown.extension.toc.levels": "2..3", 4 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Fuchsia documents in Zh-CN 2 | ----------------------------------- 3 | 4 | 本项目的目的是翻译和提供Fuchsia操作系统项目中Markdown文档的中文版本。 5 | 6 | 因为Fuchsia是一个多仓库项目,为了便于查找和组织,我们保持了它们在[官方网站](https://fuchsia.googlesource.com)上的层次关系。并同时建议来自中国大陆的朋友使用Fuchsia项目在github的[镜像](https://github.com/fuchsia-mirror)。 7 | 8 | ## 翻译贡献和协作 9 | 10 | 欢迎各种issue,以及按照如下方式的Pull Request 11 | 12 | * [协作方式](contribution.md) 13 | 14 | ## 快速访问 15 | 16 | * [如何下载Fuchsia源码](docs/development/source_code/README.md) 17 | * [术语表](docs/glossary.md) 18 | * [一本官方介绍Fuchsia技术细节的书](docs/the-book/) 19 | * [Fuchsia快速入门](docs/getting_started.md) 20 | * [Zircon快速入门](zircon/docs/getting_started.md) 21 | * [如何使用Jiri](jiri/README.md) 22 | 23 | ## TODO LIST 24 | 25 | 下列工作按优先级递减排序: 26 | 27 | * FIDL语言相关文档 28 | * Zircon的syscall手册页 29 | * Fuchsia硬件启动指南 30 | * Zircon DDK文档 31 | 32 | ## 贡献者列表 33 | 34 | 感谢支持:heart: 35 | 36 | + [B2Kylin](https://github.com/B2Kylin) 37 | + [feixhan](https://github.com/feixhan) 38 | 39 | ## LICENSE 40 | 41 | 因为本项目是Fuchsia的衍生品,因此各个仓库的中文翻译使用与原项目完全相同的LICENSE,你可以在每个子目录下找到这些LICENSE的副本。 42 | -------------------------------------------------------------------------------- /contribution.md: -------------------------------------------------------------------------------- 1 | # 协作方式 2 | 3 | ------------------------------------- 4 | 5 | 因为Fuchsia文档现处于频繁变更的阶段,为了保证中文文档和原文内容的一致性和质量,我们在翻译的过程中保持以下的原则: 6 | 7 | * 在所有的Markdown文档的标题下方,以如下方式添加英文原文url,该url具体指向其在github镜像上某个变更Id(commit)下的地址。并在更新文档内容的同时,也将一并更新该变更Id: 8 | 9 | ``` 10 | # File Title 11 | 12 | ---- 13 | 14 | [*英文原文快照*](https://github.com/fuchsia-mirror/${reposity_name}/blob/${commit_id}/file/path/name.md) 15 | 16 | ---- 17 | ``` 18 | 19 | * 所有的翻译文档中,其英文原文Markdown注释的方式放置于每段相应中文内容之上,便于其他协作者持续在此基础上优化翻译。Markdown注释并不会被渲染,所以不影响阅读体验: 20 | 21 | ``` 22 | ...... 23 | 28 | 当前,有一些用于项目早期孵化的临时系统调用,随着长期支持的调用API/ABI稳定 29 | 下来,在未来将会被剔除。到时预期会有100个左右的系统调用。 30 | 31 | 35 | Zircon的系统调用通常是非阻塞方式的(non-blocking),但值得一提的是, 36 | `wait_one`,`wait_many`,`port_wait`和线程休眠则是例外。 37 | 38 | ...... 39 | 40 | ``` -------------------------------------------------------------------------------- /docs/LICENSE: -------------------------------------------------------------------------------- 1 | // Copyright 2016 The Fuchsia Authors. 2 | // Copyright 2018 Pengfei Zhang . 3 | // All rights reserved. 4 | // 5 | // Redistribution and use in source and binary forms, with or without 6 | // modification, are permitted provided that the following conditions are 7 | // met: 8 | // 9 | // * Redistributions of source code must retain the above copyright 10 | // notice, this list of conditions and the following disclaimer. 11 | // * Redistributions in binary form must reproduce the above 12 | // copyright notice, this list of conditions and the following disclaimer 13 | // in the documentation and/or other materials provided with the 14 | // distribution. 15 | // * Neither the name of Google Inc. nor the names of its 16 | // contributors may be used to endorse or promote products derived from 17 | // this software without specific prior written permission. 18 | // 19 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22 | // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23 | // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24 | // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25 | // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26 | // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27 | // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28 | // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 | // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 | -------------------------------------------------------------------------------- /docs/development/languages/fidl/ftp/README.md: -------------------------------------------------------------------------------- 1 | 2 | # FIDL修改提案 3 | --- 4 | 5 | [*英文原文快照*](https://github.com/fuchsia-mirror/docs/blob/8f5805551f4d8db26e8f5911bd91c3c3596714a8/development/languages/fidl/ftp/README.md) 6 | 7 | --- 8 | 10 | 11 | - [FTP-001](ftp-001.md):FTP的流程 12 | - [FTP-002](ftp-002.md):使用`using`关键字更名类型 -------------------------------------------------------------------------------- /docs/the-book/launchpad.md: -------------------------------------------------------------------------------- 1 | # launchpad 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/docs/blob/a774512b9d926ee438a77ddc6a5f362b71e0cc4b/the-book/launchpad.md) 5 | 6 | --- 7 | 14 | [launchpad][launchpad]是Zircon下提供创建和启动新进程功能(包括加载ELF二进制文件,传递初始化运行时所需的初始RPC消息)的系统库。这是一个低级别的系统库,随着时间的推移,预期只有相当少的代码会直接使用它。 15 | 16 | 25 | Launchpad被设计成为创建新进程提供完全的控制,这包括: 26 | - 将可执行代码加载到进程中 27 | - 提供新进程的初始Handle表 28 | - 提供该进程初始的[文件描述符](libc.md)集合 29 | - 进程的文件系统的视图 30 | - unix环境(如getenv和setenv) 31 | 32 | 33 | 37 | 关于launchpad的大量文档在[其主要的头文件][launchpad-header]中。 38 | 39 | 40 | [launchpad]: https://github.com/fuchsia-mirror/zircon/tree/master/system/ulib/launchpad "launchpad" 41 | [launchpad-header]: https://github.com/fuchsia-mirror/zircon/blob/master/system/ulib/launchpad/include/launchpad/launchpad.h "launchpad header" -------------------------------------------------------------------------------- /garnet/bin/ui/view_manager/README.md: -------------------------------------------------------------------------------- 1 | 2 | # Mozart视图管理器 3 | --- 4 | 5 | [*英文原文快照*](https://github.com/fuchsia-mirror/garnet/blob/eadd73dd32daacb88332bc21d666daae5c9d868f/bin/ui/view_manager/README.md) 6 | 7 | --- 8 | 11 | 该目录包含`ViewManager`接口的实现。它提供了一个可组合的视图管理系统,供其他应用程序使用。 12 | 13 | 17 | 18 | 单独运行此应用程序没有意义,因为它没有任何自己的UI可供显示。相反地,需要使用Mozart Launcher或其他一些应用程序通过视图管理器启动和嵌入其他应用程序的UI。 -------------------------------------------------------------------------------- /garnet/lib/magma/README.md: -------------------------------------------------------------------------------- 1 | 2 | Magma:Zircon的图形系统 3 | =========================== 4 | --- 5 | 6 | [*英文原文快照*](https://github.com/fuchsia-mirror/garnet/blob/829716d22f2a71c5eb1563debe9853195f763b98/lib/magma/README.md) 7 | 8 | --- 9 | 10 | Magma是Zircon内核上图形驱动程序的框架。Magma驱动程序在逻辑上被划分为“系统驱动”(以Zircon中用户空间驱动程序服务运行)和“应用程序驱动”(在应用程序的地址空间中运行)(这其实是“内核模式驱动”和“用户模式驱动”的体系结构在宏内核的传统图形堆栈中的反映,但这里两种组件都在用户空间中运行)。 11 | 12 | 13 | Magma本身是位于应用驱动和系统驱动之间的软件,通过Zircon的IPC完成两者之间的通信。Magma提供了系统组合机制的基础——核心缓冲区共享逻辑。 14 | 15 | 16 | 17 | 应用程序驱动和系统驱动都通过稳定的版本化ABI与Magma框架连接,以便允许彼此独立地更新核心图形系统和IHV驱动程序。 18 | -------------------------------------------------------------------------------- /garnet/public/lib/escher/README.md: -------------------------------------------------------------------------------- 1 | # Escher 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/garnet/blob/f33fdaac3eb5311b17a391f0430de029d4b23445/public/lib/escher/README.md) 5 | 6 | --- 7 | 8 | Escher是一个基于物理的渲染器。 9 | 10 | 11 | ## 特征 12 | 13 | 17 | 18 | * 体积柔和阴影 19 | * 颜色出血 20 | * 光扩散 21 | * 镜头效果 22 | 23 | 24 | ## 为Fuchsia而构建 25 | 26 | 28 | Escher是默认构建Fuchsia版本的一部分,`waterfall`演示程序安装在`system/bin/waterfall`路径下。 29 | 30 | 31 | ## 为Linux构建 32 | 33 | Escher也可以在Linux上构建。为此,你需要: 34 | 35 | * 添加jiri的`escher_linux_dev`清单,然后执行`jiri update` 36 | ``` 37 | cd $FUCHSIA_DIR 38 | jiri import escher_linux_dev https://fuchsia.googlesource.com/manifest 39 | jiri update 40 | ``` 41 | 43 | * 作为`jiri update`的一部分,Escher将私有的Vulkan SDK副本下载到`$FUCHSIA_DIR/garnet/public/lib/escher/third_party/ vulkansdk/`目录下 44 |      45 | 46 | 47 | * 安装构建依赖项 48 | ``` 49 | sudo apt install libxinerama-dev libxrandr-dev libxcursor-dev libx11-xcb-dev \ 50 | libx11-dev mesa-common-dev 51 | ``` 52 | 53 | * 安装支持Vulkan的GPU驱动 54 | * NVIDIA: version >= 367.35 55 | ``` 56 | sudo apt install nvidia-driver 57 | ``` 58 | * Intel: Mesa >= 12.0 59 | ``` 60 | sudo apt install mesa-vulkan-drivers 61 | ``` 62 | 63 | * 设置`VK_LAYER_PATH`和`LD_LIBRARY_PATH`环境变量,例如: 64 | ``` 65 | export VULKAN_SDK=$FUCHSIA_DIR/garnet/public/lib/escher/third_party/vulkansdk/x86_64 66 | export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$VULKAN_SDK/lib 67 | export VK_LAYER_PATH=$VULKAN_SDK/etc/explicit_layer.d 68 | ``` 69 | 70 | * 指定你只想为Linux构建Escher(以及它的examples/tests),例如: 71 | ``` 72 | cd $FUCHSIA_DIR 73 | fx set x64 --packages garnet/packages/experimental/disabled/dev_escher_linux --args escher_use_null_vulkan_config_on_host=false 74 | ``` 75 | 76 | * 有关如何设置`fx`工具,请参阅 [`$FUCHSIA_DIR/docs/getting_source.md`(*译者注:应该是在getting_started.md文档下的`fx`文档*)](/docs/getting_started.md)。 77 | 78 | * 执行一次(然后可以在迭代开发中跳过此步骤): 79 | ``` 80 | fx full-build 81 | ``` 82 | 83 | * 构建!!然后运行!!! 84 | ``` 85 | buildtools/ninja -C out/x64/ && out/x64/host_x64/waterfall 86 | ``` 87 | -------------------------------------------------------------------------------- /garnet/public/lib/fidl/README.md: -------------------------------------------------------------------------------- 1 | 2 | FIDL:Fuchsia接口描述语言 3 | ============================================ 4 | --- 5 | 6 | [*英文原文快照*](https://github.com/fuchsia-mirror/garnet/blob/a01c3dcf48592790417b2f8bf4576675957399b7/public/lib/fidl/README.md) 7 | 8 | --- 9 | 13 | 14 | FIDL(之前被称为mojom)是一种IDL和编码格式,用于描述在zircon消息管道上使用的*接口*。 15 | 它们是应用程序在Fuchsia中相互通信的标准方式。 16 | 17 | 20 | 21 | FIDL包含用于为支持的语言从`.fidl`文件中生成绑定的库和工具。 22 | 目前,支持的语言包括C,C++,Dart,Go和Rust。 23 | 24 | 25 | ## IDE支持 26 | 27 | 29 | [`language-fidl`插件][language-fidl]为[Atom][atom]编辑器中的FIDL文件提供了语法高亮显示。 30 | 31 | 32 | [language-fidl]: https://atom.io/packages/language-fidl "FIDL Atom plugin" 33 | [atom]: https://atom.io "Atom editor" -------------------------------------------------------------------------------- /garnet/public/lib/fidl/compatibility_test/README.md: -------------------------------------------------------------------------------- 1 | 2 | # FIDL兼容性测试 3 | --- 4 | 5 | [*英文原文快照*](https://github.com/fuchsia-mirror/garnet/blob/a01c3dcf48592790417b2f8bf4576675957399b7/public/lib/fidl/compatibility_test/README.md) 6 | 7 | --- 8 | 9 | 针对不同FIDL绑定的兼容性集成测试。 10 | 11 | 13 | 测试运行器(test runner)位于`//garnet/bin/fidl_compatibility_test`和`//topaz/bin/fidl_compatibility_test`,并可以在设备上调用: 14 | ```sh 15 | run /pkgfs/packages/fidl_compatibility_test/0/test/fidl_compatibility_test 16 | ``` 17 | 18 | 19 | topaz版本中所测试的语言比garnet版本中的更多。 20 | 21 | 22 | 其基本逻辑类似于: 23 | ```python 24 | servers = ['go_server', 'cc_server', ...] 25 | 26 | for proxy_name in servers: 27 | for server_name in servers: 28 | proxy = 29 | struct = 30 | resp = proxy.EchoStruct(struct, server_name) 31 | assert_equal(struct, resp) 32 | ``` 33 | 34 | 37 | 38 | 服务端应该使用类似以下的逻辑实现[compatibility_test_service.fidl](compatibility_test_service.fidl)中定义的服务: 39 | 40 | 50 | ```python 51 | def EchoStruct( 52 | Struct value, string forward_to_server, EchoStructCallback callback): 53 | if value.forward_to_server: 54 | other_server = 55 | # 设置forward_to_server为""以防止递归 56 | other_server.EchoStruct(value, "", callback) 57 | else: 58 | callback(value) 59 | ``` 60 | 63 | `EchoStructNoRetVal()`的逻辑也是类似的。 64 | 测试端等待接收`EchoEvent()`事件而不是直接等待响应,并且服务端发送`EchoEvent()`而不是直接回调客户端。 -------------------------------------------------------------------------------- /garnet/public/lib/fidl/tools/vim/README.md: -------------------------------------------------------------------------------- 1 | # fidl-vim 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/garnet/blob/a01c3dcf48592790417b2f8bf4576675957399b7/public/lib/fidl/tools/vim/README.md) 5 | 6 | --- 7 | 8 | 9 | FIDL文件的vim语法高亮显示 10 | 11 | 12 | 为了在vim中启用.fidl语法高亮显示,请执行: 13 | 14 | ```sh 15 | cp -pr ftdetect syntax ~/.vim 16 | ``` -------------------------------------------------------------------------------- /jiri/HACKING.md: -------------------------------------------------------------------------------- 1 | 4 | # 本地测试清单的变更 5 | --- 6 | 7 | [*英文原文快照*](https://github.com/fuchsia-mirror/jiri/blob/6ddcc1e3e9d9c4aba2eb0446b5b1345924c823af/HACKING.md) 8 | 9 | --- 10 | 17 | jiri的“本地清单”选项,支持使用本地清单文件来pull代码变更。使用方法: 18 | 19 | ```sh 20 | jiri update -local-manifest 21 | ``` 22 | -------------------------------------------------------------------------------- /jiri/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2016 The Fuchsia Authors. 2 | Copyright 2018 Pengfei Zhang . 3 | All rights reserved. 4 | 5 | Redistribution and use in source and binary forms, with or without 6 | modification, are permitted provided that the following conditions are 7 | met: 8 | * Redistributions of source code must retain the above copyright 9 | notice, this list of conditions and the following disclaimer. 10 | * Redistributions in binary form must reproduce the above 11 | copyright notice, this list of conditions and the following disclaimer 12 | in the documentation and/or other materials provided with the 13 | distribution. 14 | * Neither the name of Google Inc. nor the names of its 15 | contributors may be used to endorse or promote products derived from 16 | this software without specific prior written permission. 17 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 18 | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 19 | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 20 | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 21 | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 22 | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23 | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24 | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25 | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | -------------------------------------------------------------------------------- /peridot/docs/modular/agent.md: -------------------------------------------------------------------------------- 1 | fuchsia::modular::Agent 2 | ===== 3 | 4 | --- 5 | [*英文原文快照*](https://github.com/fuchsia-mirror/peridot/blob/4fda54363e0bc82f253778a2291016b4fbae120f/docs/modular/agent.md) 6 | 7 | --- 8 | 9 | 15 | 16 | Agent是一个实现`fuchsia::modular::Agent`接口的应用程序,其生命周期不依赖于任何Story,并且是User作用域内的单例。Agent可以被其他组件或系统调用以响应触发器,并且Agent可以自行终止或由系统终止。Agent可以向/从其他应用程序提供/接收服务,发送/接收消息并向用户提供建议。 17 | 18 | 19 | ## 请查看 20 | 21 | [fuchsia::modular::Agent](https://github.com/fuchsia-mirror/peridot/blob/master/public/fidl/fuchsia.modular/agent/agent.fidl) 22 | 23 | [fuchsia::modular::AgentContext](https://github.com/fuchsia-mirror/peridot/blob/master/public/fidl/fuchsia.modular/agent/agent_context.fidl) 24 | 25 | [fuchsia::modular::AgentController](https://github.com/fuchsia-mirror/peridot/blob/master/public/fidl/fuchsia.modular/agent/agent_controller/agent_controller.fidl) -------------------------------------------------------------------------------- /peridot/docs/modular/module.md: -------------------------------------------------------------------------------- 1 | 2 | 模块 3 | ====== 4 | 5 | --- 6 | [*英文原文快照*](https://github.com/fuchsia-mirror/peridot/blob/4fda54363e0bc82f253778a2291016b4fbae120f/docs/modular/module.md) 7 | 8 | --- 9 | 10 | 18 | 19 | 模块是Fuchsia系统中实现了`Module`接口的应用程序,其生命周期与启动它的Story紧密相关,并且它还可以实现UI。模块由另一个模块或由能够接收`fuchsia::modular::Link`服务的系统在Story中启动, 它还可以通过`ServiceProviders`接收/提供其他服务。如果负责模块运行的Story变为非活动状态,或启动它的模块决定终止它,或它决定自行终止,则该模块终止运行。模块可以启动其他模块、创建、发送/接收消息以及调用FIDL接口。 20 | 21 | 22 | 23 | ## 请查看 24 | 25 | [Module](https://github.com/fuchsia-mirror/peridot/blob/master/public/fidl/fuchsia.modular/module/module.fidl) 26 | 27 | [fuchsia::modular::ModuleContext](https://github.com/fuchsia-mirror/peridot/blob/master/public/fidl/fuchsia.modular/module/module_context.fidl)(以前的Story) 28 | 29 | [fuchsia::modular::ModuleController](https://github.com/fuchsia-mirror/peridot/blob/master/public/fidl/fuchsia.modular/module/module_controller.fidl) 30 | 31 | [fuchsia::modular::Link](https://github.com/fuchsia-mirror/peridot/blob/master/public/fidl/fuchsia.modular/story/link.fidl) 32 | 33 | [fuchsia::modular::MessageQueue](https://github.com/fuchsia-mirror/peridot/blob/master/public/fidl/fuchsia.modular/component/message_queue.fidl) -------------------------------------------------------------------------------- /peridot/docs/modular/story.md: -------------------------------------------------------------------------------- 1 | Story 2 | ===== 3 | 4 | --- 5 | [*英文原文快照*](https://github.com/fuchsia-mirror/peridot/blob/4fda54363e0bc82f253778a2291016b4fbae120f/docs/modular/story.md) 6 | 7 | --- 8 | 9 | 19 | 20 | Story是根应用程序及其关联数据的逻辑容器。系统可以响应用户操作创建、删除、启动和停止Story实例。 创建新Story实例会在用户的帐目(ledger)中创建一个新的条目项,用于存储与此Story相关联的数据,而删除Stroy实例则会删除关联的数据。启动Story实例将运行根应用程序,该过程可能会启动其他应用程序。如果根应用程序是模块,它可以启动其他模块并(通过链接)访问/修改与Stroy实例关联的数据。根应用程序必须同时实现与此Story相关联的视图,同时该视图可能会嵌入来自其他应用程序/模块的视图。 21 | 22 | 23 | ## 请查看 24 | 25 | [fuchsia::modular::StoryProvider](https://github.com/fuchsia-mirror/peridot/blob/master/public/fidl/fuchsia.modular/story/story_provider.fidl) 26 | 27 | [fuchsia::modular::StoryController](https://github.com/fuchsia-mirror/peridot/blob/master/public/fidl/fuchsia.modular/story/story_controller.fidl) -------------------------------------------------------------------------------- /zircon/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2016 The Fuchsia Authors. 2 | Copyright 2018 Pengfei Zhang . 3 | All rights reserved. 4 | 5 | Redistribution and use in source and binary forms, with or without 6 | modification, are permitted provided that the following conditions are 7 | met: 8 | 9 | * Redistributions of source code must retain the above copyright 10 | notice, this list of conditions and the following disclaimer. 11 | * Redistributions in binary form must reproduce the above 12 | copyright notice, this list of conditions and the following 13 | disclaimer in the documentation and/or other materials provided 14 | with the distribution. 15 | * Neither the name of Google Inc. nor the names of its 16 | contributors may be used to endorse or promote products derived 17 | from this software without specific prior written permission. 18 | 19 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20 | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21 | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22 | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23 | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24 | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25 | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26 | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27 | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 | -------------------------------------------------------------------------------- /zircon/README.md: -------------------------------------------------------------------------------- 1 | # Zircon 2 | 3 | --- 4 | 5 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/3adf3875541d28ad944637f753f8e454fa91dceb/README.md) 6 | 7 | --- 8 | 9 | Zircon是驱动Fuchsia操作系统运行的核心平台,它由一个底层微内核(代码位于kernel/...),以及一系列用于包括系统启动,与硬件交互,加载和运行用户态进程的用户态服务、驱动和运行库(代码位于system/...)组成。Fuchsia正是在Zircon的基础上构建了一个更丰富的操作系统。 10 | 11 | Zircon官方git仓库位于:https://fuchsia.googlesource.com/zircon 12 | 13 | Zircon在Github的只读仓库位于:https://github.com/fuchsia-mirror/zircon 14 | 15 | Zircon内核提供了系统调用来管理进程、线程、虚存系统、进程间通信、等待对象状态改变和锁机制(通过futex实现)等。 16 | 17 | 当前,有一些用于项目早期孵化的临时系统调用,随着长期支持的调用API/ABI稳定下来,在未来将会被剔除。到时预期会有100个左右的系统调用。 18 | 19 | Zircon的系统调用通常是非阻塞方式的(non-blocking),但值得一提的是,`wait_one`,`wait_many`,`port_wait`和线程休眠则是例外。 20 | 21 | 本页面仅是Zircon的一个非全面的文档索引。 22 | 23 | + [入门](docs/getting_started.md) 24 | + [提交代码补丁](https://github.com/fuchsia-mirror/zircon/tree/master/docs/contributing.md) 25 | 26 | + [概念总览](docs/concepts.md) 27 | + [内核(Kernel)对象](https://github.com/fuchsia-mirror/zircon/tree/master/docs/objects.md) 28 | + [进程(Process)对象](docs/objects/process.md) 29 | + [线程(Thread)对象](docs/objects/thread.md) 30 | + [句柄(Handles)](https://github.com/fuchsia-mirror/zircon/tree/master/docs/handles.md) 31 | + [系统调用](docs/syscalls.md) 32 | 33 | + [驱动开发工具](docs/ddk/overview.md) 34 | 35 | + [测试](https://github.com/fuchsia-mirror/zircon/tree/master/docs/testing.md) 36 | + [Hacking notes](https://github.com/fuchsia-mirror/zircon/tree/master/docs/hacking.md) 37 | + [内存使用分析工具](https://github.com/fuchsia-mirror/zircon/tree/master/docs/memory.md) 38 | + [与LK的关系](zx_and_lk.md) 39 | + [微观benchmark测试](https://github.com/fuchsia-mirror/zircon/tree/master/docs/benchmarks/microbenchmarks.md) 40 | -------------------------------------------------------------------------------- /zircon/docs/architecture_support.md: -------------------------------------------------------------------------------- 1 | 4 | # 硬件架构支持 5 | --- 6 | 7 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/3adf3875541d28ad944637f753f8e454fa91dceb/docs/architecture_support.md) 8 | 9 | --- 10 | 13 | Fuchsia支持两种指令集结构:arm64和x86-64。 14 | 15 | 21 | ## arm64 22 | 23 | Fuchsia在(微结构上)无限制地支持arm64(也称为AArch64)硬件结构。 24 | 25 | 31 | ## x86-64 32 | 33 | Fuchsia支持x86-64(也称IA32e或AMD64),但在微结构的支持上有一些限制。 34 | 35 | 40 | ### Intel 41 | 42 | 对于Intel处理器,只有Broadwell以及之后的版本才被积极支持,并且会为其增加新功能。另外,我们也接收补丁以保持Nehalem结构或更新版本的启动。 43 | 44 | 49 | ### AMD 50 | 51 | AMD处理器未得到活跃支持(特别是我们没有对其主动进行测试),但是我们会接受补丁来确保能正确启动。 52 | -------------------------------------------------------------------------------- /zircon/docs/block_device_testing.md: -------------------------------------------------------------------------------- 1 | 2 | # 块设备测试 3 | 4 | ---- 5 | 6 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/863d23444417438d236853b659335cb6558ff76a/docs/block_device_testing.md) 7 | 8 | ---- 9 | 10 | 14 | __警告:以下所有测试项都有破坏性,并且不会提示确认。运行风险自负。__ 15 | 16 | 17 | ## 协议测试 18 | 19 | 22 | *blktest* 是一个集成的命令,可用于测试块设备通讯协议完整性。 23 | 24 | ```shell 25 | $ blktest -d /dev/class/block/000 26 | ``` 27 | 28 | 29 | ## 文件系统测试 30 | 31 | 35 | *fs-test* 是一个文件系统件集成的测试套件,可用于验证Fuchsia文件系统的正确性。 36 | 37 | 41 | 为避免自动文件系统挂载带来的竞争问题,推荐在内核命令行使用"zircon.system.disable-automount=true"配置项运行此命令。 42 | 43 | 48 | TODO(ZX-1604):确保此测试套件在大分区文件系统上运行。目前推荐在1-2GB GPT分区的块设备上运行。 49 | 50 | ```shell 51 | $ /boot/test/fs/fs-test -d /dev/class/block/000 -f minfs 52 | ``` 53 | 54 | 55 | ## 数据正确性测试 56 | 57 | 60 | *iochk* 是一种伪随机读写块设备以检查错误的工具。 61 | 62 | ```shell 63 | $ iochk -bs 32k -t 8 /dev/class/block/000 64 | ``` 65 | 66 | 67 | ## 性能试验 68 | 69 | 72 | *iotime* 是一个测试块设备读写性能的基准测试工具。 73 | 74 | ```shell 75 | $ iotime read fifo /dev/class/block/000 64m 4k 76 | ``` 77 | 78 | 79 | -------------------------------------------------------------------------------- /zircon/docs/ddk/overview.md: -------------------------------------------------------------------------------- 1 | 4 | # Zircon驱动开发工具(DDK) 5 | --- 6 | 7 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/3adf3875541d28ad944637f753f8e454fa91dceb/docs/ddk/overview.md) 8 | 9 | --- 10 | 11 | * [设备模型(英文原文)](https://github.com/fuchsia-mirror/zircon/blob/3adf3875541d28ad944637f753f8e454fa91dceb/docs/ddk/device-model.md) 12 | * [设备的操作(英文原文)](https://github.com/fuchsia-mirror/zircon/blob/3adf3875541d28ad944637f753f8e454fa91dceb/docs/ddk/device-ops.md) 13 | * [驱动开发(英文原文)](https://github.com/fuchsia-mirror/zircon/blob/3adf3875541d28ad944637f753f8e454fa91dceb/docs/ddk/driver-development.md) 14 | * [平台总线(英文原文)](https://github.com/fuchsia-mirror/zircon/blob/3adf3875541d28ad944637f753f8e454fa91dceb/docs/ddk/platform-bus.md) -------------------------------------------------------------------------------- /zircon/docs/fidl/wire-format/arrays.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhangpf/fuchsia-docs-zh-CN/c476d65768cef5e0ca69156da0b67129058dbd7d/zircon/docs/fidl/wire-format/arrays.png -------------------------------------------------------------------------------- /zircon/docs/fidl/wire-format/dual-forms.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhangpf/fuchsia-docs-zh-CN/c476d65768cef5e0ca69156da0b67129058dbd7d/zircon/docs/fidl/wire-format/dual-forms.png -------------------------------------------------------------------------------- /zircon/docs/fidl/wire-format/epitaph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhangpf/fuchsia-docs-zh-CN/c476d65768cef5e0ca69156da0b67129058dbd7d/zircon/docs/fidl/wire-format/epitaph.png -------------------------------------------------------------------------------- /zircon/docs/fidl/wire-format/events.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhangpf/fuchsia-docs-zh-CN/c476d65768cef5e0ca69156da0b67129058dbd7d/zircon/docs/fidl/wire-format/events.png -------------------------------------------------------------------------------- /zircon/docs/fidl/wire-format/method-call-messages.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhangpf/fuchsia-docs-zh-CN/c476d65768cef5e0ca69156da0b67129058dbd7d/zircon/docs/fidl/wire-format/method-call-messages.png -------------------------------------------------------------------------------- /zircon/docs/fidl/wire-format/method-result-messages.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhangpf/fuchsia-docs-zh-CN/c476d65768cef5e0ca69156da0b67129058dbd7d/zircon/docs/fidl/wire-format/method-result-messages.png -------------------------------------------------------------------------------- /zircon/docs/fidl/wire-format/objects.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhangpf/fuchsia-docs-zh-CN/c476d65768cef5e0ca69156da0b67129058dbd7d/zircon/docs/fidl/wire-format/objects.png -------------------------------------------------------------------------------- /zircon/docs/fidl/wire-format/strings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhangpf/fuchsia-docs-zh-CN/c476d65768cef5e0ca69156da0b67129058dbd7d/zircon/docs/fidl/wire-format/strings.png -------------------------------------------------------------------------------- /zircon/docs/fidl/wire-format/structs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhangpf/fuchsia-docs-zh-CN/c476d65768cef5e0ca69156da0b67129058dbd7d/zircon/docs/fidl/wire-format/structs.png -------------------------------------------------------------------------------- /zircon/docs/fidl/wire-format/tables.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhangpf/fuchsia-docs-zh-CN/c476d65768cef5e0ca69156da0b67129058dbd7d/zircon/docs/fidl/wire-format/tables.png -------------------------------------------------------------------------------- /zircon/docs/fidl/wire-format/unions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhangpf/fuchsia-docs-zh-CN/c476d65768cef5e0ca69156da0b67129058dbd7d/zircon/docs/fidl/wire-format/unions.png -------------------------------------------------------------------------------- /zircon/docs/fidl/wire-format/vectors.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhangpf/fuchsia-docs-zh-CN/c476d65768cef5e0ca69156da0b67129058dbd7d/zircon/docs/fidl/wire-format/vectors.png -------------------------------------------------------------------------------- /zircon/docs/h2md.md: -------------------------------------------------------------------------------- 1 | 2 | # h2md - 头文件转Markdown文件 3 | 4 | ---- 5 | 6 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/3719298073ad6adc5491a1f2a169af5293314208/docs/h2md.md) 7 | 8 | ---- 9 | 10 | 13 | h2md 是一个简单工具用于将头文件转换为 markdown 文件。 14 | 15 | 19 | h2md 没有任何依赖,是一个非常简单的行解析器。行头尾的空白字符将会被忽略。 20 | 21 | 25 | 以 `//@` 开头的行,是 h2md 指令,也是 markdown 文件的开始。 26 | 27 | 31 | markdown 块每行以 `//` 开头,以空行或者源码结束。 32 | 33 | 38 | markdown 块后紧跟的第一行源码必须是函数或者函数声明,并以(在同一行或下一行) `{` 或 `;` 结束。 39 | 40 | 44 | 代码块以 `//{` 开头,并以 `//}`结束,期间不能穿插非代码行。 45 | 46 | 50 | 新建一个文件,需要使用文件指令,如:`//@doc(docs/my-markdown.md)` 。 51 | 52 | 56 | 从一个文件指令开始,产生的所有 markdown 都会写入这个文件,直到新的文件指令出现为止。 57 | -------------------------------------------------------------------------------- /zircon/docs/libc.md: -------------------------------------------------------------------------------- 1 | 2 | # Fuchsia的libc 3 | --- 4 | 5 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/8ac2b7fda3d21928c5361c896a8a9fab1f7b66a7/docs/libc.md) 6 | 7 | --- 8 | 9 | TODO(ZX-1598):于此输入更多内容。 10 | 11 | 12 | ## 标准 13 | 14 | ### C11 15 | 19 | Fuchsia的libc支持大多数[C11][c11std]标准,尤其包括标准库的原子操作和线程部分。 20 | 21 | ### POSIX 22 | 23 | 24 | Fuchsia实现了POSIX的子集。 25 | 26 | 28 | 至少部分支持的特性包括POSIX的I/O基础部分(open/close/read/write/stat/...)以及pthreads(线程和互斥)。 29 | 30 | 33 | 在Fuchsia上,以“..”为前缀的文件路径部分在本地解析,有关详细信息,请参阅[此文章(英文原文)][dotdot]。 34 | 35 | 36 | 同样地,Fuchsia不支持符号链接。 37 | 38 | 39 | 标准中明显不支持的包括:UNIX信号,fork和exec。 40 | 41 | ## FDIO 42 | 43 | 46 | Fuchsia的libc不直接支持I/O操作,相反它提供了一组可由其它库覆盖的弱符号,而这通常由[fdio.so][fdio]提供支持。 47 | 48 | 49 | ## 链接 50 | 51 | 52 | Fuchsia不支持静态链接libc,一切符号动态地链接到libc.so上。 53 | 54 | 55 | ## 动态链接和加载 56 | 57 | 58 | libc.so同时也是动态链接器。 59 | 60 | [c11std]: https://zh.wikipedia.org/wiki/C11 61 | [dotdot]: https://github.com/fuchsia-mirror/docs/blob/master/the-book/dotdot.md 62 | [fdio]: https://github.com/fuchsia-mirror/zircon/tree/master/system/ulib/fdio -------------------------------------------------------------------------------- /zircon/docs/objects/bus_transaction_initiator.md: -------------------------------------------------------------------------------- 1 | # Bus Transaction Initiator 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/fc9cc3958ceaacca9447023b8b272f6b648f75ee/docs/objects/bus_transaction_initiator.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | bus_transaction_initiator —— DMA配置能力 11 | 12 | 13 | ## 概要 14 | 15 | 17 | 总线事务启动器(BTI)表示设备的总线主控/DMA功能,可用于设备对存储器的访问进行授权。 18 | 19 | 20 | ## 描述 21 | 22 | 26 | 系统为每个设备驱动程序其对应的设备,可使用的每个总线事务ID提供一个BTI。 27 | 在此上下文中的总线事务ID是可由IOMMU使用的硬件事务标识符(例如,Intel的IOMMU上的PCI地址和ARM的SMMU上的StreamID)。 28 | 29 | 35 | BTI可用于固定虚拟内存对象(VMO)中使用的内存。 36 | 如果调用者固定来自VMO的内存,则内核为它们提供设备物理地址,这些地址可用于向VMO发出内存事务(前提是事务具有正确的总线事务ID)。 37 | 如果设备使用不同的事务ID发起影响这些地址的事务,则事务可能失败并且发起设备可能需要重置以便于继续运行。 38 | 39 | 45 | BTI管理了隔离的PMT列表。 46 | 如果使用**bti_pin()** 从BTI创建PMT,并且在没有调用**pmt_unpin()** 的情况下释放PMT句柄,则PMT将处于隔离状态。 47 | 隔离的PMT将阻止其底层物理内存被释放到系统以供重用,以防止DMA到这些重新分配的内存。 48 | 可通过调用**bti_release_quarantine()** 来清除隔离内存。 49 | 50 | 51 | TODO(teisenbe):添加有关失败事务通知的详细信息。 52 | 53 | 54 | ## 另见 55 | 56 | 58 | + [pmt](pinned_memory_token.md) —— 固定内存令牌(PMT) 59 | + [vm_object](vm_object.md) —— 虚拟内存对象 60 | 61 | 62 | ## 系统调用 63 | 64 | 68 | 69 | + [bti_create](../syscalls/bti_create.md) —— 创建新的总线事务启动器 70 | + [bti_pin](../syscalls/bti_pin.md) —— 固定内存并授权BTI对其的访问 71 | + [bti_release_quarantine](../syscalls/bti_release_quarantine.md) —— 释放隔离的PMT 72 | + [pmt_unpin](../syscalls/pmt_unpin.md) —— 撤消访问权限并取消固定内存 -------------------------------------------------------------------------------- /zircon/docs/objects/event.md: -------------------------------------------------------------------------------- 1 | # Event 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/9b1d42b6f62ed4a4fe443eb03e020c74abcc8875/docs/objects/event.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | event —— 并发编程中可通知的event对象 12 | 13 | 14 | ## 概要 15 | 16 | 19 | Event是可通知用户的对象,为用户空间保留的8个信号位(*ZX_USER_SIGNAL_0*至*ZX_USER_SIGNAL_7*)可以用于设置,清除和等待事件。 20 | 21 | 22 | ## 描述 23 | 24 | TODO 25 | 26 | 27 | ## 系统调用 28 | 29 | 30 | + [event_create](../syscalls/event_create.md) —— 创建event 31 | 32 | 33 | + [object_signal](../syscalls/object_signal.md) —— 设置或清除对象上的用户信号 34 | 35 | 36 | ## 另见 37 | 38 | 39 | + [eventpair](eventpair.md) —— 连接的可互通知的的一对事件对象 40 | -------------------------------------------------------------------------------- /zircon/docs/objects/eventpair.md: -------------------------------------------------------------------------------- 1 | # Event Pair 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/9b1d42b6f62ed4a4fe443eb03e020c74abcc8875/docs/objects/eventpair.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 11 | eventpair —— 用于并发编程的可相互通知的事件对 12 | 13 | 14 | ## 概要 15 | 16 | 20 | Event pair是相互连接的用户可通知的一对对象,为用户空间保留的8个信号位(*ZX_USER_SIGNAL_0*至*ZX_USER_SIGNAL_7*)可以用于设置或清除本地或Event Pair相对端点上的信号。 21 | 22 | 23 | ## 描述 24 | 25 | TODO 26 | 27 | 28 | ## 系统调用 29 | 30 | 31 | + [eventpair_create](../syscalls/eventpair_create.md) —— 创建一对相互连接的事件 32 | 33 |
34 | 35 | 36 | 37 | + [object_signal_peer](../syscalls/object_signal.md) —— 在相对端点上设置或清除用户信号 -------------------------------------------------------------------------------- /zircon/docs/objects/fifo.md: -------------------------------------------------------------------------------- 1 | # FIFO 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/9b1d42b6f62ed4a4fe443eb03e020c74abcc8875/docs/objects/fifo.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | FIFO —— 先入先出的进程间通信队列 12 | 13 | 14 | ## 概要 15 | 16 | 20 | 21 | FIFO的目的是成为共享内存传输的控制面,它们的读写操作比[socket](socket.md)或[channel](channel.md)更高效,但对元素和缓冲区的大小有严格的限制。 22 | 23 | 24 | ## 描述 25 | 26 | TODO 27 | 28 | 29 | ## 系统调用 30 | 31 | 34 | 35 | + [fifo_create](../syscalls/fifo_create.md) —— 创建fifo 36 | + [fifo_read](../syscalls/fifo_read.md) —— 从fifo中读取数据 37 | + [fifo_write](../syscalls/fifo_write.md) —— 写入数据到fifo中 -------------------------------------------------------------------------------- /zircon/docs/objects/interrupts.md: -------------------------------------------------------------------------------- 1 | # Interrupts 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/fd7c237ca14f48dd4f1d7a0a7c3d2d3d304dbb47/docs/objects/interrupts.md) 5 | 6 | --- 7 | 8 | 9 | ## 名称 10 | 11 | 12 | interrupt —— 用户模式的I/O中断传递 13 | 14 | 15 | 16 | ## 概要 17 | 18 | 20 | 中断对象允许用户空间创建、发送信号以及等待硬件中断。 21 | 22 | 23 | ## 描述 24 | 25 | TODO 26 | 27 | 28 | ## 注释 29 | 32 | 中断对象仅供DDK专用,通常不提供给用户空间进程使用。 33 | 34 | 35 | ## 系统调用 36 | 37 | 42 | 43 | + [interrupt_create](../syscalls/interrupt_create.md) —— 创建中断对象 44 | + [interrupt_bind](../syscalls/interrupt_bind.md) —— 绑定中断向量到中断对象句柄 45 | + [interrupt_wait](../syscalls/interrupt_wait.md) —— 等待中断对象句柄产生中断 46 | + [interrupt_ack](../syscalls/interrupt_ack.md) —— 确认应答并重新启动中断。 47 | + [interrupt_destroy](../syscalls/interrupt_destroy.md) —— 销毁中断对象 48 | + [interrupt_trigger](../syscalls/interrupt_trigger.md) —— 触发虚拟中断对象 -------------------------------------------------------------------------------- /zircon/docs/objects/job.md: -------------------------------------------------------------------------------- 1 | # Job(作业) 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/a73de2ea77ae17a6b2e57286299e57cc2b838dc7/docs/objects/job.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | job —— 控制一组进程 12 | 13 | 14 | ## 概要 15 | 16 | 21 | 作业是一组进程,以及其它可能的(子)作业的集合。 22 | 作业用于追踪用于执行内核操作的权限(即使用各种选项进行各种系统调用),并追踪和限制基本资源(例如,内存和CPU)的消耗。 23 | 每个进程都属于一个作业中。 24 | 作业也可以相互嵌套,除根作业之外的每个作业也属于某个单个(父)作业。 25 | 26 | 27 | ## 描述 28 | 29 | 30 | 作业是由以下内容组成的对象: 31 | 35 | + 指向父作业的引用 36 | + 一组子作业(每个子作业都以本作业作为其父作业) 37 | + 一组[进程](process.md) 38 | + 一组策略[⚠未实现] 39 | 40 | 42 | 作业控制“应用程序”由作为单个项被控制的多个进程所组成。 43 | 44 | 45 | ## 系统调用 46 | 47 | 57 | 58 | + [job_create](../syscalls/job_create.md) —— 创造新的子作业。 59 | + [process_create](../syscalls/process_create.md) —— 在作业中创建新进程。 60 | + [job_set_policy](../syscalls/job_set_policy.md) —— 为作业中的新进程设置策略。 61 | + [task_resume](../syscalls/task_resume.md) —— 触发暂停的任务(task)继续运行。 62 | + [task_bind_exception_port](../syscalls/task_bind_exception_port.md) —— 附加异常端口到一个任务上。 63 | + [task_kill](../syscalls/task_kill.md) —— 触发任务的暂停。 -------------------------------------------------------------------------------- /zircon/docs/objects/log.md: -------------------------------------------------------------------------------- 1 | # Log 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/9b1d42b6f62ed4a4fe443eb03e020c74abcc8875/docs/objects/log.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | Log —— 内核调试日志 12 | 13 | 14 | ## 概要 15 | 17 | Log对象允许用户空间读取和写入内核调试日志。 18 | 19 | 20 | ## 描述 21 | 22 | TODO 23 | 24 | 25 | ## 注释 26 | 27 | 30 | 日志对象将来可能会停止供用户空间进程通用使用。因为设计它们本意是,为内核和设备驱动程序提供内部日志记录。 31 | 32 | 33 | ## 系统调用 34 | 38 | 39 | + log_create —— 创建内核管理的日志读写对象 40 | + log_write —— 写入日志项到log中 41 | + log_read —— 从log中读取日志项 42 | -------------------------------------------------------------------------------- /zircon/docs/objects/pinned_memory_token.md: -------------------------------------------------------------------------------- 1 | 2 | # 固定内存令牌 (PMT) 3 | --- 4 | 5 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/fc9cc3958ceaacca9447023b8b272f6b648f75ee/docs/objects/pinned_memory_token.md) 6 | 7 | --- 8 | 9 | ## 名称 10 | 11 | 12 | pinned_memory_token —— 表示对设备DMA的授权 13 | 14 | 15 | ## 概要 16 | 19 | 固定内存令牌(Pinned Memory Token, 即PMT)表示对执行DMA的设备的特别访问授权。 20 | 21 | 22 | ## 描述 23 | 24 | 30 | 通过[使用BTI对象固定内存](../syscalls/bti_pin.md)可获取PMT。 31 | 只要PMT对象存在,对于与BTI关联的设备访问由PMT表示的内存都是有效的。 32 | 当无论是通过**zx_handle_close()**,**zx_pmt_unpin ()**,还是进程终止导致PMT对象被销毁时,对其代表的内存的访问都变得不合法(这是由具有这种功能的系统上的硬件强制执行的,例如IOMMU)。 33 | 34 | 35 | TODO(teisenbe):描述隔离(quarantining) 36 | 37 | 38 | ## 另见 39 | 40 | 41 | + [bus_transaction_initiator](bus_transaction_initiator.md) —— 总线事务启动器 42 | 43 | 44 | ## 系统调用 45 | 46 | 48 | 49 | + [bti_pin](../syscalls/bti_pin.md) —— 固定内存并授予BTI对其的访问权限 50 | + [pmt_unpin](../syscalls/pmt_unpin.md) —— 撤消访问权限并取消固定内存 -------------------------------------------------------------------------------- /zircon/docs/objects/port.md: -------------------------------------------------------------------------------- 1 | # Port 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/d17af78df889107ed5035b3f420567675a3c6ee5/docs/objects/port.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | port —— 信号和邮箱(mailbox)原语 12 | 13 | 14 | ## 概要 15 | 16 | 20 | 端口(port)允许线程等待从各种事件对象传递的数据包。这些事件包括port上的显式排队,绑定到端口的其他句柄上的异步等待以及来自IPC的异步消息传递。 21 | 22 | 23 | ## 描述 24 | 25 | TODO 26 | 27 | 28 | ## 系统调用 29 | 30 | 33 | 34 | + [port_create](../syscalls/port_create.md) —— 创建端口 35 | + [port_queue](../syscalls/port_queue.md) —— 发送数据包到端口 36 | + [port_wait](../syscalls/port_wait.md) —— 等待数据包到达端口 37 | -------------------------------------------------------------------------------- /zircon/docs/objects/task.md: -------------------------------------------------------------------------------- 1 | # Task(任务) 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/af07ad38812f7566b6c859238ece1bb4c70b969e/docs/objects/task.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 11 | 任务 —— 内核对象中的“可运行”子类(包括线程,进程和作业) 12 | 13 | 14 | ## 概要 15 | 16 | 19 | [线程](thread.md),[进程](process.md)和[作业](job.md)对象都是任务类型。 20 | 他们都具有被挂起,恢复和终止的能力。 21 | 22 | 23 | ## 描述 24 | 25 | TODO 26 | 27 | 28 | ## 系统调用 29 | 30 | 33 | 34 | + [task_resume](../syscalls/task_resume.md) —— 继续运行已挂起的任务 35 | + [task_bind_exception_port](../syscalls/task_bind_exception_port.md) —— 在任务上挂载异常端口 36 | + [task_kill](../syscalls/task_kill.md) —— 停止任务的运行 -------------------------------------------------------------------------------- /zircon/docs/syscalls/bti_create.md: -------------------------------------------------------------------------------- 1 | # zx_bti_create 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/fc9cc3958ceaacca9447023b8b272f6b648f75ee/docs/syscalls/bti_create.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | bti_create —— 创建新的总线事务启动器 12 | 13 | 14 | ## 概要 15 | 16 | ``` 17 | #include 18 | 19 | zx_status_t zx_bti_create(zx_handle_t iommu, uint32_t options, uint64_t bti_id, zx_handle_t* out); 20 | 21 | ``` 22 | 23 | 24 | ## 描述 25 | 26 | 29 | **bti_create()** 创建一个新的[总线事务启动器](../objects/bus_transaction_initiator.md),给定IOMMU的句柄和该IOMMU下游设备的硬件事务标识符。 30 | 31 | 32 | *options*必须为0(保留用作将来创建标识位的定义)。 33 | 34 | 37 | 调用成功后,将返回新BTI的句柄。 38 | 该句柄将具有**ZX_RIGHT_READ**,**ZX_RIGHT_WRITE**,**ZX_RIGHT_MAP**,**ZX_RIGHT_INSPECT**,**ZX_RIGHT_DUPLICATE**和**ZX_RIGHT_TRANSFER**权限。 39 | 40 | 41 | ## 权限 42 | 43 | TODO(ZX-2399) 44 | 45 | 46 | ## 返回值 47 | 48 | 51 | **bti_create()** 调用成功则返回**ZX_OK**和(通过*out*)返回新BTI句柄。 52 | 如果调用失败,则返回负的错误码。 53 | 54 | 55 | ## 错误码 56 | 57 | 58 | **ZX_ERR_BAD_HANDLE**:*iommu*是无效句柄。 59 | 60 | 61 | **ZX_ERR_WRONG_TYPE**:*iommu*不是iommu类型句柄。 62 | 63 | 64 | **ZX_ERR_ACCESS_DENIED**:*iommu*句柄没有足够的权限。 65 | 68 | **ZX_ERR_INVALID_ARGS**:*bti_id*在给定的IOMMU上无效,或*out*是无效指针,或*options*非零。 69 | 70 | 73 | **ZX_ERR_NO_MEMORY**:由于内存不足导致的失败。而用户空间无法处理这个(不太可能发生的)错误。在将来的构建版本中,将不再出现此错误。 74 | 75 | 76 | ## 另见 77 | 78 | [bti_pin](bti_pin.md), 79 | [bti_release_quarantine](bti_release_quarantine.md) 80 | [pmt_unpin](pmt_unpin.md). 81 | -------------------------------------------------------------------------------- /zircon/docs/syscalls/bti_release_quarantine.md: -------------------------------------------------------------------------------- 1 | # zx_bti_release_quarantine 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/fc9cc3958ceaacca9447023b8b272f6b648f75ee/docs/syscalls/bti_release_quarantine.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | bti_release_quarantine —— 释放所有隔离的PMT 12 | 13 | 14 | ## 概要 15 | 16 | ``` 17 | #include 18 | 19 | zx_status_t zx_bti_release_quarantine(zx_handle_t bti); 20 | 21 | ``` 22 | 23 | 24 | ## 描述 25 | 26 | 30 | **bti_release_quarantine()** 释放给定BTI的所有隔离PMT, 31 | 这将同时释放PMT对VMO和物理页面固定的底层引用,底层物理页面可在此调用后被释放并重新分配。 32 | 33 | 34 | ## 权限 35 | 36 | TODO(ZX-2399) 37 | 38 | 39 | ## 返回值 40 | 41 | 43 | 44 | **bti_release_quarantine()** 调用成功返回**ZX_OK**。 45 | 如果调用失败,则返回负的错误码。 46 | 47 | 48 | ## 错误码 49 | 50 | 51 | **ZX_ERR_BAD_HANDLE**:*bti*是无效句柄。 52 | 53 | 54 | **ZX_ERR_WRONG_TYPE**:*bti*不是BTI类型句柄。 55 | 56 | 57 | **ZX_ERR_ACCESS_DENIED**:*bti*没有*ZX_RIGHT_WRITE*权限。 58 | 59 | 60 | ## 另见 61 | 62 | [bti_pin](bti_pin.md), 63 | [pmt_unpin](pmt_unpin.md) -------------------------------------------------------------------------------- /zircon/docs/syscalls/cache_flush.md: -------------------------------------------------------------------------------- 1 | # zx_cache_flush 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/a9ff88e1fd77ac9146e98980080a246418057ad5/docs/syscalls/cache_flush.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | zx_cache_flush —— 刷新CPU数据和/或指令缓存 12 | 13 | 14 | ## 概要 15 | 16 | ``` 17 | #include 18 | 19 | zx_status_t zx_cache_flush(const void* addr, size_t size, uint32_t flags); 20 | ``` 21 | 22 | 23 | ## 描述 24 | 25 | 28 | **zx_cache_flush()** 刷新覆盖给定虚拟地址范围内存的CPU缓存。 29 | 如果该范围内存不可读,则线程可能会像其他数据读取一样发生故障。 30 | 31 | 32 | *flags*是如下的标志位按位取或: 33 | 34 | * **ZX_CACHE_FLUSH_DATA** 35 | 36 | 38 | 清理(写回)数据缓存,使得在此CPU先前的写入数据在主存中可见。 39 | 40 | 42 | 43 | 44 | 47 | * **ZX_CACHE_FLUSH_INVALIDATE**(仅与**ZX_CACHE_FLUSH_DATA**组合时有效) 48 | 49 | 清理(写回)数据缓存,然后使数据缓存无效,使得在此CPU先前的写入数据在主存中可见,并且未来在此CPU上的读取将看到对主存的外部更改。 50 | 51 | * **ZX_CACHE_FLUSH_INSN** 52 | 53 | 57 | 同步指令缓存与数据缓存,使得在该CPU上的先前写入对取指令可见。 58 | 如果将其与**ZX_CACHE_FLUSH_DATA**组合使用,则先前的写操作将对主存以及取指令可见。 59 | 62 | **ZX_CACHE_FLUSH_DATA**和**ZX_CACHE_FLUSH_INSN**标志位必须至少有一个包含在*flags*中。 63 | 64 | 65 | ## 权限 66 | 67 | TODO(ZX-2399) 68 | 69 | 70 | ## 返回值 71 | 72 | 73 | **zx_cache_flush()** 调用成功则返回**ZX_OK**,失败时返回错误码。 74 | 75 | 76 | ## 错误码 77 | 78 | 79 | **ZX_ERR_INVALID_ARGS**:*flags*无效。 -------------------------------------------------------------------------------- /zircon/docs/syscalls/channel_create.md: -------------------------------------------------------------------------------- 1 | # zx_channel_create 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/9b1d42b6f62ed4a4fe443eb03e020c74abcc8875/docs/syscalls/channel_create.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | channel_create —— 创建channel 12 | 13 | 14 | ## 概要 15 | 16 | ``` 17 | #include 18 | 19 | zx_status_t zx_channel_create(uint32_t options, 20 | zx_handle_t* out0, zx_handle_t* out1); 21 | 22 | ``` 23 | 24 | 25 | ## 描述 26 | 27 | 30 | **channel_create()** 创建一个双向数据报式的消息传输通道,能够从一侧向另一侧发送原始字节数据和句柄。 31 | 32 | 35 | 调用成功则返回两个句柄,分别提供对通道两侧的访问,写入一个句柄的消息可以在相反的方向上被读取。 36 | 37 | 41 | 返回的句柄具有*ZX_RIGHT_TRANSFER*(允许它们通过写入channel发送到另一个进程),*ZX_RIGHT_WRITE*(允许将消息写入它们)和*ZX_RIGHT_READ*(允许从它们中读取消息)权限。 42 | 43 | 44 | ## 权限 45 | 46 | TODO(ZX-2399) 47 | 48 | 49 | ## 返回值 50 | 51 | 53 | **channel_create()** 调用成功则返回**ZX_OK**。如果发生错误,则返回负的错误码。 54 | 55 | 56 | ## 错误码 57 | 58 | 60 | **ZX_ERR_INVALID_ARGS**: *out0*或*out1*是无效指针或NULL,或*options*是0以外的其它任何值。 61 | 62 | 65 | **ZX_ERR_NO_MEMORY**:由于内存不足导致的失败。而用户空间无法处理这个(不太可能发生的)错误。在将来的构建版本中,将不再出现此错误。 66 | 67 | 68 | ## 另见 69 | 70 | 71 | 79 | 80 | 81 | [handle_close](handle_close.md),[handle_duplicate](handle_duplicate.md),[handle_replace](handle_replace.md),[object_wait_one](object_wait_one.md),[object_wait_many](object_wait_many.md),[channel_call](channel_call.md),[channel_read](channel_read.md),[channel_write](channel_write.md)。 82 | -------------------------------------------------------------------------------- /zircon/docs/syscalls/clock_get.md: -------------------------------------------------------------------------------- 1 | # zx_clock_get 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/9b1d42b6f62ed4a4fe443eb03e020c74abcc8875/docs/syscalls/clock_get.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | clock_get —— 获取当前时间。 12 | 13 | 14 | ## 概要 15 | 16 | ``` 17 | #include 18 | 19 | zx_status_t zx_clock_get_new(uint32_t clock_id, zx_time_t* out_time); 20 | zx_time_t zx_clock_get(zx_clock_t clock_id); 21 | ``` 22 | 23 | 24 | ## 描述 25 | 26 | 28 | **zx_clock_get()** 返回*clock_id*的当前时间,如果*clock_id*无效,则返回0。 29 | 30 | 32 | **zx_clock_get_new()** 通过*out_time*返回*clock_id*类型的当前时间,以及*clock_id*是否有效。 33 | 34 | 35 | ## 支持的CLOCK ID 36 | 37 | 38 | *ZX_CLOCK_MONOTONIC*:自系统启动以来的纳秒数。 39 | 40 | *ZX_CLOCK_UTC*:自Unix epoch(即1970年1月1日0时 UTC+0)以来的wall clock时钟已经历的纳秒数。 41 | 42 | 43 | *ZX_CLOCK_THREAD*:当前线程已运行的纳秒数。 44 | 45 | 46 | ## 权限 47 | 48 | TODO(ZX-2399) 49 | 50 | 51 | ## 返回值 52 | 53 | 54 | **zx_clock_get()** 执行成功,则根据给定的时钟ID返回当前时间。 55 | 56 | 57 | **zx_clock_get_new()** 执行成功返回*ZX_OK*。 58 | 59 | 60 | ## 错误码 61 | 62 | 63 | 执行出错时,**zx_clock_get()** 当前返回0。 64 | 65 | 66 | **ZX_ERR_INVALID_ARGS**:*clock_id*是无效的时钟ID,或*out_time*是无效指针。 -------------------------------------------------------------------------------- /zircon/docs/syscalls/clock_get_monotonic.md: -------------------------------------------------------------------------------- 1 | # zx_clock_get_monotonic 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/9b1d42b6f62ed4a4fe443eb03e020c74abcc8875/docs/syscalls/clock_get_monotonic.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | clock_get_monotonic —— 获取当前的monotonic时钟时间。 12 | 13 | 14 | ## 概要 15 | 16 | ``` 17 | #include 18 | 19 | zx_time_t zx_clock_get_monotonic(void); 20 | ``` 21 | 22 | 23 | ## 描述 24 | 25 | 28 | **zx_clock_get_monotonic()** 返回当前系统monotonic时钟时间,即自系统启动以来的纳秒数。 29 | 30 | 31 | ## 权限 32 | 33 | TODO(ZX-2399) 34 | 35 | 36 | ## 返回值 37 | 38 | 39 | **zx_clock_get()** 返回当前monotonic时间。 40 | 41 | 42 | ## 错误码 43 | 44 | 45 | 46 | **zx_clock_get_monotonic()**不会失败。 -------------------------------------------------------------------------------- /zircon/docs/syscalls/cprng_add_entropy.md: -------------------------------------------------------------------------------- 1 | # zx_cprng_add_entropy 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/b1ee78419ac2dc207a2f5b2e8fc69fa56101df90/docs/syscalls/cprng_add_entropy.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | zx_cprng_add_entropy —— 将熵添加到内核CPRNG中 12 | 13 | 14 | ## 概要 15 | 16 | ``` 17 | #include 18 | 19 | zx_status_t zx_cprng_add_entropy(const void* buffer, size_t buffer_size); 20 | ``` 21 | 22 | 23 | ## 描述 24 | 25 | 28 | **zx_cprng_add_entropy()** 是特权操作,它将给定的熵混合到内核CPRNG中。 29 | 它一次最多只接受**ZX_CPRNG_ADD_ENTROPY_MAX_LEN**个字节的熵。 30 | 31 | 32 | ## 权限 33 | 34 | TODO(ZX-2399) 35 | 36 | 37 | ## 返回值 38 | 39 | 40 | **zx_cprng_add_entropy()** 调用成功则返回**ZX_OK**。 41 | 42 | 43 | ## 错误码 44 | 45 | 47 | **ZX_ERR_INVALID_ARGS**:*buffer_size*太大,或者*buffer*不是有效的用户空间指针。 48 | 49 | ## BUGS 50 | 51 | 52 | 该系统调用需要特别高的权限。 -------------------------------------------------------------------------------- /zircon/docs/syscalls/cprng_draw.md: -------------------------------------------------------------------------------- 1 | # zx_cprng_draw 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/b1ee78419ac2dc207a2f5b2e8fc69fa56101df90/docs/syscalls/cprng_draw.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | zx_cprng_draw —— 从内核的CPRNG中提取随机数据 12 | 13 | 14 | ## 概要 15 | 16 | ``` 17 | #include 18 | 19 | void zx_cprng_draw(void* buffer, size_t buffer_size); 20 | ``` 21 | 22 | 23 | ## 描述 24 | 25 | 27 | **zx_cprng_draw()** 的功能是从内核CPRNG中抽取随机字节。 28 | 这些随机数据适用于加密应用程序。 29 | 30 | 32 | 需要大量随机数的客户端应考虑使用这些字节,来为用户空间随机数生成器设定种子,以获得更好的性能。 33 | 34 | 35 | ## 权限 36 | 37 | TODO(ZX-2399) 38 | 39 | 40 | ## 注释 41 | 42 | 44 | 如果**buffer**不是有效的用户空间指针,则**zx_cprng_draw()**j将触发调用进程的终止。 45 | 46 | 48 | 除此之外,没有其它的错误条件。 49 | 如果它的参数都是有效的,则**zx_cprng_draw()** 将调用成功。 -------------------------------------------------------------------------------- /zircon/docs/syscalls/deadline_after.md: -------------------------------------------------------------------------------- 1 | # zx_deadline_after 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/9b1d42b6f62ed4a4fe443eb03e020c74abcc8875/docs/syscalls/deadline_after.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | deadline_after —— 将相对于现在的时间转换为绝对截止时间(deadline) 12 | 13 | 14 | ## 概要 15 | 16 | ``` 17 | #include 18 | 19 | zx_time_t zx_deadline_after(zx_duration_t nanoseconds) 20 | ``` 21 | 22 | 23 | ## 描述 24 | 25 | 28 | **zx_deadline_after()** 是一个用于从相对现在的时间转换为绝对截止时间的工具函数。如果*nanoseconds*加上当前时间大于``zx_time_t``的最大可能值,则输出被限制为**ZX_TIME_INFINITE**。 29 | 30 | 31 | ## 权限 32 | 33 | TODO(ZX-2399) 34 | 35 | 36 | ## 返回值 37 | 38 | 40 | **zx_deadline_after()** 返回从现在起*nanoseconds*纳秒的绝对时间(相对于**CLOCK_MONOTONIC**)。 41 | 42 | ## ERRORS 43 | 44 | 45 | **zx_deadline_after()** 不报告任何错误情况。 46 | 47 | 48 | ## 示例 49 | 50 | 55 | ``` 56 | // 休眠50ms 57 | zx_time_t deadline = zx_deadline_after(ZX_MSEC(50)); 58 | zx_nanosleep(deadline); 59 | ``` 60 | 61 | 62 | ## 另见 63 | 64 | [ticks_get](ticks_get.md) -------------------------------------------------------------------------------- /zircon/docs/syscalls/event_create.md: -------------------------------------------------------------------------------- 1 | # zx_event_create 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/9b1d42b6f62ed4a4fe443eb03e020c74abcc8875/docs/syscalls/event_create.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 11 | event_create —— 创建event对象 12 | 13 | 14 | ## 概要 15 | 16 | ``` 17 | #include 18 | 19 | zx_status_t zx_event_create(uint32_t options, zx_handle_t* out); 20 | ``` 21 | 22 | 23 | ## 描述 24 | 25 | 28 | **event_create()** 创建一个event对象,该对象是可通知的。也就是说,可以使用**object_signal()** 来操纵其*ZX_USER_SIGNAL_n*(其中*n*是0到7)信号。 29 | 30 | 32 | 新创建的句柄将具有*ZX_RIGHT_TRANSFER*,*ZX_RIGHT_DUPLICATE*,*ZX_RIGHT_READ*,*ZX_RIGHT_WRITE*和*ZX_RIGHT_SIGNAL*权限。 33 | 34 | 35 | ## 权限 36 | 37 | TODO(ZX-2399) 38 | 39 | 40 | ## 返回值 41 | 42 | 44 | **event_create()** 成功则返回ZX_OK和(通过*out*)返回有效的event句柄。失败时,则返回错误码。 45 | 46 | 47 | ## 错误码 48 | 49 | 50 | **ZX_ERR_INVALID_ARGS**: *out*是无效指针,或*options*非零。 51 | 52 | 55 | **ZX_ERR_NO_MEMORY**:由于内存不足导致的失败。而用户空间无法处理这个(不太可能发生的)错误。在将来的构建版本中,将不再出现此错误。 56 | 57 | 58 | ## 另见 59 | 60 | 67 | 68 | [eventpair_create](eventpair_create.md),[handle_close](handle_close.md), [handle_duplicate](handle_duplicate.md),[object_wait_one](object_wait_one.md),[object_wait_many](object_wait_many.md),[handle_replace](handle_replace.md),[object_signal](object_signal.md)。 69 | -------------------------------------------------------------------------------- /zircon/docs/syscalls/eventpair_create.md: -------------------------------------------------------------------------------- 1 | # zx_eventpair_create 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/9b1d42b6f62ed4a4fe443eb03e020c74abcc8875/docs/syscalls/eventpair_create.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | eventpair_create —— 创建一对event pair。 12 | 13 | 14 | ## 概要 15 | 16 | ``` 17 | #include 18 | 19 | zx_status_t zx_eventpair_create(uint32_t options, zx_handle_t* out0, zx_handle_t* out1); 20 | ``` 21 | 22 | 23 | 24 | ## 描述 25 | 26 | 28 | **eventpair_create()** 创建一对可相互信号通知的event pair对象。 29 | 34 | 可以使用**object_signal()**(修改对象本身上的信号)或**object_signal_peer()**(修改其相对event对象的信号),来设置或清除*ZX_EVENTPAIR_SIGNALED*和*ZX_USER_SIGNAL_n*(其中*n*是0到7)信号。 35 | 36 | 38 | 当其中一个event对象的所有句柄都已关闭时,*ZX_EVENTPAIR_PEER_CLOSED*信号将在相对对象上被设置。 39 | 40 | 43 | 新创建的句柄具有*ZX_RIGHT_TRANSFER*,*ZX_RIGHT_DUPLICATE*,*ZX_RIGHT_READ *,*ZX_RIGHT_WRITE*,*ZX_RIGHT_SIGNAL*和*ZX_RIGHT_SIGNAL_PEER*权限。 44 | 45 | 46 | 目前,尚不支持任何选项,因此*options*必须设置为0。 47 | 48 | 49 | ## 权限 50 | 51 | TODO(ZX-2399) 52 | 53 | 54 | ## 返回值 55 | 56 | 58 | **eventpair_create()** 调用成功则返回**ZX_OK**。失败时,返回(负的)错误码。 59 | 60 | 61 | ## 错误码 62 | 63 | 64 | **ZX_ERR_INVALID_ARGS**:*out0*或*out1*是无效指针或NULL。 65 | 66 | 67 | **ZX_ERR_NOT_SUPPORTED**:*options*设置了不支持的标志位(即*options*不是0)。 68 | 69 | 72 | **ZX_ERR_NO_MEMORY**:由于内存不足导致的失败。而用户空间无法处理这个(不太可能发生的)错误。在将来的构建版本中,将不再出现此错误。 73 | 74 | 75 | ## 另见 76 | 77 | 85 | [event_create](event_create.md),[handle_close](handle_close.md),[handle_duplicate](handle_duplicate.md),[object_wait_one](object_wait_one.md),[object_wait_many](object_wait_many.md),[handle_replace](handle_replace.md),[object_signal](object_signal.md),[object_signal_peer](object_signal.md)。 86 | -------------------------------------------------------------------------------- /zircon/docs/syscalls/fifo_create.md: -------------------------------------------------------------------------------- 1 | # zx_fifo_create 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/9b1d42b6f62ed4a4fe443eb03e020c74abcc8875/docs/syscalls/fifo_create.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | fifo_create —— 创建fifo 12 | 13 | 14 | ## 概要 15 | 16 | ``` 17 | #include 18 | 19 | zx_status_t zx_fifo_create(size_t elem_count, size_t elem_size, 20 | uint32_t options, 21 | zx_handle_t* out0, zx_handle_t* out1); 22 | 23 | ``` 24 | 25 | 26 | ## 描述 27 | 28 | 32 | 33 | **fifo_create()** 创建一个fifo,它实际上是*elem_count*项,每个项有*elem_size*字节的一对fifo。调用的结果是返回两个端点(endpoint)。从一个端点写入数据的结果,会将一个元素加入到相对端点(opposing endpoint)能够读取的fifo中。 34 | 35 | 39 | fifo旨在成为共享内存传输的控制面。它们的读写操作比*socket*或*channel*更高效,但是对元素和缓冲区的大小有严格的限制。 40 | 41 | 43 | *elem_count*大小必须是2的幂,每个fifo的总大小(*elem_count* * *elem_size*)不得超过4096个字节。 44 | 45 | 46 | *options*参数必须为0。 47 | 48 | 49 | ## 权限 50 | 51 | TODO(ZX-2399) 52 | 53 | 54 | ## 返回值 55 | 58 | 59 | 60 | **fifo_create()** 函数执行成功则返回 **ZX_OK**,如果发生错误,将返回以下值之一。 61 | 62 | 63 | 64 | ## 错误码 65 | 66 | 68 | 69 | **ZX_ERR_INVALID_ARGS**: *out0*或*out1*是无效指针或NULL,或者*options*是0以外的其它任何值。 70 | 71 | 73 | **ZX_ERR_OUT_OF_RANGE**: 可能是下列情况之一,*elem_count*或*elem_size*为零;*elem_count*不是2的幂;*elem_count* * *elem_size*大于4096。 74 | 75 | 78 | 79 | **ZX_ERR_NO_MEMORY**:由于内存不足导致的失败。而用户空间无法处理这个(不太可能发生的)错误。在将来的构建版本中,将不再出现此错误。 80 | 81 | 82 | ## 另见 83 | 84 | 86 | 87 | [fifo_read](fifo_read.md),[fifo_write](fifo_write.md)。 88 | -------------------------------------------------------------------------------- /zircon/docs/syscalls/fifo_write.md: -------------------------------------------------------------------------------- 1 | # zx_fifo_write 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/9b1d42b6f62ed4a4fe443eb03e020c74abcc8875/docs/syscalls/fifo_write.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | fifo_write —— 写入数据到fifo中 12 | 13 | 14 | ## 概要 15 | 16 | ``` 17 | #include 18 | 19 | zx_status_t zx_fifo_write(zx_handle_t handle, size_t elem_size, 20 | const void* buffer, size_t count, size_t* actual_count); 21 | ``` 22 | 23 | 24 | ## 描述 25 | 26 | 28 | **fifo_write()** 尝试从*buf*向*handle*指定的fifo写入*count*个元素(即*count * elem_size*个字节)。 29 | 30 | 33 | 如果fifo中没有足够的空间来容纳所有元素,则写入比请求更少数量的元素,实际写入的元素数量通过*actual_count*返回。 34 | 35 | 37 | *elem_size*指定的元素大小必须与传给 **fifo_create()** 的元素大小一致。 38 | 39 | 42 | *actual_count*允许为NULL,这对于写入单个元素时很有用:如果*count*为1,且**fifo_write()** 返回 **ZX_OK**,那么*actual_count*将保证为1,因此可以安全地被忽略掉。 43 | 44 | 45 | 写入零个元素是非法的。 46 | 47 | 48 | ## 权限 49 | 50 | 51 | *handle*必须具有**ZX_RIGHT_WRITE**权限。 52 | 53 | 54 | ## 返回值 55 | 56 | 58 | **fifo_write()** 调用成功则返回 **ZX_OK**,并通过*actual_count*返回写入的元素数量(至少为1)。 59 | 60 | 61 | ## 错误码 62 | 63 | 78 | 79 | **ZX_ERR_BAD_HANDLE**: *handle*是无效句柄。 80 | 81 | **ZX_ERR_WRONG_TYPE**: *handle*不是fifo类型句柄。 82 | 83 | **ZX_ERR_INVALID_ARGS**: *buffer*是无效指针或*actual_count*是无效指针。 84 | 85 | **ZX_ERR_OUT_OF_RANGE**: *count*为零或*elem_size*不等于fifo的元素大小。 86 | 87 | **ZX_ERR_ACCESS_DENIED**: *handle*没有**ZX_RIGHT_WRITE**权限。 88 | 89 | **ZX_ERR_PEER_CLOSED**: fifo的另一侧已关闭。 90 | 91 | **ZX_ERR_SHOULD_WAIT**: fifo已满。 92 | 93 | 94 | ## 另见 95 | 96 | 98 | 99 | [fifo_create](fifo_create.md),[fifo_read](fifo_read.md)。 100 | 101 | -------------------------------------------------------------------------------- /zircon/docs/syscalls/futex_requeue.md: -------------------------------------------------------------------------------- 1 | # zx_futex_requeue 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/9b1d42b6f62ed4a4fe443eb03e020c74abcc8875/docs/syscalls/futex_requeue.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 12 | futex_requeue —— 唤醒一些等待futex的线程,并将另外一些等待线程移动到另一个等待队列中。 13 | 14 | 15 | ## 概要 16 | 17 | ``` 18 | #include 19 | 20 | zx_status_t zx_futex_requeue(const zx_futex_t* value_ptr, uint32_t wake_count, 21 | int current_value, const zx_futex_t* requeue_ptr, 22 | uint32_t requeue_count); 23 | ``` 24 | 25 | 26 | ## 描述 27 | 28 | 34 | Requeuing是唤醒的泛化操作。首先,内核验证`current_value`中的值与`value_ptr`中的futex值是否匹配,如果不匹配则报告*ZX_ERR_BAD_STATE*。唤醒`wake_count`个线程后,`requeue_count`个线程从原来的futex的等待队列被移动到对应于另一个futex(即`requeue_ptr`)的等待队列中。 35 | 36 | 37 | 这种requeuing行为可用于避免在醒来时产生"[thundering herds](https://en.wikipedia.org/wiki/Thundering_herd_problem)"问题。 38 | 39 | 40 | ## 权限 41 | 42 | TODO(ZX-2399) 43 | 44 | 45 | ## 返回值 46 | 47 | 48 | **futex_requeue()** 调用成功则返回**ZX_OK**。 49 | 50 | 51 | ## 错误码 52 | 53 | 57 | **ZX_ERR_INVALID_ARGS**:下列四种情况之一,*value_ptr*是无效的用户空间指针;*value_ptr*与*requeue_ptr*是相同的futex;*value_ptr*或*requeue_ptr*未对齐;*requeue_ptr*为NULL但*requeue_count*是正值。 58 | 59 | 60 | **ZX_ERR_BAD_STATE**:*current_value*与*value_ptr*的值不匹配。 61 | 62 | 63 | ## 另见 64 | 65 | 67 | [futex_wait](futex_wait.md),[futex_wake](futex_wake.md)。 -------------------------------------------------------------------------------- /zircon/docs/syscalls/futex_wait.md: -------------------------------------------------------------------------------- 1 | # zx_futex_wait 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/9b1d42b6f62ed4a4fe443eb03e020c74abcc8875/docs/syscalls/futex_wait.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | futex_wait —— 等待futex的所有权 12 | 13 | 14 | ## 概要 15 | 16 | ``` 17 | #include 18 | 19 | zx_status_t zx_futex_wait(const zx_futex_t* value_ptr, int32_t current_value, 20 | zx_time_t deadline); 21 | ``` 22 | 23 | 24 | ## 描述 25 | 26 | 30 | **futex_wait()** 以原子方式验证*value_ptr*是否仍包含值*current_value*,并休眠直到通过调用`zx_futex_wake`使futex变得可用。可选地,线程也可以在*deadline*(相对于**ZX_CLOCK_MONOTONIC**)到达后被唤醒。 31 | 32 | 33 | ## 权限 34 | 35 | TODO(ZX-2399) 36 | 37 | 38 | ## 返回值 39 | 40 | 41 | **futex_wait()** 调用成功则返回**ZX_OK**。 42 | 43 | 44 | ## 错误码 45 | 46 | 48 | **ZX_ERR_INVALID_ARGS**:*value_ptr*不是有效的用户空间指针,或*value_ptr*未对齐。 49 | 50 | 51 | **ZX_ERR_BAD_STATE**:*current_value*与*value_ptr*的值不匹配。 52 | 53 | 54 | **ZX_ERR_TIMED_OUT**:线程在*deadline*到达之前没有被唤醒,即通知线程的*deadline*已超时。 55 | 56 | ## 另见 57 | 58 | 60 | [futex_requeue](futex_requeue.md),[futex_wake](futex_wake.md)。 -------------------------------------------------------------------------------- /zircon/docs/syscalls/futex_wake.md: -------------------------------------------------------------------------------- 1 | # zx_futex_wake 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/9b1d42b6f62ed4a4fe443eb03e020c74abcc8875/docs/syscalls/futex_wake.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | futex_wake —— 唤醒等待futex的多个线程。 12 | 13 | 14 | ## 概要 15 | 16 | ``` 17 | #include 18 | 19 | zx_status_t zx_futex_wake(const zx_futex_t* value_ptr, uint32_t wake_count); 20 | ``` 21 | 22 | 23 | ## 描述 24 | 25 | 28 | 唤醒futex将导致`wake_count`个等待`value_ptr` futex的线程被唤醒。 29 | 30 | 32 | 唤醒零个线程,或传入未分配地址的`value_ptr`都不是错误。 33 | 34 | 35 | ## 权限 36 | 37 | TODO(ZX-2399) 38 | 39 | 40 | ## 返回值 41 | 42 | 43 | **futex_wake()** 调用成功则返回**ZX_OK**。 44 | 45 | 46 | ## 错误码 47 | 48 | 49 | **ZX_ERR_INVALID_ARGS**:*value_ptr*未对齐。 50 | 51 | 52 | ## 另见 53 | 54 | 56 | [futex_requeue](futex_requeue.md),[futex_wait](futex_wait.md)。 -------------------------------------------------------------------------------- /zircon/docs/syscalls/futex_wake_handle_close_thread_exit.md: -------------------------------------------------------------------------------- 1 | # zx_futex_wake_handle_close_thread_exit 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/9b1d42b6f62ed4a4fe443eb03e020c74abcc8875/docs/syscalls/futex_wake_handle_close_thread_exit.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | futex_wake_handle_close_thread_exit —— 原子地写入futex,唤醒futex,关闭相关的句柄,并退出线程。 12 | 13 | 14 | ## 概要 15 | 16 | ``` 17 | #include 18 | 19 | _Noreturn void zx_futex_wake_handle_close_thread_exit( 20 | const zx_futex_t* value_ptr, uint32_t wake_count, 21 | int new_value, zx_handle_t close_handle); 22 | ``` 23 | 24 | 25 | ## 描述 26 | 27 | 28 | **futex_wake_handle_close_thread_exit()** 依次执行以下四个操作: 29 | 1. `atomic_store_explicit(value_ptr, new_value, memory_order_release);` 30 | 2. `zx_futex_wake(value_ptr, wake_count);` 31 | 3. `zx_handle_close(close_handle);` 32 | 4. `zx_thread_exit();` 33 | 34 | 38 | 设计目的是在上述第一个操作完成后,其他线程可以取消映射(unmap)或重用包含调用线程的堆栈内存。因此仅对于此调用有效,而对于*zx_futex_wake()* 等其他调用无效。 39 | 40 | 41 | 如果其中任何操作失败,那么该线程会产生一次“自陷”效果(就像`__builtin_trap();`一样)。 42 | 43 | 44 | ## 权限 45 | 46 | TODO(ZX-2399) 47 | 48 | 49 | ## 返回值 50 | 51 | 52 | **futex_wake_handle_close_thread_exit()** 不再返回 53 | 54 | 55 | ## 错误码 56 | 57 | 58 | 无 59 | 60 | 61 | ## 注释 62 | 63 | 70 | 该系统调用目的的是让一个将结束线程,提醒另一个线程等待它的结束,并关闭自己的线程句柄,然后退出。线程句柄不能事先被关闭,因为关闭线程的最后一个句柄会直接杀死该线程。在该调用之前无法写入`value_ptr`,因为在写入之后的任何时候,某个可结合线程可能会重用或解分配此线程的堆栈,进而导致在进入此函数的调用约定上产生问题。 71 | 72 | 75 | 此调用仅用于可结合(joinable)线程,而对于分离(detached)线程请使用[*vmar_unmap_handle_close_thread_exit()*](vmar_unmap_handle_close_thread_exit.md)。 76 | 77 | 78 | ## 另见 79 | 80 | 84 | 85 | [futex_wake](futex_wake.md),[handle_close](handle_close.md),[thread_exit](thread_exit.md),[vmar_unmap_handle_close_thread_exit](vmar_unmap_handle_close_thread_exit.md)。 86 | -------------------------------------------------------------------------------- /zircon/docs/syscalls/handle_close.md: -------------------------------------------------------------------------------- 1 | # zx_handle_close 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/9b1d42b6f62ed4a4fe443eb03e020c74abcc8875/docs/syscalls/handle_close.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | handle_close —— 关闭句柄 12 | 13 | 14 | ## 概要 15 | 16 | ``` 17 | #include 18 | 19 | zx_status_t zx_handle_close(zx_handle_t handle); 20 | ``` 21 | 22 | 23 | ## 描述 24 | 27 | **handle_close()** 操作关闭*handle*,如果没有其他句柄指向该底层对象则触发内核回收该对象。 28 | 29 | 31 | 如果*handle*在待处理的[object_wait_one](object_wait_one.md)或[object_wait_many](object_wait_many.md)调用中使用,则等待将被中止。 32 | 33 | 35 | 关闭特殊的“永远无效的句柄”(**ZX_HANDLE_INVALID**)不是错误,其类似于free(NULL),是有效的调用。 36 | 37 | 38 | ## 权限 39 | 40 | 41 | 无需任何权限。 42 | 43 | 44 | ## 返回值 45 | 46 | 47 | **handle_close()** 成功则返回**ZX_OK**。 48 | 49 | 50 | ## 错误码 51 | 52 | 53 | **ZX_ERR_BAD_HANDLE**:*handle*是无效句柄。 54 | 55 | 56 | ## 另见 57 | 58 | 61 | 62 | [handle_close_many](handle_close_many.md),[handle_duplicate](handle_duplicate.md),[handle_replace](handle_replace.md)。 -------------------------------------------------------------------------------- /zircon/docs/syscalls/handle_close_many.md: -------------------------------------------------------------------------------- 1 | # zx_handle_close_many 2 | --- 3 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/9b1d42b6f62ed4a4fe443eb03e020c74abcc8875/docs/syscalls/handle_close_many.md) 4 | 5 | --- 6 | 7 | ## 名称 8 | 9 | 10 | handle_close_many —— 关闭多个句柄 11 | 12 | 13 | ## 概要 14 | 15 | ``` 16 | #include 17 | 18 | zx_status_t zx_handle_close_many(zx_handle_t* handles, size_t num_handles); 19 | ``` 20 | 21 | 22 | ## 描述 23 | 24 | 27 | **handle_close()** 操作关闭*handles*数组中的所有句柄,并触发内核回收所有没有其他句柄引用的底层对象。 28 | 29 | 30 | 32 | 如果*handles*在待处理的[object_wait_one](object_wait_one.md)或[object_wait_many](object_wait_many.md)调用中使用,则等待将被中止。 33 | 34 | 36 | 即使一个或多个句柄重复或无效,此操作也会关闭传递给它的所有句柄。 37 | 38 | 40 | 关闭特殊的“永远无效的句柄”(**ZX_HANDLE_INVALID**)不是错误,其类似于free(NULL),是有效的调用。 41 | 42 | 43 | ## 权限 44 | 45 | 46 | 无需任何权限。 47 | 48 | 49 | ## 返回值 50 | 51 | 52 | **handle_close_many()** 成功则返回**ZX_OK**。 53 | 54 | 55 | ## 错误码 56 | 57 | 59 | **ZX_ERR_BAD_HANDLE**:*handles*中存在无效句柄,或同一句柄在*handles*中出现多次。 60 | 61 | 62 | ## 另见 63 | 64 | 67 | [handle_close](handle_close.md),[handle_duplicate](handle_duplicate.md),[handle_replace](handle_replace.md)。 68 | -------------------------------------------------------------------------------- /zircon/docs/syscalls/handle_duplicate.md: -------------------------------------------------------------------------------- 1 | # zx_handle_duplicate 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/9b1d42b6f62ed4a4fe443eb03e020c74abcc8875/docs/syscalls/handle_duplicate.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | handle_duplicate —— 复制句柄 12 | 13 | 14 | ## 概要 15 | 16 | ``` 17 | #include 18 | 19 | zx_status_t zx_handle_duplicate(zx_handle_t handle, zx_rights_t rights, zx_handle_t* out); 20 | ``` 21 | 22 | 23 | ## 描述 24 | 25 | 27 | **handle_duplicate()** 创建*handle*的副本,并引用相同的底层对象,以及具有新的访问权限*rights*。 28 | 29 | 32 | 为了与原始句柄具有相同的权限,请使用**ZX_RIGHT_SAME_RIGHTS**。如果需要不同的权限,那么它们必须严格是原始句柄权限的子集。可以使用0来指定无权限的句柄。 33 | 34 | 35 | ## 权限 36 | 37 | 38 | *handle*必须具有**ZX_RIGHT_DUPLICATE**权限。 39 | 40 | 41 | ## 返回值 42 | 43 | 44 | **handle_duplicate()** 执行成功,则返回ZX_OK,并通过*out*返回复制后的句柄。 45 | 46 | 47 | ## 错误码 48 | 49 | 50 | **ZX_ERR_BAD_HANDLE**:*handle*是无效句柄。 51 | 52 | 54 | **ZX_ERR_INVALID_ARGS**:请求的权限*rights*不是*handle*权限的子集,或*out*是无效指针。 55 | 56 | 57 | **ZX_ERR_ACCESS_DENIED**:*handle*没有**ZX_RIGHT_DUPLICATE**权限,即不可被复制。 58 | 59 | 62 | **ZX_ERR_NO_MEMORY**:由于内存不足导致的失败。而用户空间无法处理这个(不太可能发生的)错误。在将来的构建版本中,将不再出现此错误。 63 | 64 | 65 | ## 另见 66 | 67 | 71 | 72 | [handle_close](handle_close.md),[handle_close_many](handle_close_many.md),[handle_replace](handle_replace.md),[rights(英文原文)](https://github.com/fuchsia-mirror/zircon/blob/master/docs/rights.md)。 -------------------------------------------------------------------------------- /zircon/docs/syscalls/handle_replace.md: -------------------------------------------------------------------------------- 1 | # zx_handle_replace 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/9b1d42b6f62ed4a4fe443eb03e020c74abcc8875/docs/syscalls/handle_replace.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | handle_replace —— 替换句柄 12 | 13 | 14 | ## 概要 15 | 16 | ``` 17 | #include 18 | 19 | zx_status_t zx_handle_replace(zx_handle_t handle, zx_rights_t rights, zx_handle_t* out); 20 | ``` 21 | 22 | 23 | ## 描述 24 | 27 | 28 | **handle_replace()** 为*handle*创建一个引用了相同底层对象,并且具有新的访问权限*rights*的替换。 29 | 30 | 31 | 32 | 33 | 替换之后,*handle*将作废掉。 34 | 35 | 38 | 39 | 如果*rights*是**ZX_RIGHT_SAME_RIGHTS**权限,则替换句柄将具有与原始句柄相同的权限。否则,*rights*必须是原始句柄权限的子集。 40 | 41 | 42 | ## 权限 43 | 44 | 45 | 无需任何权限。 46 | 47 | 48 | ## 返回值 49 | 50 | 52 | **handle_replace()** 成功则返回ZX_OK,以及(通过*out传递)替换后的句柄。 53 | 54 | 55 | ## 错误码 56 | 57 | 58 | **ZX_ERR_BAD_HANDLE**:*handle*是无效句柄。 59 | 60 | 62 | **ZX_ERR_INVALID_ARGS**:*rights*请求不是*handle*权限的子集,或者*out*是无效指针。 63 | 64 | 67 | **ZX_ERR_NO_MEMORY**:由于内存不足导致的失败。而用户空间无法处理这个(不太可能发生的)错误。在将来的构建版本中,将不再出现此错误。 68 | 69 | 70 | ## 另见 71 | 72 | 75 | 76 | [handle_close](handle_close.md),[handle_close_many](handle_close_many.md),[handle_duplicate](handle_duplicate.md)。 -------------------------------------------------------------------------------- /zircon/docs/syscalls/interrupt_ack.md: -------------------------------------------------------------------------------- 1 | # zx_interrupt_ack 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/fd7c237ca14f48dd4f1d7a0a7c3d2d3d304dbb47/docs/syscalls/interrupt_ack.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | interrupt_ack —— 确认应答并重新启动中断。 12 | 13 | 14 | ## 概要 15 | 16 | ``` 17 | #include 18 | 19 | zx_status_t zx_interrupt_ack(zx_handle_t handle); 20 | 21 | ``` 22 | 23 | 24 | ## 描述 25 | 26 | 28 | **interrupt_ack()** 确认应答中断对象,并使该对象可以再次被触发(并将数据包传送到它所绑定的端口)。 29 | 30 | 34 | 如果中断对象是物理中断,其它是一个电平中断但仍然有效,或者它是自上次触发后已经置位的边缘中断,则中断将立即触发,并将数据包发送到它所绑定的端口。 35 | 36 | 37 | 虚拟中断的表现和边缘中断一样。 38 | 39 | 42 | 此系统调用仅对绑定到端口的中断进行操作有效。 43 | 使用**interrupt_wait()** 等待的中断不需要通过此调用重新设置——当调用**interrupt_wait()** 时它会自动发生(*译者注:即确认应答并重新启动*)。 44 | 45 | 46 | ## 权限 47 | 48 | TODO(ZX-2399) 49 | 50 | 51 | ## 返回值 52 | 53 | 56 | **interrupt_ack()**调用成功返回**ZX_OK**,如果调用失败,则返回负的错误码。 57 | 58 | 59 | ## 错误码 60 | 61 | 62 | **ZX_ERR_BAD_HANDLE**: *handle*是无效句柄。 63 | 64 | 65 | **ZX_ERR_WRONG_TYPE**:*handle*不是中断类型对象。 66 | 67 | 68 | **ZX_ERR_BAD_STATE**:*handle*未绑定到端口。 69 | 70 | 71 | **ZX_ERR_CANCELED**:之前在*handle*上调用了**zx_interrupt_destroy()**。 72 | 73 | 74 | **ZX_ERR_ACCESS_DENIED**:*handle*缺少**ZX_RIGHT_WRITE**权限。 75 | 76 | 77 | ## 另见 78 | 79 | [interrupt_bind](interrupt_bind.md), 80 | [interrupt_create](interrupt_create.md), 81 | [interrupt_destroy](interrupt_destroy.md), 82 | [interrupt_trigger](interrupt_trigger.md), 83 | [interrupt_wait](interrupt_wait.md), 84 | [port_wait](port_wait.md), 85 | [handle_close](handle_close.md). -------------------------------------------------------------------------------- /zircon/docs/syscalls/interrupt_destroy.md: -------------------------------------------------------------------------------- 1 | # zx_interrupt_destroy 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/fd7c237ca14f48dd4f1d7a0a7c3d2d3d304dbb47/docs/syscalls/interrupt_destroy.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | interrupt_destroy —— 销毁中断对象 12 | 13 | 14 | ## 概要 15 | 16 | ``` 17 | #include 18 | 19 | zx_status_t zx_interrupt_destroy(zx_handle_t handle); 20 | ``` 21 | 22 | 23 | ## 描述 24 | 25 | 28 | **interrupt_destroy()** 的功能是“销毁”一个中断对象,使其处于对其执行任何**interrupt_wait()** 操作都将返回ZX_ERR_CANCELED的状态,并且将它从绑定到的任何端口上解除绑定。 29 | 30 | 33 | 该调用提供了一种干净的关闭机制。 34 | 关闭中断对象的最后一个句柄会导致类似的取消操作,但可能会导致句柄发生使用后关闭(use-after-close)的情况。 35 | 36 | 43 | 如果在取消发生时中断对象已被绑定到某端口,但它尚未触发,或者它已触发但是仍然没有被**port_wait()** 调用的调用者接收到该数据包,则取消成功并且任何尚在传递过程的数据包将被删除。 44 | 否则,将返回**ZX_ERR_NOT_FOUND**,表示已读取该数据包,但调用**interrupt_ack()** 重新设置中断。 45 | 46 | 47 | ## 权限 48 | 49 | TODO(ZX-2399) 50 | 51 | 52 | ## 返回值 53 | 54 | 57 | **interrupt_destroy()** 调用成功返回**ZX_OK**。如果调用失败,则返回负的错误码。 58 | 59 | 60 | ## ERRORS 61 | 62 | 63 | **ZX_ERR_BAD_HANDLE**: *handle*是无效句柄。 64 | 65 | 66 | **ZX_ERR_WRONG_TYPE**:*handle*不是中断类型对象。 67 | 68 | 70 | **ZX_ERR_NOT_FOUND**:*handle*被绑定(但现在已不再是)但是没有被等待。 71 | 72 | 73 | **ZX_ERR_ACCESS_DENIED**:*handle*缺少**ZX_RIGHT_WRITE**权限。 74 | 75 | 76 | ## 另见 77 | 78 | [interrupt_ack](interrupt_ack.md), 79 | [interrupt_bind](interrupt_bind.md), 80 | [interrupt_create](interrupt_create.md), 81 | [interrupt_trigger](interrupt_trigger.md), 82 | [interrupt_wait](interrupt_wait.md), 83 | [port_wait](port_wait.md), 84 | [handle_close](handle_close.md). -------------------------------------------------------------------------------- /zircon/docs/syscalls/interrupt_trigger.md: -------------------------------------------------------------------------------- 1 | # zx_interrupt_trigger 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/fd7c237ca14f48dd4f1d7a0a7c3d2d3d304dbb47/docs/syscalls/interrupt_trigger.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | interrupt_trigger —— 触发虚拟中断对象 12 | 13 | 14 | ## 概要 15 | 16 | ``` 17 | #include 18 | 19 | zx_status_t zx_interrupt_trigger(zx_handle_t handle, uint32_t options, zx_time_t timestamp); 20 | ``` 21 | 22 | 23 | ## 描述 24 | 25 | 29 | **interrupt_trigger()** 用于在中断对象上触发虚拟中断。 30 | 如果中断绑定到某端口,则导致中断消息包到达该端口;或如果**interrupt_wait()** 在等待这个中断,则导致此阻塞调用返回。 31 | 32 | 33 | *options*必须为零。 34 | 35 | 36 | ## 权限 37 | 38 | TODO(ZX-2399) 39 | 40 | 41 | ## 返回值 42 | 43 | 45 | **interrupt_trigger()** 调用成功返回**ZX_OK**。如果调用失败,则返回负的错误码。 46 | 47 | 48 | ## 错误码 49 | 50 | 51 | **ZX_ERR_BAD_HANDLE**: *handle*是无效句柄。 52 | 53 | 54 | 55 | **ZX_ERR_WRONG_TYPE**:*handle*不是中断类型对象。 56 | 57 | 58 | **ZX_ERR_BAD_STATE**:*handle*不是虚拟中断对象。 59 | 60 | 61 | **ZX_ERR_CANCELED**:在*handle*上调用过**zx_interrupt_destroy()**。 62 | 63 | 64 | **ZX_ERR_ACCESS_DENIED**:*handle*缺少**ZX_RIGHT_SIGNAL**权限。 65 | 66 | 67 | 68 | **ZX_ERR_INVALID_ARGS**:*options*值非零。 69 | 70 | 71 | ## 另见 72 | 73 | [interrupt_ack](interrupt_ack.md), 74 | [interrupt_bind](interrupt_bind.md), 75 | [interrupt_create](interrupt_create.md), 76 | [interrupt_destroy](interrupt_destroy.md), 77 | [interrupt_wait](interrupt_wait.md), 78 | [port_wait](port_wait.md), 79 | [handle_close](handle_close.md). -------------------------------------------------------------------------------- /zircon/docs/syscalls/interrupt_wait.md: -------------------------------------------------------------------------------- 1 | # zx_interrupt_wait 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/fd7c237ca14f48dd4f1d7a0a7c3d2d3d304dbb47/docs/syscalls/interrupt_wait.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | interrupt_wait —— 等待中断响应 12 | 13 | 14 | ## 概要 15 | 16 | ``` 17 | #include 18 | 19 | zx_status_t zx_interrupt_wait(zx_handle_t handle, zx_time_t* out_timestamp); 20 | ``` 21 | 22 | 23 | ## 描述 24 | 25 | 28 | **interrupt_wait()** 是一个阻塞式系统调用,它使调用者处于等待状态直到中断被触发。 29 | 它只能用于没有通过**interrupt_bind()** 绑定到任何端口的中断对象。 30 | 31 | 33 | 在等待开始之前,它还将确认中断对象,就好像在它上面调用**interrupt_ack()** 一样。 34 | 35 | 36 | 可以使用**zx_interrupt_destroy()** 或关闭句柄的方式中止等待。 37 | 38 | 39 | ## 权限 40 | 41 | TODO(ZX-2399) 42 | 43 | 44 | ## 返回值 45 | 49 | **interrupt_wait()** 调用成功返回**ZX_OK**,如果*out_timestamp*不是NULL,则返回中断触发(相对于**ZX_CLOCK_MONOTONIC**)的时间戳。 50 | 51 | 52 | ## 错误码 53 | 54 | 55 | **ZX_ERR_BAD_HANDLE**: *handle*是无效句柄。 56 | 57 | 58 | **ZX_ERR_WRONG_TYPE**:*handle*不是中断类型对象。 59 | 60 | 61 | **ZX_ERR_BAD_STATE**:中断对象已绑定到某端口。 62 | 63 | 64 | **ZX_ERR_ACCESS_DENIED**:*handle*缺少**ZX_RIGHT_WAIT**权限。 65 | 66 | 68 | **ZX_ERR_CANCELED**:*handle*在等待时关闭,或在其上调用了**interrupt_destroy()**。 69 | 70 | 71 | **ZX_ERR_INVALID_ARGS**:*out_timestamp*参数是无效指针。 72 | 73 | 74 | ## 另见 75 | 76 | [interrupt_ack](interrupt_ack.md), 77 | [interrupt_bind](interrupt_bind.md), 78 | [interrupt_create](interrupt_create.md), 79 | [interrupt_destroy](interrupt_destroy.md), 80 | [interrupt_trigger](interrupt_trigger.md), 81 | [port_wait](port_wait.md), 82 | [handle_close](handle_close.md). -------------------------------------------------------------------------------- /zircon/docs/syscalls/job_create.md: -------------------------------------------------------------------------------- 1 | # zx_job_create 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/a73de2ea77ae17a6b2e57286299e57cc2b838dc7/docs/syscalls/job_create.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | job_create —— 创建新的子作业 12 | 13 | 14 | ## 概要 15 | ``` 16 | #include 17 | 18 | zx_status_t zx_job_create(zx_handle_t job, uint32_t options, zx_handle_t* out); 19 | 20 | ``` 21 | 22 | 23 | ## 描述 24 | 25 | 27 | **job_create()** 在给定父作业的情况下创建一个新的子[作业对象](../objects/job.md)。 28 | 29 | 30 | 如果调用成功,则返回新创建的作业的句柄。 31 | 32 | 36 | 内核跟踪并限制作业的“高度值”,即与根作业的距离值。 37 | 在高度超过内部“最大高度值”的父作业下创建子作业是非法的(但在该作业下创建进程却是合法的)。 38 | 39 | 40 | 作业句柄可以被用于等待(TODO(cpu):展开描述)。 41 | 42 | 43 | ## 权限 44 | 45 | TODO(ZX-2399) 46 | 47 | 48 | ## 返回值 49 | 50 | 53 | **job_create()** 调用成功则返回*ZX_OK*和(通过*out*)返回新作业的句柄,如果调用失败,则返回负的错误码。 54 | 55 | 56 | ## 错误码 57 | 58 | 59 | **ZX_ERR_BAD_HANDLE**:*job*是无效句柄。 60 | 61 | 62 | **ZX_ERR_WRONG_TYPE**:*job*不是作业类型的句柄。 63 | 64 | 65 | **ZX_ERR_INVALID_ARGS**:*options*是非零值,或*out*是无效指针。 66 | 67 | 68 | **ZX_ERR_ACCESS_DENIED**:*job*没有**ZX_RIGHT_WRITE**或**ZX_RIGHT_MANAGE_JOB**权限。 69 | 70 | 71 | **ZX ERR_OUT_OF_RANGE**:*job*的高度值太大,无法创建子作业。 72 | 73 | 76 | **ZX_ERR_NO_MEMORY**:由于内存不足导致的失败。而用户空间无法处理这个(不太可能发生的)错误。在将来的构建版本中,将不再出现此错误。 77 | 78 | 79 | **ZX_ERR_BAD_STATE**:父作业对象处于已死亡状态。 80 | 81 | 82 | ## 另见 83 | 84 | [process_create](process_create.md), [task_kill](task_kill.md), [object_get_property](object_get_property.md). -------------------------------------------------------------------------------- /zircon/docs/syscalls/nanosleep.md: -------------------------------------------------------------------------------- 1 | # zx_nanosleep 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/9b1d42b6f62ed4a4fe443eb03e020c74abcc8875/docs/syscalls/nanosleep.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | nanosleep —— 高分辨率线程休眠 12 | 13 | 14 | ## 概要 15 | 16 | ``` 17 | #include 18 | 19 | zx_status_t zx_nanosleep(zx_time_t deadline); 20 | ``` 21 | 22 | 23 | ## 描述 24 | 25 | 27 | **nanosleep()** 中止调用线程的执行,直到*deadline*(相对于**ZX_CLOCK_MONOTONIC**)为止。传递参数**0**将立刻让出CPU所有权。 28 | 29 | 31 | 为了使线程休眠一段时间,请使用[**zx_deadline_after**](deadline_after.md)和**ZX_\** 帮助函数: 32 | 33 | 40 | ``` 41 | #include // zx_deadline_after, zx_nanosleep 42 | #include // ZX_MSEC等。 43 | 44 | // 休眠50ms 45 | zx_nanosleep(zx_deadline_after(ZX_MSEC(50))); 46 | ``` 47 | 48 | 49 | ## 权限 50 | 51 | 52 | 无需任何权限 53 | 54 | 55 | ## 返回值 56 | 57 | 58 | **nanosleep()** 始终返回**ZX_OK**。 -------------------------------------------------------------------------------- /zircon/docs/syscalls/object_get_cookie.md: -------------------------------------------------------------------------------- 1 | # zx_object_get_cookie 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/8ebf318d4c9c0b4f64709d0a978c019129a49cfc/docs/syscalls/object_get_cookie.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | object_get_cookie —— 获取对象的cookie值。 12 | 13 | 14 | ## 概要 15 | 16 | ``` 17 | #include 18 | 19 | zx_status_t zx_object_get_cookie(zx_handle_t handle, zx_handle_t scope, uint64_t* cookie); 20 | 21 | ``` 22 | 23 | 24 | ## 描述 25 | 26 | 28 | 某些类型的对象(事件,事件对,资源和VMO)可能会附加一个cookie,这是一个64位的不透明值。 29 | 在对象新创建时,cookie是未定义且不可读的。 30 | 31 | 33 | 如果已在对象上设置了cookie的值,则可以使用与*scope*相同的对象来调用**zx_object_get_cookie()** 以获取cookie。 34 | 35 | 37 | 事件对在cookie方面有些特别。 38 | 如果事件对的一端关闭,则另一端的cookie也将失效。 39 | 失效的cookie无法使用任何范围(scope)来获取或设置值。 40 | 41 | 47 | Cookie对于将传递给另一个进程并在稍后返回的对象非常有用。 48 | 通过使用其他进程无法访问的*scope*作为参数调用**zx_object_set_cookie()** 设置cookie值,稍后可以使用**zx_object_get_cookie()** 来验证句柄是否由调用进程“创建”并同时返回该对象的本地状态的ID或指针。 49 | 50 | 53 | 当*scope*引用的对象被销毁或者该对象的句柄不可用时,cookie值不可再被修改或获取。 54 | 55 | 56 | ## 权限 57 | 58 | TODO(ZX-2399) 59 | 60 | 61 | ## 返回值 62 | 63 | 65 | **zx_object_get_cookie()** 执行成功则返回**ZX_OK**和*cookie*的值。 66 | 如果发生错误,将返回以下错误码之一。 67 | 68 | 69 | 70 | ## 错误码 71 | 72 | 73 | **ZX_ERR_BAD_HANDLE**:*handle*或*scope*是无效句柄。 74 | 75 | 76 | **ZX_ERR_NOT_SUPPORTED**:*handle*不是可以具有cookie集合(即事件,事件对,资源或VMO)的对象句柄。 77 | 78 | 81 | **ZX_ERR_ACCESS_DENIED**:cookie值尚未设置,或者*scope*不是获取已设置的cookie值的正确范围 82 | 。 83 | 84 | 85 | **ZX_ERR_INVALID_ARGS**:*cookie*是无效指针。 86 | 87 | 88 | ## 另见 89 | 90 | [object_set_cookie](object_set_cookie.md). -------------------------------------------------------------------------------- /zircon/docs/syscalls/object_set_cookie.md: -------------------------------------------------------------------------------- 1 | # zx_object_set_cookie 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/8ebf318d4c9c0b4f64709d0a978c019129a49cfc/docs/syscalls/object_set_cookie.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | object_set_cookie —— 设置对象的cookie值。 12 | 13 | 14 | ## 概要 15 | 16 | ``` 17 | #include 18 | 19 | zx_status_t zx_object_set_cookie(zx_handle_t handle, zx_handle_t scope, uint64_t cookie); 20 | 21 | ``` 22 | 23 | 24 | ## 描述 25 | 26 | 29 | 某些类型的对象(事件,事件对,资源和VMO)可能会附加一个cookie,这是一个64位的不透明值。 30 | 在对象新创建时,cookie是未定义且不可读的。 31 | 32 | 36 | 成功调用**zx_object_set_cookie()** 后,cookie的值被修改,并且*scope*句柄引用的对象将成为读取或修改cookie所必需的键值。 37 | *scope*在对象的生命周期内不可被更改。 38 | 39 | 41 | 事件对在cookie方面有些特别。 42 | 如果事件对的一端关闭,则另一端的cookie也将失效。 43 | 失效的cookie无法使用任何范围(scope)来获取或设置值。 44 | 45 | 51 | Cookie对于将传递给另一个进程并在稍后返回的对象非常有用。 52 | 通过使用其他进程无法访问的*scope*作为参数调用**zx_object_set_cookie()** 设置cookie值,稍后可以使用**zx_object_get_cookie()** 来验证句柄是否由调用进程“创建”并同时返回该对象的本地状态的ID或指针。 53 | 54 | 56 | 当*scope*引用的对象被销毁或者该对象的句柄不可用时,cookie值不可再被修改或获取。 57 | 58 | 59 | ## 权限 60 | 61 | TODO(ZX-2399) 62 | 63 | 64 | ## 返回值 65 | 66 | 68 | **zx_object_set_cookie()** 执行成功则返回**ZX_OK**。 69 | 如果发生错误,将返回以下错误码之一。 70 | 71 | 72 | ## 错误码 73 | 74 | 76 | **ZX_ERR_BAD_HANDLE**:*handle*或*scope*是无效句柄。 77 | 78 | 79 | **ZX_ERR_NOT_SUPPORTED**:*handle*不是可以具有cookie集合(即事件,事件对,资源或VMO)的对象句柄。 80 | 81 | 83 | **ZX_ERR_ACCESS_DENIED**:先前已使用另一个对象作为*scope*调用了**zx_object_set_cookie()**,或者cookie值尚未设置。 84 | 85 | 86 | ## 另见 87 | 88 | [object_get_cookie](object_get_cookie.md). -------------------------------------------------------------------------------- /zircon/docs/syscalls/object_set_property.md: -------------------------------------------------------------------------------- 1 | # zx_object_set_property 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/8ebf318d4c9c0b4f64709d0a978c019129a49cfc/docs/syscalls/object_set_property.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | object_set_property —— 设置内核对象的各种属性值。 12 | 13 | 14 | ## 概要 15 | 16 | ``` 17 | #include 18 | 19 | zx_status_t zx_object_set_property(zx_handle_t handle, uint32_t property, 20 | const void* value, size_t value_size); 21 | 22 | ``` 23 | 24 | 25 | ## 描述 26 | 27 | 28 | 有关该调用完整的描述,请参见[object_get_property()](object_get_property.md)。 -------------------------------------------------------------------------------- /zircon/docs/syscalls/pmt_unpin.md: -------------------------------------------------------------------------------- 1 | # zx_pmt_unpin 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/daec3be241ed2d5dbdf2ed91ee3ac469a7c72fae/docs/syscalls/pmt_unpin.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | pmt_unpin —— 取消固定内存页面,并撤消设备对它们的访问权限 12 | 13 | 14 | ## 概要 15 | 16 | ``` 17 | #include 18 | 19 | zx_status_t zx_pmt_unpin(zx_handle_t pmt); 20 | ``` 21 | 22 | 23 | ## 描述 24 | 25 | 27 | **pmt_unpin()** 取消先前由**bti_pin()** 固定的页面,并撤消bti_pin授予的访问权限。 28 | 29 | 31 | 调用总是会销毁*pmt*句柄,之后再使用*pmt*将是无效的,包括在其上调用**handle_close()**。 32 | 33 | 34 | ## 权限 35 | 36 | TODO(ZX-2399) 37 | 38 | 39 | ## 返回值 40 | 41 | 43 | 调用成功,**pmt_unpin()** 返回*ZX_OK*。 44 | 如果调用失败,则返回负的错误码。 45 | 46 | 47 | ## 错误码 48 | 49 | 50 | **ZX_ERR_BAD_HANDLE**:*pmt*是无效句柄。 51 | 52 | 53 | **ZX_ERR_WRONG_TYPE**:*pmt*不是PMT类型句柄。 54 | 55 | 56 | ## 另见 57 | 58 | [bti_create](bti_create.md), 59 | [bti_release_quarantine](bti_release_quarantine.md), 60 | [bti_pin](bti_pin.md). -------------------------------------------------------------------------------- /zircon/docs/syscalls/port_cancel.md: -------------------------------------------------------------------------------- 1 | # zx_port_cancel 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/d17af78df889107ed5035b3f420567675a3c6ee5/docs/syscalls/port_cancel.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | port_cancel —— 取消对象上的异步端口通知 12 | 13 | 14 | ## 概要 15 | 16 | ``` 17 | #include 18 | 19 | zx_status_t zx_port_cancel(zx_handle_t port, 20 | zx_handle_t source, 21 | uint64_t key); 22 | ``` 23 | 24 | 25 | ## 描述 26 | 27 | 29 | **port_cancel()** 是一个非阻塞的系统调用,它用*source*和*key*取消待处理的**object_wait_async()** 调用。 30 | 31 | 35 | 当此调用成功时,由*source*对象发出且键值为*key*的新数据包将不再传递到*port*,并且与*source*和*key*匹配的待处理数据包也从端口中被删除。 36 | 37 | 38 | ## 权限 39 | 40 | TODO(ZX-2399) 41 | 42 | 43 | ## 返回值 44 | 45 | 48 | 49 | **zx_port_cancel()** 如果取消成功,并删除排队中的数据包,或待处理的**object_wait_async()** 调用被取消,则返回**ZX_OK**。 50 | 51 | 52 | ## 错误码 53 | 54 | 55 | **ZX_ERR_BAD_HANDLE**:*source*或*port*是无效句柄。 56 | 57 | 58 | **ZX_ERR_WRONG_TYPE**:*port*不是端口类型句柄。 59 | 60 | 61 | **ZX_ERR_ACCESS_DENIED**:*source*或*port*没有**ZX_RIGHT_WRITE**权限。 62 | 63 | 64 | **ZX_ERR_NOT_SUPPORTED**:*source*是一个不可等待的句柄。 65 | 66 | 68 | **ZX_ERR_NOT_FOUND**:找不到待处理的数据包和待处理的以*source*和*key*为参数的**object_wait_async**调用。 69 | 70 | 71 | ## 另见 72 | 73 | 74 | 75 | [port_wait](port_wait.md)。 -------------------------------------------------------------------------------- /zircon/docs/syscalls/port_create.md: -------------------------------------------------------------------------------- 1 | # zx_port_create 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/d17af78df889107ed5035b3f420567675a3c6ee5/docs/syscalls/port_create.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | port_create —— 创建IO端口 12 | 13 | 14 | ## 概要 15 | 16 | ``` 17 | #include 18 | 19 | zx_status_t zx_port_create(uint32_t options, zx_handle_t* out); 20 | 21 | ``` 22 | 23 | 24 | ## 描述 25 | 26 | 28 | 29 | **port_create()** 创建一个端口——一个用于读取内核或用户空间排队的数据包的可等待对象。 30 | 31 | 32 | *options*必须为**0**。 33 | 34 | 38 | 39 | 调用返回的句柄具有ZX_RIGHT_TRANSFER(允许它们通过写入channel的方式被发送到另一个进程),ZX_RIGHT_WRITE(允许将数据包排队),ZX_RIGHT_READ(允许读取数据包)和ZX_RIGHT_DUPLICATE(允许端口句柄被复制)的权限。 40 | 41 | 42 | ## 权限 43 | 44 | TODO(ZX-2399) 45 | 46 | 47 | ## 返回值 48 | 49 | 51 | 52 | **port_create()** 调用成功则返回ZX_OK,以及通过*out*返回有效的IO端口句柄。如果调用失败,则返回错误码。 53 | 54 | 55 | ## 错误码 56 | 57 | 59 | **ZX_ERR_INVALID_ARGS**:*options*具有无效值,或者*out*是无效指针或NULL。 60 | 61 | 64 | **ZX_ERR_NO_MEMORY**:由于内存不足导致的失败。而用户空间无法处理这个(不太可能发生的)错误。在将来的构建版本中,将不再出现此错误。 65 | 66 | 67 | ## 另见 68 | 69 | 75 | 76 | [port_queue](port_queue.md),[port_wait](port_wait.md),[object_wait_async](object_wait_async.md),[handle_close](handle_close.md),[handle_duplicate](handle_duplicate.md),[handle_replace](handle_replace.md)。 -------------------------------------------------------------------------------- /zircon/docs/syscalls/port_queue.md: -------------------------------------------------------------------------------- 1 | # zx_port_queue 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/d17af78df889107ed5035b3f420567675a3c6ee5/docs/syscalls/port_queue.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | port_queue —— 将数据包排队到端口 12 | 13 | 14 | ## 概要 15 | 16 | ``` 17 | #include 18 | #include 19 | 20 | zx_status_t zx_port_queue(zx_handle_t handle, const zx_port_packet_t* packet); 21 | 22 | ``` 23 | 24 | 25 | ## 描述 26 | 27 | 29 | **port_queue()** 将*packet*数据包排队到*handle*指定的端口。 30 | 31 | ``` 32 | typedef struct zx_port_packet { 33 | uint64_t key; 34 | uint32_t type; 35 | int32_t status; 36 | union { 37 | zx_packet_user_t user; 38 | zx_packet_signal_t signal; 39 | }; 40 | } zx_port_packet_t; 41 | 42 | ``` 43 | 44 | 46 | *packet*结构体中的*type*字段必须是**ZX_PKT_TYPE_USER**,并且联合字段中只有**user**是有效的: 47 | 48 | ``` 49 | typedef union zx_packet_user { 50 | uint64_t u64[4]; 51 | uint32_t u32[8]; 52 | uint16_t u16[16]; 53 | uint8_t c8[32]; 54 | } zx_packet_user_t; 55 | 56 | ``` 57 | 58 | 59 | ## 权限 60 | 61 | TODO(ZX-2399) 62 | 63 | 64 | ## 返回值 65 | 66 | 67 | **port_queue()** 数据包成功排队则返回**ZX_OK**。 68 | 69 | 70 | ## 错误码 71 | 72 | 73 | **ZX_ERR_BAD_HANDLE**:*handle*是无效句柄。 74 | 75 | 76 | **ZX_ERR_INVALID_ARGS**:*packet*是无效指针。 77 | 78 | 79 | **ZX_ERR_WRONG_TYPE**:*handle*不是端口类型句柄。 80 | 81 | 82 | **ZX_ERR_ACCESS_DENIED**:*handle*没有**ZX_RIGHT_WRITE**权限。 83 | 84 | 86 | **ZX_ERR_SHOULD_WAIT**:端口有太多待处理的数据包,只有线程排空一些数据包后,后续的**port_queue()** 调用才可能会成功。 87 | 88 | 89 | ## 注释 90 | 91 | 92 | 通过调用**port_wait()** 来排空队列。 93 | 94 | 95 | 96 | ## 另见 97 | 98 | 100 | 101 | [port_create](port_create.md),[port_wait](port_wait.md)。 -------------------------------------------------------------------------------- /zircon/docs/syscalls/process_exit.md: -------------------------------------------------------------------------------- 1 | # zx_process_exit 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/c90f6a56c60f0484be9f610096fb8d58edfef424/docs/syscalls/process_exit.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | process_exit —— 退出当前运行中的进程。 12 | 13 | 14 | ## 概要 15 | 16 | ``` 17 | #include 18 | 19 | void zx_process_exit(int ret_code); 20 | 21 | ``` 22 | 23 | 24 | ## 描述 25 | 26 | 29 | **zx_process_exit**的功能是结束调用进程,以给定的值作为返回码。 30 | 通过以**ZX_INFO_PROCESS**为参数的**zx_object_get_info**系统调用,可以查询进程的返回码。 31 | 32 | 33 | ## 权限 34 | 35 | TODO(ZX-2399) 36 | 37 | 38 | ## 返回值 39 | 40 | 41 | **zx_process_exit**不再返回。 42 | 43 | 44 | ## 错误码 45 | 46 | 47 | **zx_process_exit**不会执行失败。 48 | 49 | 50 | ## 另见 51 | 52 | [object_get_info](object_get_info.md), 53 | [process_create](process_create.md). -------------------------------------------------------------------------------- /zircon/docs/syscalls/process_read_memory.md: -------------------------------------------------------------------------------- 1 | # zx_process_read_memory 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/c90f6a56c60f0484be9f610096fb8d58edfef424/docs/syscalls/process_read_memory.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | process_read_memory —— 从给定的进程地址空间中读取数据。 12 | 13 | 14 | ## 概要 15 | ``` 16 | #include 17 | 18 | zx_status_t zx_process_read_memory(zx_handle_t process, zx_vaddr_t vaddr, 19 | void* buffer, size_t length, size_t* actual); 20 | 21 | ``` 22 | 23 | 24 | ## 描述 25 | 26 | 27 | **zx_process_read_memory()** 的功能是尝试读取指定进程的内存数据。 28 | 29 | 30 | 该函数最终会被一些以`vmo`为中心的函数功能所取代。 31 | 32 | 33 | *vaddr*:需要读取的内存块地址。 34 | 35 | *buffer*:指向用户要读取的字节的缓冲区的指针。 36 | 37 | 40 | *length*是尝试读取的字节数。 41 | *buffer*必须至少有*length*字节的空间。 42 | *length*必须大于零且不超过64MB。 43 | 44 | 47 | 读取的实际字节数存储在*actual_size*中。 48 | 如果*vaddr*+*length*超出进程中映射的内存,则可能会返回比请求的字节数少的字节。 49 | 50 | 51 | ## 权限 52 | 53 | TODO(ZX-2399) 54 | 55 | 56 | ## 返回值 57 | 58 | 61 | **zx_process_read_memory()** 调用成功则返回*ZX_OK*。如果调用失败,则返回负的错误码,并且写入到*buffer*的字节数是不确定的。 62 | 63 | 64 | ## 错误码 65 | 66 | 69 | **ZX_ERR_ACCESS_DENIED**:*handle*没有**ZX_RIGHT_READ**权限或因历史原因需要的**ZX_WRITE_RIGHT**。 70 | 71 | 72 | **ZX_ERR_BAD_HANDLE**:*handle*是无效句柄。 73 | 74 | 77 | **ZX_ERR_BAD_STATE**:进程的内存不可访问(例如,进程正在终止过程中),或者请求的内存区域不可被缓存。 78 | 79 | 81 | **ZX_ERR_INVALID_ARGS**:*buffer*是无效指针或为NULL,或*length*为零或大于64MB。 82 | 83 | 85 | **ZX_ERR_NO_MEMORY**:进程在请求的地址参数上没有映射的内存。 86 | 87 | 88 | **ZX_ERR_WRONG_TYPE**:*handle*不是进程类型的句柄。 89 | 90 | 91 | ## 另见 92 | 93 | [process_write_memory](process_write_memory.md). -------------------------------------------------------------------------------- /zircon/docs/syscalls/process_write_memory.md: -------------------------------------------------------------------------------- 1 | # zx_process_write_memory 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/c90f6a56c60f0484be9f610096fb8d58edfef424/docs/syscalls/process_write_memory.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | process_write_memory —— 写入数据到给定进程的地址空间中。 12 | 13 | 14 | ## 概要 15 | 16 | ``` 17 | #include 18 | 19 | zx_status_t zx_process_write_memory(zx_handle_t handle, zx_vaddr_t vaddr, 20 | const void* buffer, size_t length, size_t* actual); 21 | 22 | ``` 23 | 24 | 25 | ## 描述 26 | 27 | 28 | **zx_process_write_memory()** 的功能是尝试写入数据到指定进程的内存中。 29 | 30 | 31 | 该函数最终会被一些以`vmo`为中心的函数功能所取代。 32 | 33 | 34 | *vaddr*:将写入的内存块地址。 35 | 36 | 37 | *buffer*:指向用户要写入的字节的缓冲区的指针。 38 | 39 | 42 | *length*是尝试写入的字节数。 43 | *buffer*必须至少有*length*字节的空间。 44 | *length*必须大于零且不超过64MB。 45 | 46 | 49 | 写入的实际字节数存储在*actual_size*中。 50 | 如果*vaddr*+*length*超出进程中映射的内存,则可能会返回比请求的字节数少的字节。 51 | 52 | 53 | ## 权限 54 | 55 | TODO(ZX-2399) 56 | 57 | 58 | ## 返回值 59 | 60 | 63 | **zx_process_write_memory()** 调用成功则返回*ZX_OK*。如果调用失败,则返回负的错误码,并且写入*buffer*到内存的字节数是不确定的。 64 | 65 | 66 | ## 错误码 67 | 68 | 69 | **ZX_ERR_ACCESS_DENIED**:*handle*没有**ZX_RIGHT_WRITE**。 70 | 71 | 72 | **ZX_ERR_BAD_HANDLE**:*handle*是无效句柄。 73 | 74 | 77 | **ZX_ERR_BAD_STATE**:进程的内存不可访问(例如,进程正在终止过程中),或者请求的内存区域不可被缓存。 78 | 79 | 81 | **ZX_ERR_INVALID_ARGS**:*buffer*是无效指针或为NULL,或*length*为零或大于64MB。 82 | 83 | 85 | **ZX_ERR_NO_MEMORY**:进程在请求的地址参数上没有映射的内存。 86 | 87 | 88 | **ZX_ERR_WRONG_TYPE**:*handle*不是进程类型的句柄。 89 | 90 | 91 | ## 另见 92 | 93 | [process_read_memory](process_read_memory.md). -------------------------------------------------------------------------------- /zircon/docs/syscalls/socket_accept.md: -------------------------------------------------------------------------------- 1 | # zx_socket_accept 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/9b1d42b6f62ed4a4fe443eb03e020c74abcc8875/docs/syscalls/socket_accept.md) 5 | 6 | --- 7 | 8 | 9 | socket_accept —— 通过socket接收另一个socket对象 10 | 11 | 12 | ## 概要 13 | 14 | ``` 15 | #include 16 | 17 | zx_status_t zx_socket_accept(zx_handle_t socket, zx_handle_t* out_socket); 18 | ``` 19 | 20 | 21 | ### 描述 22 | 23 | 26 | **socket_accept()** 尝试通过现有的socket连接接收新socket对象。当有新socket可读时,信号**ZX_SOCKET_ACCEPT** 将会被置位。 27 | 28 | 29 | ## 权限 30 | 31 | TODO(ZX-2399) 32 | 33 | 34 | ## 返回值 35 | 36 | 39 | **socket_accept()** 成功则返回**ZX_OK**,并通过*out_socket*返回接收的socket句柄。如果调用失败,则返回下列错误码之一。 40 | 41 | 42 | ## 错误码 43 | 44 | 45 | **ZX_ERR_BAD_HANDLE**:*handle*是无效句柄。 46 | 47 | 48 | **ZX_ERR_WRONG_TYPE**:*socket*不是socket类型句柄。 49 | 50 | 51 | **ZX_ERR_ACCESS_DENIED**:*socket*句柄缺少**ZX_RIGHT_READ**权限。 52 | 53 | 54 | **ZX_ERR_INVALID_ARGS**:*out_socket*是无效指针。 55 | 56 | 57 | **ZX_ERR_SHOULD_WAIT**:没有新socket可接收。 58 | 59 | 61 | **ZX_ERR_NOT_SUPPORTED**:此socket不支持传输其他socket,即该socket不是使用**ZX_SOCKET_HAS_ACCEPT**标志位创建的。 62 | 63 | 64 | ## 限制 65 | 66 | 67 | socket接收队列深度仅为1。 68 | 69 | 70 | ## 另见 71 | 72 | 76 | 77 | [socket_create](socket_create.md),[socket_read](socket_read.md),[socket_share](socket_share.md),[socket_write](socket_write.md)。 -------------------------------------------------------------------------------- /zircon/docs/syscalls/socket_create.md: -------------------------------------------------------------------------------- 1 | # zx_socket_create 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/9b1d42b6f62ed4a4fe443eb03e020c74abcc8875/docs/syscalls/socket_create.md) 5 | 6 | --- 7 | 8 | 9 | ## 名称 10 | 11 | 12 | socket_create —— 创建socket对象 13 | 14 | 15 | ## 概要 16 | 17 | ``` 18 | #include 19 | 20 | zx_status_t zx_socket_create(uint32_t options, 21 | zx_handle_t* out0, zx_handle_t* out1); 22 | 23 | ``` 24 | 25 | 26 | ## 描述 27 | 31 | 32 | **socket_create()** 创建socket对象,一对只能传输数据,并且具有最大容量限制的双向流式传输的连接。 33 | 34 | 35 | 写入句柄的数据可以在相对端点的句柄上被读取。 36 | 37 | 39 | *options*必须设置**ZX_SOCKET_STREAM**或**ZX_SOCKET_DATAGRAM**标志位。 40 | 41 | 42 | 44 | 45 | 可以设置**ZX_SOCKET_HAS_CONTROL**标志位,以启用socket控制面传输。 46 | 47 | 50 | 51 | 可以设置**ZX_SOCKET_HAS_ACCEPT**标志位,以启用通过**socket_share()** 和**socket_accept()** 在此socket上传输其它socket对象。 52 | 53 | 54 | ## 权限 55 | 56 | TODO(ZX-2399) 57 | 58 | 59 | ## 返回值 60 | 61 | 63 | **socket_create()** 执行成功则返回**ZX_OK**。如果发生错误,将返回以下值之一。 64 | 65 | 66 | ## 错误码 67 | 68 | 70 | **ZX_ERR_INVALID_ARGS**: *out0*或*out1*是无效指针或NULL,或*options*是除*ZX_SOCKET_STREAM*或*ZX_SOCKET_DATAGRAM*之外的任何值。 71 | 72 | 75 | **ZX_ERR_NO_MEMORY**:由于内存不足导致的失败。而用户空间无法处理这个(不太可能发生的)错误。在将来的构建版本中,将不再出现此错误。 76 | 77 | 78 | ## 限制 79 | 80 | 81 | 目前无法设置最大容量。 82 | 83 | 84 | ## 另见 85 | 86 | 90 | 91 | [socket_accept](socket_accept.md),[socket_read](socket_read.md),[socket_share](socket_share.md),[socket_write](socket_write.md)。 -------------------------------------------------------------------------------- /zircon/docs/syscalls/socket_share.md: -------------------------------------------------------------------------------- 1 | # zx_socket_share 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/9b1d42b6f62ed4a4fe443eb03e020c74abcc8875/docs/syscalls/socket_share.md) 5 | 6 | --- 7 | 8 | 9 | socket_share —— 通过socket发送另一个socket对象 10 | 11 | 12 | ## 概要 13 | 14 | ``` 15 | #include 16 | 17 | zx_status_t zx_socket_share(zx_handle_t socket, zx_handle_t socket_to_send); 18 | ``` 19 | 20 | 21 | ### 描述 22 | 23 | 26 | **socket_share()** 尝试通过现有socket连接发送新socket。当可发送socket时,信号**ZX_SOCKET_SHARE**被置位。 27 | 28 | 31 | 发送成功时,*socket_to_send*被放入*socket*的共享队列中,并且调用者的进程不可再访问它。如果发生任何错误,*socket_to_send*将被丢弃(而非被传输)。 32 | 33 | 34 | ## 权限 35 | 36 | TODO(ZX-2399) 37 | 38 | 39 | ## 返回值 40 | 41 | 43 | **socket_share()** 执行成功则返回**ZX_OK**。如果调用失败,则返回下列错误码之一。 44 | 45 | 46 | ## 错误码 47 | 48 | 49 | **ZX_ERR_BAD_HANDLE**:*socket*或*socket_to_send*是无效句柄。 50 | 51 | 52 | **ZX_ERR_WRONG_TYPE**:*socket*或*socket_to_send*不是socket类型句柄。 53 | 54 | 56 | **ZX_ERR_ACCESS_DENIED**:*socket*缺少**ZX_RIGHT_WRITE**权限,或*socket_to_send*缺少**ZX_RIGHT_TRANSFER**权限。 57 | 58 | 62 | **ZX_ERR_BAD_STATE**: 下列情况之一:*socket_to_send*与*socket*是相同的socket句柄;*socket_to_send*与*socket*的是相同的socket句柄;*socket_to_send*本身能够共享。 63 | 64 | 65 | **ZX_ERR_SHOULD_WAIT**:共享队列中已有socket。 66 | 67 | 69 | **ZX_ERR_NOT_SUPPORTED**:此socket不支持传输其他socket,即它不是使用*ZX_SOCKET_HAS_ACCEPT*标志位创建的。 70 | 71 | 72 | **ZX_ERR_PEER_CLOSED**:socket的相对端点已关闭。 73 | 74 | 75 | ## 限制 76 | 77 | 78 | socket的共享队列深度仅为1。 79 | 80 | 81 | 82 | ## 另见 83 | 84 | 88 | 89 | [socket_accept](socket_accept.md),[socket_create](socket_create.md),[socket_read](socket_read.md),[socket_write](socket_write.md)。 -------------------------------------------------------------------------------- /zircon/docs/syscalls/system_get_features.md: -------------------------------------------------------------------------------- 1 | # zx_system_get_features 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/9b1d42b6f62ed4a4fe443eb03e020c74abcc8875/docs/syscalls/system_get_features.md) 5 | 6 | --- 7 | 8 | 9 | ## 名称 10 | 11 | 12 | system_get_features —— 获取支持的硬件功能 13 | 14 | 15 | ## 概要 16 | 17 | ``` 18 | #include 19 | 20 | zx_status_t zx_system_features(uint32_t kind, uint32_t* features); 21 | ``` 22 | 23 | 24 | ## 描述 25 | 26 | 31 | **system_get_features()** 使用位掩码来填充*features*值,以表示硬件特定功能。*kind*表示要查询的特定功能类型,如*ZX_FEATURE_KIND_CPU*。支持的类型和各个特征位的含义取决于硬件。 32 | 33 | 34 | ## 权限 35 | 36 | TODO(ZX-2399) 37 | 38 | 39 | ## 返回值 40 | 41 | 42 | **system_get_features()** 在执行成功时返回**ZX_OK**. 43 | 44 | 45 | ## 错误码 46 | 49 | **ZX_ERR_NOT_SUPPORTED**:此平台不提供所请求的功能类型。 50 | 51 | 52 | ## 注释 53 | 54 | 56 | 关于支持的处理器体系结构,请参阅[体系结构支持](../architecture_support.md)。 57 | 58 | 60 | 有关各种功能和各个功能位,请参阅[zircon/ features.h](https://github.com/fuchsia-mirror/zircon/blob/master/system/public/zircon/features.h)。 61 | 62 | 63 | ## 另见 64 | 65 | 67 | [system_get_num_cpus](system_get_num_cpus.md),[system_get_physmem](system_get_physmem.md)。 -------------------------------------------------------------------------------- /zircon/docs/syscalls/system_get_num_cpus.md: -------------------------------------------------------------------------------- 1 | # zx_system_num_cpus 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/9b1d42b6f62ed4a4fe443eb03e020c74abcc8875/docs/syscalls/system_get_num_cpus.md) 5 | 6 | --- 7 | 8 | 9 | ## 名称 10 | 11 | 12 | system_get_num_cpus —— 获取系统中的逻辑处理器的数量 13 | 14 | 15 | ## 概要 16 | 17 | ``` 18 | #include 19 | 20 | uint32_t zx_system_get_num_cpus(void); 21 | ``` 22 | 23 | 24 | ## 描述 25 | 26 | 29 | **system_get_num_cpus()** 返回当前正在运行的系统上的CPU(逻辑处理器)数量,此数字只有在启动阶段才可能发生改变。 30 | 31 | 32 | ## 权限 33 | 34 | TODO(ZX-2399) 35 | 36 | 37 | ## 返回值 38 | 39 | 40 | **system_get_num_cpus()** 返回CPU的数量。 41 | 42 | 43 | ## 错误码 44 | 45 | **system_get_num_cpus()** 不会产生失败。 46 | 47 | 48 | ## 注释 49 | 50 | 51 | ## 另见 52 | 53 | 54 | [system_get_physmem](system_get_physmem.md)。 -------------------------------------------------------------------------------- /zircon/docs/syscalls/system_get_physmem.md: -------------------------------------------------------------------------------- 1 | # zx_system_get_physmem 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/9b1d42b6f62ed4a4fe443eb03e020c74abcc8875/docs/syscalls/system_get_physmem.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | system_get_physmem —— 获取系统中的物理内存总量 12 | 13 | 14 | 15 | ## 概要 16 | 17 | ``` 18 | #include 19 | 20 | size_t zx_system_get_physmem(void); 21 | ``` 22 | 23 | 24 | ## 描述 25 | 26 | 28 | **system_get_physmem()** 返回机器上物理内存的总量(以字节为单位)。 29 | 30 | 31 | ## 权限 32 | 33 | TODO(ZX-2399) 34 | 35 | 36 | ## 返回值 37 | 38 | 39 | **system_get_physmem()** 返回内存(以字节计数)的总量。 40 | 41 | 42 | 43 | ## 错误码 44 | 45 | 46 | **system_get_physmem()** 不会失败。 47 | 48 | 49 | ## 注释 50 | 51 | 53 | 目前,此数字只有在启动阶段才可能改变,但可能在将来会发生变化。 54 | 55 | 56 | ## 另见 57 | 58 | 59 | [system_get_num_cpus](system_get_num_cpus.md)。 60 | -------------------------------------------------------------------------------- /zircon/docs/syscalls/system_get_version.md: -------------------------------------------------------------------------------- 1 | # zx_system_get_version 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/9b1d42b6f62ed4a4fe443eb03e020c74abcc8875/docs/syscalls/system_get_version.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | system_get_version —— 获取系统版本字符串 12 | 13 | 14 | ## 概要 15 | 16 | ``` 17 | #include 18 | 19 | zx_status_t zx_system_get_version(char version[], size_t version_size); 20 | ``` 21 | 22 | 23 | ## 描述 24 | 25 | 29 | **system_get_version()** 用标识当前运行的Zircon系统的版本的字符串填充给定的字符数组。所提供的字符串的大小必须足够大,以包含完整的字符串,包括null终止符。 30 | 31 | 32 | ## 权限 33 | 34 | TODO(ZX-2399) 35 | 36 | 37 | ## 返回值 38 | 39 | 40 | **system_get_version()** 执行成功则返回**ZX_OK**。 41 | 42 | ## 错误码 43 | 45 | **ZX_ERR_BUFFER_TOO_SMALL**:*version_size*长度太短。 46 | 47 | 48 | ## 注释 49 | 50 | 51 | ## 另见 52 | -------------------------------------------------------------------------------- /zircon/docs/syscalls/system_mexec.md: -------------------------------------------------------------------------------- 1 | # zx_system_mexec 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/9b1d42b6f62ed4a4fe443eb03e020c74abcc8875/docs/syscalls/system_mexec.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | zx_system_mexec —— 使用新内核和启动映像软启动系统 12 | 13 | 14 | ## 概要 15 | 16 | ``` 17 | #include 18 | 19 | zx_status_t zx_system_mexec(zx_handle_t resource, 20 | zx_handle_t kernel_vmo, 21 | zx_handle_t bootimage_vmo); 22 | ``` 23 | 24 | 25 | ## 描述 26 | 27 | 30 | **zx_system_mexec()** 接受两个vmo句柄,其中:*kernel_vmo*包含内核映像,*bootimage_vmo*包含initrd,其地址应作为内核参数传递给新内核。 31 | 32 | 34 | 要取代正在运行的内核,必须提供*ZX_RSRC_KIND_ROOT*类型的*resource*。 35 | 36 | 41 | 执行成功后,*zx_system_mexec*将取代当前运行的内核映像。新内核映像包含在*kernel_vmo*中,将*bootimage_vmo*中包含的ramdisk加载到物理内存中的某个位置,并直接跳转到新内核,同时将加载的initrd的地址提供给新内核。 42 | 43 | 44 | ## 权限 45 | 46 | TODO(ZX-2399) 47 | 48 | 49 | ## 返回值 50 | 51 | 52 | **zx_system_mexec()** 执行成功将不再返回。 -------------------------------------------------------------------------------- /zircon/docs/syscalls/task_kill.md: -------------------------------------------------------------------------------- 1 | # zx_task_kill 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/af07ad38812f7566b6c859238ece1bb4c70b969e/docs/syscalls/task_kill.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | task_kill —— 终止指定的任务(作业,进程或线程)。 12 | 13 | 14 | ## 概要 15 | 16 | ``` 17 | #include 18 | 19 | zx_status_t zx_task_kill(zx_handle_t handle); 20 | 21 | ``` 22 | 23 | 24 | ## 描述 25 | 26 | 28 | 该系统调用会以递归方式异步杀死给定的进程,线程或作业及其所有子任务,直到以*handle*为根节点的整个任务树终止。 29 | 30 | 34 | 可以通过**ZX_TASK_TERMINATED**信号等待任务终止。 35 | 正如信号所观察到的调用过程完成时,指定的任务及其所有子任务可认为已处于终止状态,并且大多数在它们上面的操作都不会成功。 36 | 37 | 38 | ## 权限 39 | 40 | TODO(ZX-2399) 41 | 42 | 43 | ## 返回值 44 | 45 | 47 | **zx_task_kill()** 调用成功则返回*ZX_OK*。 48 | 如果进程或线程使用此系统调用来终止自己的执行,则此调用将不会返回。 49 | 50 | 51 | ## 注释 52 | 53 | 55 | 在进程上使用此系统调用时,进程的退出码为-1。 56 | 该退出码可通过传递ZX_INFO_PROCESS主题的**object_get_info()** 调用来获取。 57 | 58 | 59 | ## 错误码 60 | 61 | 62 | **ZX_ERR_BAD_HANDLE**:*handle*是无效句柄。 63 | 64 | 65 | 66 | **ZX_ERR_WRONG_TYPE**:*handle*不是任务类型句柄。 67 | 68 | 70 | **ZX_ERR_ACCESS_DENIED**:*handle*没有**ZX_RIGHT_DESTROY**权限。 71 | 72 | 73 | ## 另见 74 | 75 | [job_create](job_create.md), 76 | [process_create](process_create.md). -------------------------------------------------------------------------------- /zircon/docs/syscalls/task_suspend.md: -------------------------------------------------------------------------------- 1 | # zx_task_suspend 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/af07ad38812f7566b6c859238ece1bb4c70b969e/docs/syscalls/task_suspend.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 12 | task_suspend —— 挂起指定的任务。 13 | 目前只有线程句柄可以被挂起。 14 | 15 | 16 | ## 概要 17 | 18 | ``` 19 | #include 20 | 21 | void zx_task_suspend(zx_handle_t task, zx_handle_t* suspend_token); 22 | 23 | ``` 24 | 25 | 26 | ## 描述 27 | 28 | 33 | **task_suspend()** 可使被请求的任务挂起并暂停执行。 34 | 任务的挂起不是同步执行的,并且在该调用返回之前可能都不会挂起任务。 35 | 调用**task_suspend()** 后,任务将很快被挂起,除非它当前在内核中处于被阻塞的状态,在这种情况下,它将在被解除阻塞后立即挂起。 36 | 37 | 39 | 在挂起的任务上调用**task_kill()** 可以成功终止任务。 40 | 41 | 42 | ## 恢复 43 | 44 | 49 | 挂起令牌(suspend token)句柄被关闭时,可以使得任务被恢复,但只要有任何打开的挂起令牌存在,任务都将保持挂起状态。 50 | 与任务挂起一样,恢复也是异步的,因此当[handle_close](handle_close.md)调用返回时,即使没有其他挂起令牌处于打开状态,线程也可能尚未处于运行状态。 51 | 52 | 53 | 54 | ## 权限 55 | 56 | TODO(ZX-2399) 57 | 58 | 59 | ## 返回值 60 | 61 | 63 | **task_suspend()** 调用成功则返回*ZX_OK*。 64 | 如果调用失败,则返回负的错误码。 65 | 66 | 67 | ## 错误码 68 | 69 | 70 | **ZX_ERR_BAD_HANDLE**:*handle*是无效句柄。 71 | 72 | 73 | **ZX_ERR_WRONG_TYPE**:*handle*不是线程类型句柄。 74 | 75 | 76 | **ZX_ERR_INVALID_ARGS**:*suspend_token*是无效指针。 77 | 78 | 79 | **ZX_ERR_BAD_STATE**:任务未处于可以被挂起的状态。 80 | 81 | 82 | ## 限制 83 | 84 | 85 | 目前仅支持线程句柄的参数。 -------------------------------------------------------------------------------- /zircon/docs/syscalls/task_suspend_token.md: -------------------------------------------------------------------------------- 1 | # zx_task_suspend 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/af07ad38812f7566b6c859238ece1bb4c70b969e/docs/syscalls/task_suspend_token.md) 5 | 6 | --- 7 | 10 | 此函数将替换[task_suspend](task_suspend.md)。 11 | 在更新它的所有调用者后,将删除**task_suspend**,并将此函数重命名为**task_suspend**。 12 | 13 | 14 | ## 名称 15 | 16 | 18 | task_suspend_token —— 挂起指定的任务。 19 | 目前只有线程句柄可被用于挂起。 20 | 21 | 22 | ## 概要 23 | 24 | ``` 25 | #include 26 | 27 | void zx_task_suspend_token(zx_handle_t task, zx_handle_t* suspend_token); 28 | 29 | ``` 30 | 31 | 32 | ## 描述 33 | 34 | 39 | **task_suspend_token()** 的功能是使得请求的任务挂起并暂停执行。 40 | 任务挂起不是同步的,并且在调用返回之前可能都不会挂起任务。 41 | 但在调用**task_suspend_token()** 后,该任务将很快挂起,除非它当前在内核中被阻塞,在这种情况下,它将在解除阻塞后立即挂起。 42 | 43 | 45 | 在挂起的任务上调用**task_kill()** 可以成功终止任务。 46 | 47 | ## RESUMING 48 | 49 | 54 | 挂起令牌(suspend token)句柄被关闭时,可以使得任务被恢复,但只要有任何打开的挂起令牌存在,任务都将保持挂起状态。 55 | 与任务挂起一样,恢复也是异步的,因此当[handle_close](handle_close.md)调用返回时,即使没有其他挂起令牌处于打开状态,线程也可能尚未处于运行状态。 56 | 57 | 58 | ## 权限 59 | 60 | TODO(ZX-2399) 61 | 62 | 63 | ## 返回值 64 | 65 | 67 | **task_suspend_token()** 调用成功则返回*ZX_OK*。 68 | 如果调用失败,则返回负的错误码。 69 | 70 | 71 | ## 错误码 72 | 73 | 74 | **ZX_ERR_BAD_HANDLE**:*handle*是无效句柄。 75 | 76 | 77 | 78 | **ZX_ERR_WRONG_TYPE**:*handle*不是线程类型句柄。 79 | 80 | 81 | **ZX_ERR_INVALID_ARGS**:*suspend_token*是无效指针。 82 | 83 | 84 | **ZX_ERR_BAD_STATE**:任务未处于可以被挂起的状态。 85 | 86 | 87 | ## 限制 88 | 89 | 90 | 目前仅支持线程句柄的参数。 -------------------------------------------------------------------------------- /zircon/docs/syscalls/thread_create.md: -------------------------------------------------------------------------------- 1 | # zx_thread_create 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/91786394a9cbb7b5ddd922ec761629eecd942203/docs/syscalls/thread_create.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | thread_create —— 创建新线程 12 | 13 | 14 | ## 概要 15 | 16 | ``` 17 | #include 18 | 19 | zx_status_t zx_thread_create(zx_handle_t process, const char* name, size_t name_size, 20 | uint32_t options, zx_handle_t* out); 21 | 22 | ``` 23 | 24 | 25 | ## 描述 26 | 27 | 28 | **thread_create()** 的功能是在指定的进程中创建新线程。 29 | 30 | 32 | 执行成功后,将返回新线程的句柄,但在调用*thread_start()* 之前,该线程都不会执行。 33 | 34 | 35 | *name*以静默的方式被截断为最多*ZX_MAX_NAME_LEN-1*个字符。 36 | 37 | 40 | 线程句柄可以被等待,并在线程停止执行时(由于调用**thread_exit()**)发出*ZX_THREAD_TERMINATED*信号。 41 | 42 | 44 | *process*是控制新线程的[进程对象](../objects/process.md),并且新线程将作为该进程的一个子对象。 45 | 46 | 47 | 有关线程生命周期的详细信息,请参见[线程对象](../objects/thread.md)。 48 | 49 | 50 | ## 权限 51 | 52 | TODO(ZX-2399) 53 | 54 | 55 | ## 返回值 56 | 57 | 60 | **thread_create()** 调用成功则返回*ZX_OK*和(通过*out*)返回新线程的句柄。 61 | 如果调用失败,则返回负的错误码。 62 | 63 | 64 | ## 错误码 65 | 66 | 67 | **ZX_ERR_BAD_HANDLE**:*process*是无效句柄。 68 | 69 | 70 | **ZX_ERR_WRONG_TYPE**:*process*不是进程类型的句柄。 71 | 72 | 74 | **ZX_ERR_INVALID_ARGS**:*name*或*out*是无效指针,或*options*是非零值。 75 | 76 | 79 | **ZX_ERR_NO_MEMORY**:由于内存不足导致的失败。而用户空间无法处理这个(不太可能发生的)错误。在将来的构建版本中,将不再出现此错误。 80 | 81 | 82 | ## 另见 83 | 84 | [handle_close](handle_close.md), 85 | [handle_duplicate](handle_duplicate.md), 86 | [object_wait_one](object_wait_one.md), 87 | [object_wait_many](object_wait_many.md), 88 | [thread_exit](thread_exit.md), 89 | [thread_start](thread_start.md). -------------------------------------------------------------------------------- /zircon/docs/syscalls/thread_exit.md: -------------------------------------------------------------------------------- 1 | # zx_thread_exit 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/91786394a9cbb7b5ddd922ec761629eecd942203/docs/syscalls/thread_exit.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | thread_exit —— 终止当前线程的执行 12 | 13 | 14 | ## 概要 15 | 16 | ``` 17 | #include 18 | 19 | void zx_thread_exit(void); 20 | 21 | ``` 22 | 23 | 24 | ## 描述 25 | 26 | 28 | **thread_exit()** 的功能是停止运行当前运行的线程并退出。 29 | 30 | 33 | 信号*ZX_THREAD_TERMINATED*将在线程退出时在线程对象上被置位,并且可以通过在线程句柄上调用*object_wait_one()*或*object_wait_many()* 来获取到。 34 | 35 | 36 | ## 权限 37 | 38 | TODO(ZX-2399) 39 | 40 | 41 | ## 返回值 42 | 43 | 44 | **thread_exit()** 不再返回。 45 | 46 | ## 另见 47 | 48 | [handle_close](handle_close.md), 49 | [handle_duplicate](handle_duplicate.md), 50 | [object_wait_one](object_wait_one.md), 51 | [object_wait_many](object_wait_many.md), 52 | [thread_create](thread_create.md), 53 | [thread_start](thread_start.md). -------------------------------------------------------------------------------- /zircon/docs/syscalls/thread_write_state.md: -------------------------------------------------------------------------------- 1 | # zx_thread_write_state 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/91786394a9cbb7b5ddd922ec761629eecd942203/docs/syscalls/thread_write_state.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | thread_write_state —— 写入线程状态的一个方面的值 12 | 13 | 14 | 15 | ## 概要 16 | 17 | ``` 18 | #include 19 | #include 20 | 21 | zx_status_t zx_thread_write_state( 22 | zx_handle_t handle, 23 | uint32_t kind, 24 | const void* buffer, 25 | size_t len); 26 | ``` 27 | 28 | 29 | ## 描述 30 | 31 | 34 | **thread_write_state()** 写入线程状态的一个方面的值。 35 | 但只有当线程因异常而暂停或被挂起时,才能写入线程的状态。 36 | 37 | 39 | 线程的状态是高度特定于处理器的。 40 | 关于每个处理器平台上结构的内容,请参阅`zircon/syscalls/debug.h`中的结构。 41 | 42 | 43 | ## 状态值 44 | 45 | 47 | 有关可用的线程状态及其对应值的列表,请参见[thread_read_state](thread_read_state.md)。 48 | 49 | 50 | ## 权限 51 | 52 | TODO(ZX-2399) 53 | 54 | 55 | ## 返回值 56 | 57 | 59 | **thread_write_state()** 调用成功则返回*ZX_OK*。 60 | 如果调用失败,则返回负的错误码。 61 | 62 | 63 | ## 错误码 64 | 65 | 66 | **ZX_ERR_BAD_HANDLE**:*handle*是无效句柄。 67 | 68 | 69 | **ZX_ERR_WRONG_TYPE**:*handle*不是线程类型的句柄。 70 | 71 | 72 | **ZX_ERR_ACCESS_DENIED**:*handle*缺少*ZX_RIGHT_WRITE*权限。 73 | 74 | 76 | **ZX_ERR_INVALID_ARGS**:*kind*的值无效,或*buffer*是无效指针;或者*len*与*kind*结构所期望的大小不匹配。 77 | 78 | 81 | **ZX_ERR_NO_MEMORY**:由于内存不足导致的失败。而用户空间无法处理这个(不太可能发生的)错误。在将来的构建版本中,将不再出现此错误。 82 | 83 | 86 | **ZX_ERR_BAD_STATE**:线程未在状态可用的位置停止。 87 | 只有当线程因异常而暂停时才能读取线程的状态。 88 | 89 | 92 | **ZX_ERR_NOT_SUPPORTED**:*kind*的值不受支持。 93 | 例如,当尝试读取不受当前正在运行的硬件所支持的寄存器集时,可能会发生这种错误。 94 | 95 | 96 | ## 另见 97 | 98 | [thread_read_state](thread_read_state.md). -------------------------------------------------------------------------------- /zircon/docs/syscalls/ticks_get.md: -------------------------------------------------------------------------------- 1 | # zx_ticks_get 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/9b1d42b6f62ed4a4fe443eb03e020c74abcc8875/docs/syscalls/ticks_get.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | ticks_get —— 读取高精度计时器自启动以来的ticks数。 12 | 13 | 14 | ## 概要 15 | 16 | ``` 17 | #include 18 | 19 | zx_ticks_t zx_ticks_get(void) 20 | ``` 21 | 22 | 23 | ## 描述 24 | 25 | 26 | **zx_ticks_get()** 返回高精度计时器自启动以来的ticks数。 27 | 28 | 30 | 这些ticks可以来自处理器周期数,高速定时器,分析定时器等。但当系统处于睡眠状态时,它们不能保证能够继续计时。 31 | 32 | 33 | ## 权限 34 | 35 | TODO(ZX-2399) 36 | 37 | 38 | ## 返回值 39 | 40 | 41 | **zx_ticks_get()** 返回高精度计时器自启动以来的ticks数。 42 | 43 | 44 | ## 错误码 45 | 46 | 47 | **zx_tick_get()** 不会报告任何错误情况。 48 | 49 | 50 | ## 注释 51 | 52 | 57 | 返回的值可能是高度可变的,可能影响的因素包括: 58 | - 处理器频率的变化 59 | - 处理器之间的迁移 60 | - 重置处理器周期计数器 61 | - 指令重排序(如有需要,请使用内存屏障) 62 | 63 | 64 | ## 另见 65 | 66 | [ticks_per_second](ticks_per_second.md) -------------------------------------------------------------------------------- /zircon/docs/syscalls/ticks_per_second.md: -------------------------------------------------------------------------------- 1 | # zx_ticks_per_second 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/9b1d42b6f62ed4a4fe443eb03e020c74abcc8875/docs/syscalls/ticks_per_second.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | ticks_per_second —— 获取1s内高精度计时器ticks数。 12 | 13 | 14 | ## 概要 15 | 16 | ``` 17 | #include 18 | 19 | zx_ticks_t zx_ticks_per_second(void) 20 | ``` 21 | 22 | 23 | ## 描述 24 | 25 | 27 | **zx_ticks_per_second()** 返回1s内高精度计时器ticks数。 28 | 29 | 31 | 该系统调用可与**zx_ticks_get()** 一起使用,以计算**zx_ticks_get()** 两次后续调用之间所经过的时间。 32 | 33 | 35 | 对于给定的系统,此返回值可能因引导而异。一旦系统启动完成,该值保证不会发生改变。 36 | 37 | 38 | ## 权限 39 | 40 | TODO(ZX-2399) 41 | 42 | 43 | ## 返回值 44 | 45 | 47 | **zx_ticks_per_second()** 返回1s内高精度计时器ticks数。 48 | 49 | 50 | ## 错误码 51 | 52 | 53 | **zx_ticks_per_second()** 不报告任何错误情况。 54 | 55 | 56 | ## 示例 57 | 58 | 68 | 69 | ``` 70 | zx_ticks_t ticks_per_second = zx_ticks_per_second(); 71 | zx_ticks_t ticks_start = zx_ticks_get(); 72 | 73 | // 完成更多的工作 74 | 75 | zx_ticks_t ticks_end = zx_ticks_get(); 76 | double elapsed_seconds = (ticks_end - ticks_start) / (double)ticks_per_second; 77 | 78 | ``` 79 | 80 | 81 | ## 另见 82 | 83 | [ticks_get](ticks_get.md) -------------------------------------------------------------------------------- /zircon/docs/syscalls/timer_cancel.md: -------------------------------------------------------------------------------- 1 | # zx_timer_cancel 2 | ---- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/00faaac908ed4c5a59bfab95b6831b33df6a5cb0/docs/syscalls/timer_cancel.md) 5 | 6 | ---- 7 | 8 | ## 名称 9 | 10 | 11 | timer_cancel —— 取消定时器 12 | 13 | 14 | ## 概要 15 | 16 | ``` 17 | #include 18 | 19 | zx_status_t zx_timer_cancel(zx_handle_t handle); 20 | 21 | ``` 22 | 23 | 24 | ## 描述 25 | 26 | 28 | **zx_timer_cancel()** 的功能是取消之前通过**timer_set()** 启动的待触发的计时器。 29 | 30 | 34 | 调用成功后,待触发的定时器被取消,并且**ZX_TIMER_SIGNALED** 信号不再发出。如果需要立即使用新的待触发的计时器而无需先调用**timer_cancel()**,请用新的截止时间参数(deadline)对同一定时器调用**timer_set()**。 35 | 36 | 37 | ## 权限 38 | 39 | 40 | *handle*需具有**ZX_RIGHT_WRITE**权限。 41 | 42 | 43 | ## 返回值 44 | 45 | 47 | **zx_timer_cancel()** 调用成功则返回**ZX_OK**。如果调用失败,则返回负的错误码。 48 | 49 | 50 | ## 错误码 51 | 52 | 53 | **ZX_ERR_BAD_HANDLE**:*handle*是无效句柄。 54 | 55 | 56 | **ZX_ERR_ACCESS_DENIED**:*handle*缺少**ZX_RIGHT_WRITE**权限。 57 | 58 | 59 | ## 注意 60 | 61 | 62 | 在**timer_set()** 之前调用该函数是无效的。 63 | 64 | 65 | ## 另见 66 | 67 | 69 | 70 | [timer_create](timer_create.md),[timer_set](timer_set.md) -------------------------------------------------------------------------------- /zircon/docs/syscalls/timer_create.md: -------------------------------------------------------------------------------- 1 | # zx_timer_create 2 | ---- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/00faaac908ed4c5a59bfab95b6831b33df6a5cb0/docs/syscalls/timer_create.md) 5 | 6 | ---- 7 | ## NAME 8 | 9 | 10 | timer_create —— 创建一个定时器 11 | 12 | 13 | ## 概要 14 | 15 | ``` 16 | #include 17 | 18 | zx_status_t zx_timer_create(uint32_t options, uint32_t clock_id, zx_handle_t* out); 19 | 20 | ``` 21 | 22 | 23 | ## 描述 24 | 25 | 28 | **timer_create()** 的功能是创建一个计时器——可以在达到指定时间点时发出信号的对象。调用中唯一有效的*clock_id*类型是ZX_CLOCK_MONOTONIC。 29 | 30 | 33 | *options*的值指定了系统是否可以提前或稍后,根据其他等待被触发的计时器进行合并的行为。 34 | 35 | 36 | 可能的值包括: 37 | 44 | + **ZX_TIMER_SLACK_CENTER**:允许使用较早和较晚的计时器进行合并。 45 | + **ZX_TIMER_SLACK_EARLY**:仅允许使用较早的计时器进行合并。 46 | + **ZX_TIMER_SLACK_LATE**:仅允许使用较晚的计时器进行合并。 47 | 48 | 49 | 传递0至*options*的效果等同于ZX_TIMER_SLACK_CENTER。 50 | 51 | 53 | 调用返回的句柄具有ZX_RIGHT_DUPLICATE,ZX_RIGHT_TRANSFER,ZX_RIGHT_READ和ZX_RIGHT_WRITE权限。 54 | 55 | 56 | ## 返回值 57 | 58 | 60 | **timer_create()** 调用成功则返回**ZX_OK**,如果发生错误,则返回负的错误码。 61 | 62 | 63 | 64 | ## 错误码 65 | 66 | 69 | **ZX_ERR_INVALID_ARGS**:*out*是无效指针或NULL;*options*不是ZX_TIMER_SLACK中的值之一;*clock_id*是除ZX_CLOCK_MONOTONIC以外的任何值。 70 | 71 | 72 | **ZX_ERR_NO_MEMORY**:因内存不足而调用失败。 73 | 74 | 75 | ## 另见 76 | 77 | 81 | 82 | [timer_set](timer_set.md),[timer_cancel](timer_cancel.md),[deadline_after](deadline_after.md),[handle_close](handle_close.md) -------------------------------------------------------------------------------- /zircon/docs/syscalls/vcpu_interrupt.md: -------------------------------------------------------------------------------- 1 | # zx_vcpu_interrupt 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/18df557635b5b32816f0236ce8ee64d38bf42188/docs/syscalls/vcpu_interrupt.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | vcpu_interrupt —— 在VCPU上触发中断 12 | 13 | 14 | ## 概要 15 | 16 | ``` 17 | #include 18 | 19 | zx_status_t zx_vcpu_interrupt(zx_handle_t vcpu, uint32_t vector); 20 | ``` 21 | 22 | 23 | ## 描述 24 | 25 | 27 | **vcpu_interrupt()** 的功能是触发*vcpu*上由*vector*指定的中断;该函数可以在任何线程中调用。 28 | 29 | 30 | ## 权限 31 | 32 | TODO(ZX-2399) 33 | 34 | 35 | ## 返回值 36 | 37 | 39 | **vcpu_interrupt()** 调用成功则返回**ZX_OK**。 40 | 如果调用失败,则返回负的错误码。 41 | 42 | 43 | ## 错误码 44 | 45 | 46 | **ZX_ERR_ACCESS_DENIED**:*vcpu*缺少*ZX_RIGHT_SIGNAL*权限。 47 | 48 | 49 | **ZX_ERR_BAD_HANDLE**:*vcpu*是无效句柄。 50 | 51 | 53 | **ZX_ERR_OUT_OF_RANGE**:*vector*超出了当前体系结构所支持中断的范围。 54 | 55 | **ZX_ERR_WRONG_TYPE**:*vcpu*不是VCPU类型的句柄。 56 | 57 | 58 | ## 另见 59 | 60 | [guest_create](guest_create.md), 61 | [guest_set_trap](guest_set_trap.md), 62 | [vcpu_create](vcpu_create.md), 63 | [vcpu_resume](vcpu_resume.md), 64 | [vcpu_read_state](vcpu_read_state.md), 65 | [vcpu_write_state](vcpu_write_state.md). -------------------------------------------------------------------------------- /zircon/docs/syscalls/vcpu_read_state.md: -------------------------------------------------------------------------------- 1 | # zx_vcpu_read_state 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/18df557635b5b32816f0236ce8ee64d38bf42188/docs/syscalls/vcpu_read_state.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | vcpu_read_state —— 读取VCPU的状态 12 | 13 | 14 | ## 概要 15 | 16 | ``` 17 | #include 18 | #include 19 | 20 | zx_status_t zx_vcpu_read_state(zx_handle_t vcpu, uint32_t kind, void* buffer, 21 | size_t len); 22 | ``` 23 | 24 | 25 | ## 描述 26 | 27 | 30 | **vcpu_read_state()** 的功能是读取*kind*指定的*vcpu*的状态,并写入到*buffer*中。 31 | 但只有当*vcpu*暂停执行时,写入它的状态才是有效的。 32 | 33 | 34 | *kind*的值必须是*ZX_VCPU_STATE*。 35 | 36 | 37 | ## 权限 38 | 39 | TODO(ZX-2399) 40 | 41 | 42 | ## 返回值 43 | 46 | **vcpu_read_state()** 调用成功则返回**ZX_OK**。 47 | 如果调用失败,则返回负的错误码。 48 | 49 | 50 | ## 错误码 51 | 52 | 54 | **ZX_ERR_ACCESS_DENIED**:*vcpu*缺少*ZX_RIGHT_READ*权限。 55 | 56 | 57 | **ZX_ERR_BAD_HANDLE**:*vcpu*是无效句柄。 58 | 59 | 60 | **ZX_ERR_BAD_STATE**:*vcpu*处于错误状态,无法读取状态。 61 | 62 | 64 | **ZX_ERR_INVALID_ARGS**:*kind*的值无效;或*buffer*是无效指针;或者*len*与*kind*所期望的大小不匹配。 65 | 66 | 67 | **ZX_ERR_WRONG_TYPE**:*vcpu*不是VCPU类型的句柄。 68 | 69 | 70 | ## 另见 71 | 72 | [guest_create](guest_create.md), 73 | [guest_set_trap](guest_set_trap.md), 74 | [vcpu_create](vcpu_create.md), 75 | [vcpu_resume](vcpu_resume.md), 76 | [vcpu_interrupt](vcpu_interrupt.md), 77 | [vcpu_write_state](vcpu_write_state.md). -------------------------------------------------------------------------------- /zircon/docs/syscalls/vcpu_resume.md: -------------------------------------------------------------------------------- 1 | # zx_vcpu_resume 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/18df557635b5b32816f0236ce8ee64d38bf42188/docs/syscalls/vcpu_resume.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | vcpu_resume —— 恢复VCPU的执行 12 | 13 | 14 | ## 概要 15 | 16 | ``` 17 | #include 18 | #include 19 | 20 | zx_status_t zx_vcpu_resume(zx_handle_t vcpu, zx_port_packet_t* packet); 21 | ``` 22 | 23 | 24 | ## 描述 25 | 26 | 30 | **vcpu_resume()** 的功能是开始或继续执行*vcpu*,并阻塞线程直到该*vcpu*暂停执行。 31 | *vcpu*暂停执行时,*packet*会被写入暂停的原因。 32 | 在线程处理完原因后,可通过再次调用**vcpu_resume()** 恢复执行。 33 | 34 | 35 | 注意:必须在创建*vcpu*的同一线程上恢复*vcpu*的执行。 36 | 37 | 38 | ## 权限 39 | 40 | TODO(ZX-2399) 41 | 42 | 43 | ## 返回值 44 | 47 | **vcpu_resume()** 调用成功则返回**ZX_OK**。 48 | 如果调用失败,则返回负的错误码。 49 | 50 | 51 | ## 错误码 52 | 54 | **ZX_ERR_ACCESS_DENIED**:*vcpu*缺少*ZX_RIGHT_EXECUTE*权限。 55 | 56 | 57 | **ZX_ERR_BAD_HANDLE**:*vcpu*是无效句柄。 58 | 59 | 60 | **ZX_ERR_BAD_STATE**:*vcpu*处于错误状态,无法开始执行。 61 | 63 | **ZX_ERR_CANCELED**:*vcpu*在等待事件时执行被取消。 64 | 65 | 66 | **ZX_ERR_INTERNAL**:在执行*vcpu*时出错。 67 | 68 | 69 | **ZX_ERR_INVALID_ARGS**:*packet*是无效指针。 70 | 71 | 73 | **ZX_ERR_NOT_SUPPORTED**:执行*vcpu*时遇到不支持的操作。 74 | 75 | 76 | **ZX_ERR_WRONG_TYPE**:*vcpu*不是VCPU类型的句柄。 77 | 78 | 79 | ## 另见 80 | 81 | [guest_create](guest_create.md), 82 | [guest_set_trap](guest_set_trap.md), 83 | [vcpu_create](vcpu_create.md), 84 | [vcpu_interrupt](vcpu_interrupt.md), 85 | [vcpu_read_state](vcpu_read_state.md), 86 | [vcpu_write_state](vcpu_write_state.md). -------------------------------------------------------------------------------- /zircon/docs/syscalls/vcpu_write_state.md: -------------------------------------------------------------------------------- 1 | # zx_vcpu_write_state 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/18df557635b5b32816f0236ce8ee64d38bf42188/docs/syscalls/vcpu_write_state.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | vcpu_write_state —— 写入VCPU的状态 12 | 13 | 14 | ## 概要 15 | 16 | ``` 17 | #include 18 | #include 19 | 20 | zx_status_t zx_vcpu_write_state(zx_handle_t vcpu, uint32_t kind, 21 | const void* buffer, size_t buffer_size); 22 | ``` 23 | 24 | 25 | ## 描述 26 | 27 | 30 | **vcpu_write_state()** 的功能是从*buffer*中读取状态,并写入到*kind*指定的*vcpu*中。 31 | 但只有当*vcpu*暂停执行时,写入它的状态才是有效的。 32 | 33 | 34 | *kind*的值可以是*ZX_VCPU_STATE*或*ZX_VCPU_IO*。 35 | 36 | ## 权限 37 | 38 | TODO(ZX-2399) 39 | 40 | 41 | ## 返回值 42 | 43 | 45 | **vcpu_write_state()** 调用成功则返回**ZX_OK**。 46 | 如果调用失败,则返回负的错误码。 47 | 48 | 49 | 50 | ## 错误码 51 | 52 | 53 | **ZX_ERR_ACCESS_DENIED**:*vcpu*缺少*ZX_RIGHT_WRITE*权限。 54 | 55 | 56 | **ZX_ERR_BAD_HANDLE**:*vcpu*是无效句柄。 57 | 58 | 59 | **ZX_ERR_BAD_STATE**:*vcpu*处于错误状态,无法写入状态。 60 | 61 | 63 | **ZX_ERR_INVALID_ARGS**:*kind*的值无效;或*buffer*是无效指针;或者*buffer_size*与*kind*结构所期望的大小不匹配。 64 | 65 | 66 | 67 | **ZX_ERR_WRONG_TYPE**:*vcpu*不是VCPU类型的句柄。 68 | 69 | 70 | ## 另见 71 | 72 | [guest_create](guest_create.md), 73 | [guest_set_trap](guest_set_trap.md), 74 | [vcpu_create](vcpu_create.md), 75 | [vcpu_resume](vcpu_resume.md), 76 | [vcpu_interrupt](vcpu_interrupt.md), 77 | [vcpu_read_state](vcpu_read_state.md). -------------------------------------------------------------------------------- /zircon/docs/syscalls/vmar_destroy.md: -------------------------------------------------------------------------------- 1 | # zx_vmar_destroy 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/679b2f9ea950d56a34c40a808dc78a9d45db0917/docs/syscalls/vmar_destroy.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | vmar_destroy —— 销毁虚拟内存地址区域 12 | 13 | ## 概要 14 | 15 | ``` 16 | #include 17 | 18 | zx_status_t zx_vmar_destroy(zx_handle_t vmar_handle); 19 | ``` 20 | 21 | 22 | ## 描述 23 | 24 | 26 | **vmar_destroy()** 的功能是取消给定区域内的所有映射,并销毁该区域的所有子区域。 27 | 注意,此操作在逻辑上是递归的。 28 | 29 | 31 | 此操作不会关闭*vmar_handle*,指向此VMAR的任何未关闭的句柄仍将是有效句柄,但它们的所有对VMAR的操作都将失败。 32 | 33 | 34 | ## 权限 35 | 36 | TODO(ZX-2399) 37 | 38 | 39 | ## 返回值 40 | 41 | 42 | **vmar_destroy()** 调用成功则返回**ZX_OK**。 43 | 44 | 45 | ## 错误码 46 | 47 | 48 | **ZX_ERR_BAD_HANDLE**:*vmar_handle*是无效句柄。 49 | 50 | 51 | **ZX_ERR_WRONG_TYPE**:*vmar_handle*不是VMAR类型的句柄。 52 | 53 | 55 | **ZX_ERR_BAD_STATE**:此区域已被销毁。 56 | 57 | 58 | ## 注释 59 | 60 | 61 | ## 另见 62 | 63 | [vmar_allocate](vmar_allocate.md), 64 | [vmar_map](vmar_map.md), 65 | [vmar_protect](vmar_protect.md), 66 | [vmar_unmap](vmar_unmap.md). -------------------------------------------------------------------------------- /zircon/docs/syscalls/vmar_unmap.md: -------------------------------------------------------------------------------- 1 | # zx_vmar_unmap 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/679b2f9ea950d56a34c40a808dc78a9d45db0917/docs/syscalls/vmar_unmap.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | vmar_unmap —— 取消映射虚拟内存页面 12 | 13 | 14 | ## 概要 15 | 16 | ``` 17 | #include 18 | 19 | zx_status_t zx_vmar_unmap(zx_handle_t handle, zx_vaddr_t addr, uint64_t len); 20 | ``` 21 | 22 | 23 | ## 描述 24 | 25 | 31 | **vmar_unmap()** 取消所有VMO的映射并销毁(如同调用**vmar_destroy**一样)在`[*addr*, *addr* + *len*)`范围内的所有子区域。 32 | 范围内的任何子区域必须完全在该范围内(即部分重叠会导致错误)。 33 | 如果内存映射仅部分在该范围内,则映射将被拆分,并且请求范围内的部分将被取消映射。 34 | 35 | 36 | *len*的大小必须是页面对齐的。 37 | 38 | 39 | ## 权限 40 | 41 | TODO(ZX-2399) 42 | 43 | 44 | ## 返回值 45 | 46 | 47 | **vmar_unmap()** 调用成功则返回**ZX_OK**。 48 | 49 | 50 | ## 错误码 51 | 52 | 53 | **ZX_ERR_BAD_HANDLE**:*vmar_handle*是无效句柄。 54 | 55 | 56 | **ZX_ERR_WRONG_TYPE**:*vmar_handle*不是VMAR类型的句柄。 57 | 58 | 60 | **ZX_ERR_INVALID_ARGS**:下列情况之一,*addr*不是页面对齐;*len*是0或不是页面对齐;或者请求的范围部分地与子区域重叠。 61 | 62 | 63 | **ZX_ERR_BAD_STATE**:*vmar_handle*句柄指向的是已销毁对象。 64 | 65 | 66 | **ZX_ERR_NOT_FOUND**:找不到请求的映射。 67 | 68 | 69 | ## 注释 70 | 71 | 72 | ## 另见 73 | 74 | [vmar_allocate](vmar_allocate.md), 75 | [vmar_destroy](vmar_destroy.md), 76 | [vmar_map](vmar_map.md), 77 | [vmar_protect](vmar_protect.md). -------------------------------------------------------------------------------- /zircon/docs/syscalls/vmar_unmap_handle_close_thread_exit.md: -------------------------------------------------------------------------------- 1 | # zx_vmar_unmap_handle_close_thread_exit 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/679b2f9ea950d56a34c40a808dc78a9d45db0917/docs/syscalls/vmar_unmap_handle_close_thread_exit.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 11 | vmar_unmap_handle_close_thread_exit —— 解除内存映射,关闭相关的句柄,并退出线程。 12 | 13 | 14 | ## 概要 15 | 16 | ``` 17 | #include 18 | 19 | zx_status_t zx_vmar_unmap_handle_close_thread_exit(zx_handle_t vmar_handle, 20 | zx_vaddr_t addr, size_t size, 21 | zx_handle_t close_handle); 22 | ``` 23 | 24 | 25 | ## 描述 26 | 27 | 28 | **vmar_unmap_handle_close_thread_exit**()依照顺序执行下列三个操作: 29 | 1. `zx_vmar_unmap(vmar_handle, addr, size);` 30 | 2. `zx_handle_close(close_handle);` 31 | 3. `zx_thread_exit();` 32 | 33 | 37 | 此调用期望的结果是第一个操作取消包括调用线程自己的堆栈在内的映射区域(虽然这不是必需的,但它是允许的)。 38 | 这仅对于此调用有效,但对于*zx_vmar_unmap()* 或任何其他调用将是无效的。 39 | 40 | 43 | 如果*vmar_unmap*操作成功,则此调用永远不再返回。 44 | 如果`close_handle`是一个无效的句柄,以致*handle_close*操作失败,那么该线程会产生一次错误退出(正如`__builtin_trap()`一样)。 45 | 46 | 47 | ## 权限 48 | 49 | TODO(ZX-2399) 50 | 51 | 52 | ## 返回值 53 | 54 | 55 | **vmar_unmap_handle_close_thread_exit()** 调用成功后不再返回 56 | 57 | 58 | ## 错误码 59 | 60 | 61 | 62 | 和[*zx_vmar_unmap*()](vmar_unmap.md)系统调用一样。 63 | 64 | 65 | ## 注释 66 | 67 | 72 | 本调用的设计目的是让一个垂死的线程取消映射它自己的堆栈,关闭它自己的线程句柄,然后退出。 73 | 线程句柄不能事先关闭,因为关闭线程的最后一个句柄会杀死该线程。 74 | 堆栈无法事先取消映射,因为线程必须有一些堆栈空间才能执行最终的系统调用。 75 | 76 | 79 | 此调用用于分离的(deteched)线程,而[*futex_wake_handle_close_thread_exit()*](futex_wake_handle_close_thread_exit.md)则用于joinable线程。 80 | 81 | ## 另见 82 | 83 | [vmar_unmap](vmar_unmap.md), 84 | [handle_close](handle_close.md), 85 | [thread_exit](thread_exit.md), 86 | [futex_wake_handle_close_thread_exit](futex_wake_handle_close_thread_exit.md). -------------------------------------------------------------------------------- /zircon/docs/syscalls/vmo_get_size.md: -------------------------------------------------------------------------------- 1 | # zx_vmo_get_size 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/679b2f9ea950d56a34c40a808dc78a9d45db0917/docs/syscalls/vmo_get_size.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | vmo_get_size —— 获取VMO对象当前的大小 12 | 13 | 14 | ## 概要 15 | 16 | ``` 17 | #include 18 | 19 | zx_status_t zx_vmo_get_size(zx_handle_t handle, uint64_t* size); 20 | 21 | ``` 22 | 23 | 24 | ## 描述 25 | 26 | 27 | **vmo_get_size()** 返回VMO当前的大小。 28 | 29 | 30 | ## 权限 31 | 32 | TODO(ZX-2399) 33 | 34 | 35 | ## 返回值 36 | 37 | 39 | **vmo_get_size()** 调用成功则返回**ZX_OK**,如果发生错误,则返回负的错误码。 40 | 41 | 42 | ## 错误码 43 | 44 | 45 | **ZX_ERR_BAD_HANDLE**:*handle*是无效句柄。 46 | 47 | 48 | **ZX_ERR_WRONG_TYPE**:*handle*不是VMO类型句柄。 49 | 50 | 51 | **ZX_ERR_INVALID_ARGS**:*size*是无效指针或为`NULL`。 52 | 53 | 54 | ## 另见 55 | 56 | [vmo_create](vmo_create.md), 57 | [vmo_clone](vmo_clone.md), 58 | [vmo_read](vmo_read.md), 59 | [vmo_write](vmo_write.md), 60 | [vmo_set_size](vmo_set_size.md), 61 | [vmo_op_range](vmo_op_range.md). -------------------------------------------------------------------------------- /zircon/docs/syscalls/vmo_read.md: -------------------------------------------------------------------------------- 1 | # zx_vmo_read 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/679b2f9ea950d56a34c40a808dc78a9d45db0917/docs/syscalls/vmo_read.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | vmo_read —— 从VMO中读取字节 12 | 13 | 14 | ## 概要 15 | 16 | ``` 17 | #include 18 | 19 | zx_status_t zx_vmo_read(zx_handle_t handle, void* buffer, uint64_t offset, size_t buffer_size); 20 | 21 | ``` 22 | 23 | 24 | ## 描述 25 | 26 | 27 | **vmo_write()** 的功能是试图从VMO的*offset*位移处读取*buffer_size*字节的数据。 28 | 29 | 30 | *buffer*是指向用户缓冲区的指针,用于读入字节。 31 | 32 | 34 | *buffer_size*是试图读取的字节数,并且*buffer*缓冲区需即至少有*buffer_size*字节。 35 | 36 | 37 | ## 权限 38 | 39 | TODO(ZX-2399) 40 | 41 | 42 | ## 返回值 43 | 44 | 48 | **zx_vmo_read()** 调用成功则返回**ZX_OK**,并且将*buffer_size*字节的数据写入到*buffer*中。 49 | 如果发生错误,则返回负的错误码,且写入*buffer*的字节数是不确定的。 50 | 51 | 52 | ## 错误码 53 | 54 | 55 | **ZX_ERR_BAD_HANDLE**:*handle*是无效句柄。 56 | 57 | 58 | **ZX_ERR_WRONG_TYPE**:*handle*不是VMO类型的句柄。 59 | 60 | 61 | **ZX_ERR_ACCESS_DENIED**:*handle*不具有**ZX_RIGHT_READ**权限。 62 | 63 | 64 | **ZX_ERR_INVALID_ARGS**:*buffer*是无效指针或`NULL`。 65 | 66 | 68 | **ZX_ERR_OUT_OF_RANGE**:*offset*大于或等于VMO的结束位置,或者VMO大小小于*buffer_size*。 69 | 70 | 71 | **ZX_ERR_BAD_STATE**:VMO已标记为未缓存,无法直接读取。 72 | 73 | 74 | ## 另见 75 | 76 | [vmo_create](vmo_create.md), 77 | [vmo_clone](vmo_clone.md), 78 | [vmo_write](vmo_write.md), 79 | [vmo_get_size](vmo_get_size.md), 80 | [vmo_set_size](vmo_set_size.md), 81 | [vmo_op_range](vmo_op_range.md). 82 | [vmo_set_cache_policy](vmo_set_cache_policy.md) -------------------------------------------------------------------------------- /zircon/docs/syscalls/vmo_replace_as_executable.md: -------------------------------------------------------------------------------- 1 | # zx_vmo_replace_as_executable 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/679b2f9ea950d56a34c40a808dc78a9d45db0917/docs/syscalls/vmo_replace_as_executable.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | vmo_replace_as_executable —— 向vmo添加可执行权限 12 | 13 | 14 | ## 概要 15 | 16 | ``` 17 | #include 18 | 19 | zx_status_t zx_vmo_replace_as_executable(zx_handle_t vmo, zx_handle_t vmex, zx_handle_t* out); 20 | 21 | ``` 22 | 23 | 24 | ## 描述 25 | 26 | 28 | **vmo_replace_as_executable()** 的功能是使用新的虚拟内存对象替换*vmo*,它引用与*vmo*相同的底层VM对象,并添加**ZX_RIGHT_EXECUTE**权限。 29 | 30 | 31 | 操作完成后*vmo*将失效。 32 | 33 | 34 | ## 权限 35 | 36 | 38 | *vmex*必须是有效的**ZX_RSRC_KIND_VMEX**类型资源句柄,或**ZX_HANDLE_INVALID**(以便于迁移旧代码)。 39 | 40 | 41 | TODO(SEC-42):禁止使用**ZX_HANDLE_INVALID**。 42 | 43 | 44 | ## 返回值 45 | 46 | 48 | **vmo_replace_as_executable()** 调用成功则返回**ZX_OK**,如果发生错误,则返回负的错误码。 49 | 50 | 51 | ## 错误码 52 | 53 | 55 | **ZX_ERR_BAD_HANDLE**:*vmo*不是有效的VM对象句柄,或*vmex*不是有效的**ZX_RSRC_KIND_VMEX**资源句柄。 56 | 57 | 60 | **ZX_ERR_NO_MEMORY**:由于内存不足导致的失败。 61 | 而用户空间无法处理这个(不太可能发生的)错误。 62 | 在将来的构建版本中,将不再出现此错误。 63 | 64 | 65 | ## 另见 66 | 67 | [resource_create](resource_create.md), 68 | [vmar_map](vmar_map.md). -------------------------------------------------------------------------------- /zircon/docs/syscalls/vmo_set_size.md: -------------------------------------------------------------------------------- 1 | # zx_vmo_set_size 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/679b2f9ea950d56a34c40a808dc78a9d45db0917/docs/syscalls/vmo_set_size.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | vmo_get_size —— 调整VMO对象的大小 12 | 13 | 14 | ## 概要 15 | 16 | ``` 17 | #include 18 | 19 | zx_status_t zx_vmo_set_size(zx_handle_t handle, uint64_t size); 20 | 21 | ``` 22 | 23 | 24 | ## 描述 25 | 26 | 27 | **vmo_set_size()** 的功能是设置VMO对象新的大小。 28 | 29 | 31 | 实际大小将向上舍入到下一页边界位置的代销。 32 | 对**vmo_get_size()** 的后续调用将返回此向上舍入后的大小值。 33 | 34 | 35 | ## 权限 36 | 37 | TODO(ZX-2399) 38 | 39 | 40 | ## 返回值 41 | 42 | 44 | **vmo_set_size()** 调用成功则返回**ZX_OK**,如果发生错误,则返回负的错误码。 45 | 46 | 47 | ## 错误码 48 | 49 | 50 | **ZX_ERR_BAD_HANDLE**:*handle*是无效句柄。 51 | 52 | 53 | **ZX_ERR_WRONG_TYPE**:*handle*不是VMO类型句柄。 54 | 55 | 56 | **ZX_ERR_ACCESS_DENIED**:*handle*缺少**ZX_RIGHT_WRITE**权限。 57 | 58 | 59 | **ZX_ERR_UNAVAILABLE**:VMO是使用**ZX_VMO_NON_RESIZABLE**标志位创建的对象,因而无法更改大小。 60 | 61 | 62 | **ZX_ERR_OUT_OF_RANGE**:请求调整的大小太大。 63 | 64 | 65 | **ZX_ERR_NO_MEMORY**:由于缺少系统内存而导致的失败。 66 | 67 | 68 | ## 另见 69 | 70 | [vmo_create](vmo_create.md), 71 | [vmo_clone](vmo_clone.md), 72 | [vmo_read](vmo_read.md), 73 | [vmo_write](vmo_write.md), 74 | [vmo_get_size](vmo_get_size.md), 75 | [vmo_op_range](vmo_op_range.md). -------------------------------------------------------------------------------- /zircon/docs/syscalls/vmo_write.md: -------------------------------------------------------------------------------- 1 | # zx_vmo_write 2 | --- 3 | 4 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/679b2f9ea950d56a34c40a808dc78a9d45db0917/docs/syscalls/vmo_write.md) 5 | 6 | --- 7 | 8 | ## 名称 9 | 10 | 11 | vmo_write —— 向VMO写入字节 12 | 13 | 14 | ## 概要 15 | 16 | ``` 17 | #include 18 | 19 | zx_status_t zx_vmo_write(zx_handle_t handle, const void* buffer, 20 | uint64_t offset, size_t buffer_size); 21 | 22 | ``` 23 | 24 | 25 | ## 描述 26 | 27 | 28 | **vmo_write()** 的功能时试图将*buffer_size*字节写入VMO的*offset*位移处。 29 | 31 | *buffer*是指向用户缓冲区的指针,用于字节写入。 32 | 33 | 34 | *buffer_size*是试图写入的字节数。 35 | 36 | 37 | ## 权限 38 | 39 | TODO(ZX-2399) 40 | 41 | 42 | ## 返回值 43 | 44 | 48 | **zx_vmo_write()** 调用成功则返回**ZX_OK**,并且将写入从*buffer*读取的*buffer_size*字节的数据。 49 | 如果发生错误,则返回负的错误码,且写入的字节数是不确定的。 50 | 51 | 52 | ## 错误码 53 | 54 | 55 | **ZX_ERR_BAD_HANDLE**:*handle*是无效句柄。 56 | 57 | 58 | **ZX_ERR_WRONG_TYPE**:*handle*不是VMO类型的句柄。 59 | 60 | 61 | **ZX_ERR_ACCESS_DENIED**:*handle*不具有**ZX_RIGHT_WRITE**权限。 62 | 63 | 64 | **ZX_ERR_INVALID_ARGS**:*buffer*是无效指针或`NULL`。 65 | 66 | 67 | **ZX_ERR_NO_MEMORY**:无法分配足够系统内存以完成写入操作。 68 | 69 | 70 | **ZX_ERR_OUT_OF_RANGE**:*offset*大于或等于VMO结束位置,或者VMO大小小于*buffer_size*。 71 | 72 | 73 | **ZX_ERR_BAD_STATE**:VMO已标记为未缓存,无法直接写入。 74 | 75 | 76 | ## 另见 77 | 78 | [vmo_create](vmo_create.md), 79 | [vmo_clone](vmo_clone.md), 80 | [vmo_read](vmo_read.md), 81 | [vmo_get_size](vmo_get_size.md), 82 | [vmo_set_size](vmo_set_size.md), 83 | [vmo_op_range](vmo_op_range.md). 84 | [vmo_set_cache_policy](vmo_set_cache_policy.md) -------------------------------------------------------------------------------- /zircon/docs/time.md: -------------------------------------------------------------------------------- 1 | 2 | # 时间单位 3 | --- 4 | 5 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/8ac2b7fda3d21928c5361c896a8a9fab1f7b66a7/docs/time.md) 6 | 7 | --- 8 | 9 | ## 开放给用户空间的时间单位 10 | 11 | 12 | *zx\_time\_t*以纳秒为单位。 13 | 14 | 15 | 使用[zx_clock_get()](syscalls/clock_get.md)获取当前时间。 16 | 17 | 18 | ## 内核内部的时间单位 19 | 20 | 21 | *lk\_time\_t*以纳秒为单位。 22 | 23 | 24 | 要获取自系统启动时的当前时间,请使用: 25 | 26 | ``` 27 | #include 28 | 29 | lk_time_t current_time(void); 30 | ``` -------------------------------------------------------------------------------- /zircon/docs/zx_and_lk.md: -------------------------------------------------------------------------------- 1 | # Zircon和LK 2 | 3 | --- 4 | 5 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/3adf3875541d28ad944637f753f8e454fa91dceb/docs/zx_and_lk.md) 6 | 7 | --- 8 | 9 | 15 | 从Zircon内部看来,它是构建于[LK](https://github.com/littlekernel/lk)基础之上的,但是其上层却是全新的实现。例如,Zircon具有进程的概念而LK没有,但是Zircon进程却依然构建于LK的结构,比如线程(thread)和内存(memory)之上。 16 | 17 | 24 | LK是为嵌入式程序等小型系统设计的内核。对于[FreeRTOS](http://www.freertos.org/)和[ThreadX](http://rtos.com/products/threadx/)等商业系统,它是不错的开源替代品。这些小型系统通常具有非常有限的内存大小,固定的外围设备和处理的任务规模。 25 | 26 | 31 | 而另一方面,Zircon面向的是当前主流的手机和个人电脑,它们通常具备较高性能的处理器,可观的内存容量和丰富的外设以完成各种开放型应用。 32 | 33 | 36 | 更具体地讲,一些可见的区别在于: 37 | 38 | 43 | + 用户模式在Zircon上是一等公民,而LK不支持用户模式; 44 | + Zircon具有object和handle系统,而LK对两者都不支持; 45 | + Zircon有基于capability的安全模型,而在LK中,所有的代码都是完全授信的。 46 | 47 | 51 | 随着项目的进展,为了支持新的需求,即使底层结构也可能会发生改变,以更好地适应系统的其他部分。 52 | -------------------------------------------------------------------------------- /zircon/system/ulib/fidl/README.md: -------------------------------------------------------------------------------- 1 | 2 | # FIDL的C和C++语言库 3 | ---- 4 | 5 | [*英文原文快照*](https://github.com/fuchsia-mirror/zircon/blob/4ef2fb8cc0e5c36934e1377f8f33a3744cc07818/system/ulib/fidl/README.md) 6 | 7 | ---- 8 | 12 | 该库为FIDL提供C语言绑定的运行时。 13 | 其中主要包括消息编码和解码功能的定义,并还包括FIDL的数据类型的定义,例如向量和字符串等。 14 | 15 | 16 | ## 依赖 17 | 18 | 21 | 该库仅依赖于C标准库和Zircon内核的公开API。 22 | 特别地,该库不依赖于C++标准库,以及libfbl.a和libzx.a。 23 | 24 | 28 | 该库中的某些目标文件的生成需要new运算符的实现。 29 | 虽然这些实现通常由C++标准库提供,但它们也可以由其他库(例如,libzxcpp)提供。 30 | 31 | 32 | ## 习惯 33 | 35 | 为了避免使用C++标准库,该库使用了一些不寻常的习惯: 36 | 37 | ### std::move 38 | 42 | 43 | 不是使用`std::move`为类型`T`创建右值引用,而是使用`static_cast`。 44 | `static_cast`是用于创建右值引用的语言级(而非库级)构造。 45 | --------------------------------------------------------------------------------