From 404916636e1adda57c003135a9673d751f6669fe Mon Sep 17 00:00:00 2001 From: y2-Whyto Date: Mon, 11 Jul 2022 22:10:39 +0800 Subject: [PATCH 001/154] =?UTF-8?q?Revert=20"Revert=20"/contribute/docs/do?= =?UTF-8?q?cument-standards.md=20=E7=BF=BB=E8=AF=91=E6=8F=90=E4=BA=A4""?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit fd4f9817f2b318c416c1cc2e233ffffcff58a4d5. --- contribute/docs/documentation-standards.md | 268 +++++++++++++++++++++ 1 file changed, 268 insertions(+) create mode 100644 contribute/docs/documentation-standards.md diff --git a/contribute/docs/documentation-standards.md b/contribute/docs/documentation-standards.md new file mode 100644 index 00000000..dc320384 --- /dev/null +++ b/contribute/docs/documentation-standards.md @@ -0,0 +1,268 @@ + +# 文档标准概述 + + +本文档概述了 Fuchsia 文档的标准、结构、语言风格和最佳做法。 + + +## 文档位置 + + + * **为开发 Fuchsia 具体特性的专门文档:** + 针对开发者创建或维护 Fuchsia 代码库特定部分的文档,应当和源代码保存在同一目录下。这类文档通常以 `README.md` 文件的形式嵌入在 Fuchsia 代码库中。 + + * **面向 Fuchsia 开发者的总体文档:** Fuchsia 文档应当创建在 /HEAD/docs/ 中. + 在 `/docs/` 目录下,您应当在以下子目录之一内创建文档: + + * get-started: + + 有关下载、设置、开始 Fuchsia 开发的具体指南应当放进 `/get-started`。这类内容应当包含观点明确的、简短的教程,以帮助新用户入门 Fuchsia,并在 Fuchsia.dev 中链接至附加文档。 + * development: + + `/development/` 目录(在网站上显示为“指南”(Guides))中包含了针对Fuchsia开发者的说明和教程。该目录包含关于如何构建、运行和测试 Fuchsia 的文档。 + * concepts: + + `/concepts` 目录包含针对 Fuchsia 具体特性及其工作原理的深入解释,包括操作系统概述、框架、架构和软件包(package)。 + * reference: + + `/reference/` 目录包含生成的关于 Fuchsia 工具和 API 的参考文档,包括 FIDL 和内核的参考文档。 + * contribute: + + `/contribute/` 目录包含代码和文档贡献进度以及最佳做法,包含文档准则和风格指南、代码策略以及管理体系。 + * `images` + + `/images/` 目录包含在文档中使用的图像。您应当将图像放在这一公共目录中。 + + + + +大多数文档可以分为以下几类: + + +- [程序性的](documentation-types.md#procedural-documentation) + - 入门 - 初始设置的文档 + - 指南 - 任务导向的文档 + + +- [概念性的](documentation-types.md#conceptual-documentation) - 多侧重于教授 Fuchsia,Fuchsia 架构和 Fuchsia 组件的基础性文档 + + +- [参考文档](documentation-types.md#reference-documentation) - 侧重于详细说明 Fuchsia API 和 工具的语法和参数的文档。这类文档通常自动生成。 + + +要获取更多信息,请参阅[文档类型](documentation-types.md)。 + + +## 文档和代码风格指南 + + +为确保由大量贡献者创建的文档都保持一致性,遵循文档风格指南很重要。要获取具体文档指导,请参阅[文档风格指南](documentation-style-guide.md);要获取代码样例指导,请参阅[代码样例风格指南](code-sample-style-guide.md)。 + + + +## 搜索的最佳做法 + +文档只有在用户能查到的时候才算有用。下面是一些关于可查性和搜索的最佳做法: + + - 将您的文档添加至目录:在 fuchsia.dev 的左侧导航中添加文档链接。要获取更多信息,请参阅[网站导航和目录文件](documentation-navigation-toc.md) + +- 交叉链接文档:添加指向文档主题的链接,以帮助读者更好地理解文档的内容。 例如,[Fuchsia 模拟器] (/development/build/emulator.md) 的概念文档链接到有关 Fuchsia 模拟器的相关指南和入门文档。 + +- 使用一致的术语:如果您在撰写有关 Fuchsia 中特定概念的文章,请确认您使用的是一致的术语。 使用[术语表](/glossary/README.md)来验证用语。 + + +## 文档的文件格式和文件名 + + +Fuchsia 的所有文档均使用 Markdown(`.md`)撰写,Fuchsia.dev 使用 [Hoedown Markdown Parser](https://github.com/hoedown/hoedown)。 + + +该网站的导航是由 `_toc.yaml` 文件配置的,该文件包含在每个文档目录中。请使用[网站导航和目录文件](documentation-navigation-toc.md)中的指导来更新这些文件。 + + +文件和目录名应当为小写,并使用短横线(hyphen)而非下划线(underscore)来分隔单词。在文件或目录名中请仅使用标准 ASCII 字母数字字符。如果文件名包含带有下划线的命令,那么您可以加入下划线。 + + +## 语言风格总体指导 + + +- **使用简单的美国英语撰写。** 使用清晰、直白的美国英语撰写,以使内容易于理解。使用简单的词汇,保持简洁使用(常见)缩写,如 _it's_ 或 _don't_。 + +- **心怀敬意。** 请遵循[尊重性规范](/contribute/respectful_code.md)中规定的方针。 + +- **使用第二人称(“you”)撰写。** Fuchsia文档是写给用户(“you”)的。例如,“您(you)可以通过以下步骤安装 Fuchsia……”。不要使用第三人称称呼读者(“Fuchsia 用户可以通过……安装 Fuchsia”)或使用“we”(“我们(we)可以通过……安装 Fuchsia”)。 + +- **使用现在时态撰写。** 请在记录系统时始终立足眼下(it is),而非未来(it will be)。类似“will”之类的词语非常含糊。例如“您将看到”这种说法将引起如“我何时将会看到?”之类的问题。1分钟,还是20分钟呢?另外,若非必要,请不要提及未来的产品特性。提及可能取消的未来计划将导致维护上的困难。 + +- **保持语句简短具体。**使用标点符号可以便于您的读者跟进说明、理解概念。而且,短句更易于翻译。 + +- **了解您的受众群体。** 在撰写文档之前,请确定好您的受众群体。了解受众群体使您能够明确他们应当熟悉的概念。当撰写面向更高级受众群体的文档时,请在文档前声明,让用户了解这一前提后,再进行阅读。 + +- **使用主动语态。** 请尽可能使用主动语态写作,因为被动语态会使句子模棱两可且难以理解。 下面是一个例子: + - 主动语态:“操作系统运行一个进程。”(The operating system runs a process.)在这种情况下,主语执行动词表示的动作。 + - 被动语态:“一个进程正在被运行。”(A process is being run.)主语不再是“主动的”(_active_),而是被动词作用——它是“被动的”(_passive_)。 + 大多数情况下,如果您使用了“by”,那么您的句子可能仍然是被动语态。 + + +- **若使用首字母缩写词,请您在第一次书写时进行定义。** 例如,looks good to me(LGTM,我觉得看起来很好)。不要认为每个人都理解所有的首字母缩写词。您不需要定义工业标准首字母缩写词,如 TCP/IP。 + + +- **定义技术术语,回避行话。** Fuchsia 文档应当易于各个层次的开发者理解。请避免使用不常用或高度技术性词语而使得文章过于复杂。如果您使用了 Fuchsia 特定的术语,请在[术语表](/glossary/README.md)中对其进行定义。请回避自造词。 + + +- **回避口头表达或地区习语。** 请记住,许多 Fuchsia 用户并非英语母语者。请避免使用难于翻译的习语,例如“that's the way the cookie crumbles.”(生米已成熟饭/覆水难收)虽然对您而言能够理解,但是很难准确地翻译到其他语言中。 + + +- **避免引用专有信息。** 这里指的是任何可能是已注册商标的任何潜在词语或您公司的任何内部信息(API 密钥、机器名等)。 + + +- **使用性别中立代词。** 请不要使用 _he_,_him_,_his_,_she_ 或 _her_,也不要使用 _he/she_ 或 _(s)he_ 等其他类似的符号表达方式。取而代之,请使用单数的 _they_。 + + +- **使用一致的术语。**确保术语在代码、用户界面和文档中是一致的。尽可能使用常见术语,并使用[术语表](/glossary/README.md)来验证用语。 From d9d7adbf435283284dead8e951e0f9f1a6bfba75 Mon Sep 17 00:00:00 2001 From: y2-Whyto Date: Mon, 11 Jul 2022 22:13:03 +0800 Subject: [PATCH 002/154] Update documentation-standards.md --- contribute/docs/documentation-standards.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contribute/docs/documentation-standards.md b/contribute/docs/documentation-standards.md index dc320384..f9f36280 100644 --- a/contribute/docs/documentation-standards.md +++ b/contribute/docs/documentation-standards.md @@ -202,7 +202,7 @@ contains a command with an underscore, then you can include the underscore. - **Keep sentences short and concrete.** Using punctuation allows your reader to follow instructions and understand concepts. Also, short sentences are easier to translate. --> -- **保持语句简短具体。**使用标点符号可以便于您的读者跟进说明、理解概念。而且,短句更易于翻译。 +- **保持语句简短具体。** 使用标点符号可以便于您的读者跟进说明、理解概念。而且,短句更易于翻译。 -- **使用一致的术语。**确保术语在代码、用户界面和文档中是一致的。尽可能使用常见术语,并使用[术语表](/glossary/README.md)来验证用语。 +- **使用一致的术语。** 确保术语在代码、用户界面和文档中是一致的。尽可能使用常见术语,并使用[术语表](/glossary/README.md)来验证用语。 From 1c34d409cce87b76a8b458a7ee3c346cf3fcbd92 Mon Sep 17 00:00:00 2001 From: y2-Whyto Date: Tue, 12 Jul 2022 23:17:31 +0800 Subject: [PATCH 004/154] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E7=AC=94=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contribute/docs/documentation-standards.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/contribute/docs/documentation-standards.md b/contribute/docs/documentation-standards.md index c6c9c8be..2e3783e3 100644 --- a/contribute/docs/documentation-standards.md +++ b/contribute/docs/documentation-standards.md @@ -90,7 +90,7 @@ Most documentation can be divided into the following categories: -- [概念性的](documentation-types.md#conceptual-documentation) - 多侧重于教授 Fuchsia,Fuchsia 架构和 Fuchsia 组件的基础性文档 +- [概念性的](documentation-types.md#conceptual-documentation) - 多侧重于教授 Fuchsia、Fuchsia 架构和 Fuchsia 组件的基础性文档 -- **使用简单的美国英语撰写。** 使用清晰、直白的美国英语撰写,以使内容易于理解。使用简单的词汇,保持简洁使用(常见)缩写,如 _it's_ 或 _don't_。 +- **使用简单的美国英语撰写。** 使用清晰、直白的美国英语撰写,以使内容易于理解。请使用简单的词汇,保持简洁,并使用(常见)缩写,如 _it's_ 或 _don't_。 @@ -220,7 +220,7 @@ contains a command with an underscore, then you can include the underscore. In most cases, if you use "by" this indicates that your sentence might be still be in passive voice. --> -- **使用主动语态。** 请尽可能使用主动语态写作,因为被动语态会使句子模棱两可且难以理解。 下面是一个例子: +- **使用主动语态。** 请尽量使用主动语态写作,因为被动语态会使句子模棱两可且难以理解。 下面是一个例子: - 主动语态:“操作系统运行一个进程。”(The operating system runs a process.)在这种情况下,主语执行动词表示的动作。 - 被动语态:“一个进程正在被运行。”(A process is being run.)主语不再是“主动的”(_active_),而是被动词作用——它是“被动的”(_passive_)。 大多数情况下,如果您使用了“by”,那么您的句子可能仍然是被动语态。 From 619ee43565d984429af7a0cbccf25fc0c723ad56 Mon Sep 17 00:00:00 2001 From: y2-Whyto Date: Wed, 13 Jul 2022 19:14:16 +0800 Subject: [PATCH 005/154] =?UTF-8?q?/contribute/docs/documentation-style-gu?= =?UTF-8?q?ide.md=20=E7=BF=BB=E8=AF=91=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contribute/docs/documentation-style-guide.md | 196 ++++++++++++++++++- 1 file changed, 195 insertions(+), 1 deletion(-) diff --git a/contribute/docs/documentation-style-guide.md b/contribute/docs/documentation-style-guide.md index 4c182bb5..9f4f846a 100644 --- a/contribute/docs/documentation-style-guide.md +++ b/contribute/docs/documentation-style-guide.md @@ -1,13 +1,23 @@ + +# 文档风格指南 + +本文档给出了针对 Fuchsia.dev 写作风格的指南。这些方针基于[Google 开发者风格指南][google-dev-doc-style-guide]中的通用指导。 + +注意:本指南重点介绍了为 Fuchsia 编写文档的一些最佳做法。其中的某些主题在以下文档的资源中可能会得到更为广泛的探讨: + +* 要获取关于通用文档标准的信息,包括文件类型、位置和整体语言风格,请参阅 [Fuchsia 文档标准][doc-standard]。 +* 要获取关于措辞、风格和结构的具体指导,请参阅 [Fuchsia 文档风格指南][style-guide]。 + +## 文字和链接 + +### 遵循 80 字符限制 + +在 Fuchsia 项目中,代码的行最大长度为 100 字符,而文档的行最大长度为 80 字符。该规则一个值得注意的例外情况是 URL(即链接),写在一行中,不换行。 + +代码常使用缩进(页面左侧的空格),而英文散文(文档)多形成文字段落。这种差异导致了不同的宽度规格。 + +### 标记外部链接 + +请使用 `{:.external}` 标记任何不属于 `fuchsia.dev`、 +`fuchsia.googlesource.com` 或 `fuchsia-review.googlesource.com` 的链接: + +```none +这是一个[外部](http://example.com){:.external}链接。 ``` + +注意外部链接标志:这是一个[外部][external-link-example]{:.external}链接。 + +### 使用参考风格的链接 + +一般来说,Fuchsia 建议在 Markdown 文件中使用参考风格(reference-style)的链接。 参考风格链接使用与链接相关联的参考标识符,接下来每当您在文档中使用该链接时,即可引用该标识符。这使得文档中的链接易于更新。 + +推荐:请在您需要链接的位置创建标识符。 + + +本例中,链接标识符称为 `fuchsia-home`: + +```none +欢迎来到 [Fuchsia 首页][fuchsia-home]。 ``` + + +接着在文档底部对其定义: +
[fuchsia-home]: https://fuchsia.dev/
+ + +不推荐:编写如下的行内链接: + +```none +欢迎来到 [Fuchsia 首页](www.fuchsia.dev)。 +``` + +您可以在外部的 [Markdown 指南][markdown-reference-links]中阅读更多与参考风格链接有关的信息。 + +### 对不同的 Fuchsia 内容使用正确链接 + +在 Fuchsia 文档中您可以为三类内容添加链接: + +* `/docs/` - 链接至位于 Fuchsia 源树中 `/docs/` 目录内的文档。这些链接必须关联到具有 `.md` 扩展名的文件。例如,`/concepts/README.md`。 +* 源代码 - 链接至位于 Fuchsia 源树中的源代码文件。这些链接可以关联到任何文件扩展名,但这些文件必须存在于源树中。例如,`/src/sys/sysmgr/main.cc`。 +* 参考文档 - 链接至自动生成的 Fuchsia 参考文档。 + * 大多数 Fuchsia 参考文档不存在于源树内,但在 [fuchsia.dev][fuchsia-dev] 上发布了。这些链接必须使用完整形式的 URL。例如,`https://fuchsia.dev/reference/fidl/fuchsia.io`。 + * 不过,一些 Fuchsia 参考文档存在于源树内。这些文档位于 `/reference/`,并在 `https://fuchsia.dev/fuchsia-src/reference/` 中发布。这些链接必须关联到具有 `.md` 扩展名的文件。例如,`/reference/syscalls/bti_create.md`。 + + +### 测试您的链接后再提交更改 + +一旦创建了有效的 markdown 文件,您应当运行 `doc-checker` 以确保您的文件使用了有效的链接。当您试图提交包含 `.md` 文件的更改时,Gerrit 会运行 `doc-checker`,并会在您的提交中含有损坏链接时进行阻止。 + +要在本地运行 `doc-checker`,请使用 `fx format-code` 工具: ```posix-terminal fx format-code ``` + +## 标头(header) + +### 为页面和章节标题使用句首字母大写格式(sentence case) + +推荐:使用句首字母大写格式(sentence case): ```none # This title is an example of sentence case ``` + +不推荐:使用标题词首大写格式(title case): ```none # This Title is an Example of Title Case ``` + +### 为锚点使用连接号(dash),不要使用下划线 + +默认情况下,`fuchsia.dev` 创建锚点时会在在空格处使用下划线(`_`)。不过,当引用一个页面中的章节时,请使用连接号(`-`,dash),使用 `{#section-title}`。同样地,请在文件名中使用连接号。 + +推荐:为锚点使用连接号 + +```none + ## 这是一个章节标题 {#this-is-a-section-header} +``` + +## 代码样例 + +### 为 shell 命令样例使用 posix-terminal 格式化 + +推荐:为 shell 命令在 ``` 后添加 `posix-terminal` 能让读者更容易复制代码块中的内容。 +
 ```posix-terminal
@@ -149,66 +282,127 @@ fx ota
 ```
 
+ +该代码块在渲染时,命令前会添加 `$`: ```posix-terminal fx ota ``` + +不推荐:请勿在命令前硬编码一个 `$` 符号。 ```sh $ fx ota ``` + +### 使用 none 以禁用复制功能 + +推荐:对于不需要读者复制内容的代码或输出样例,请在 ``` 后添加 `none {:.devsite-disable-click-to-copy}`。 + +
+```none {:.devsite-disable-click-to-copy}
+$ my_command
+不必复制和粘贴该代码块。
+```
 
+ +该代码块在渲染时,右上角没有复制标志: + + ```none {:.devsite-disable-click-to-copy} +$ my_command +不必复制和粘贴该代码块。 ``` + +不推荐:为只需查看的内容启用复制功能。如果您在 ``` 之后不指定任何内容,那么复制功能默认是启用的。 + +
+```
+$ my_command
+不必复制和粘贴该代码块。
+```
 
+ +该代码块渲染为如下形式: + +``` +$ my_command +不必复制和粘贴该代码块。 ``` + +### 引用源代码时使用路径,不要使用 URL + +推荐:任何引用源代码的链接应当仅使用路径指代。否则您将收到静态错误检查(static error check)。 + +
+更新[状态标头][sh]
+[sh]: /zircon/system/ulib/inspect/include/lib/inspect/cpp/vmo/state.h
 
@@ -220,4 +414,4 @@ Update the [state header][sh] [google-dev-doc-style-guide]: https://developers.google.com/style [markdown-reference-links]: /contribute/docs/markdown.md [external-link-example]: http://example.com -[fuchsia-dev]: https://fuchsia.dev \ No newline at end of file +[fuchsia-dev]: https://fuchsia.dev From 3a4c0b977df84198f1b351da70b8c208cebc1cff Mon Sep 17 00:00:00 2001 From: Xyct <87l46110@gmail.com> Date: Wed, 20 Jul 2022 00:33:50 +0800 Subject: [PATCH 006/154] =?UTF-8?q?=E7=BF=BB=E8=AF=91=20=5Fcommon/intro/?= =?UTF-8?q?=5Fzircon=5Fsyscall.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- get-started/_common/intro/_zircon_syscall.md | 46 ++++++++++++++++++-- 1 file changed, 42 insertions(+), 4 deletions(-) diff --git a/get-started/_common/intro/_zircon_syscall.md b/get-started/_common/intro/_zircon_syscall.md index 0cfc85f5..8fdc6512 100644 --- a/get-started/_common/intro/_zircon_syscall.md +++ b/get-started/_common/intro/_zircon_syscall.md @@ -1,47 +1,85 @@ -## System calls + +## 系统调用 + +用户空间代码使用**系统调用**与内核空间对象交互。Zircon 的系统调用用来执行低层操作,如: + +* 内存管理 +* 任务和进程管理 +* 进程间通信(IPC)与同步 +* 异常处理 +* 硬件支持服务(时钟,熵,设备 I/O) + + + +用户空间进程通过 `libzircon.so` 访问系统调用,这是一个 +[虚拟动态共享对象(virtual Dynamic Shared Object,vDSO)][glossary.virtual-dynamic-shared-object]。 +Zircon vDSO 是 ELF 格式的共享库,它被内核映射到每个新进程的地址空间。 +这个库被称为“虚拟”,是因为它是直接由内核映像暴露,而非从文件加载的。 + +大多数系统调用直接操作一个或多个[句柄][glossary.handle]。 +句柄是进程内部对内核空间对象的引用,表示为32位整数(`zx_handle_t`)。 +每个句柄声明了持有者具有的对句柄自身或引用的对象执行操作的特权,即**权利**(right)。 From 68aca6594deecd9c334b465219bbcc323b401202 Mon Sep 17 00:00:00 2001 From: Xyct <87l46110@gmail.com> Date: Wed, 20 Jul 2022 23:59:22 +0800 Subject: [PATCH 007/154] Update get-started/_common/intro/_zircon_syscall.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修正“两个‘用’字连着” --- get-started/_common/intro/_zircon_syscall.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/get-started/_common/intro/_zircon_syscall.md b/get-started/_common/intro/_zircon_syscall.md index 8fdc6512..c7128a2a 100644 --- a/get-started/_common/intro/_zircon_syscall.md +++ b/get-started/_common/intro/_zircon_syscall.md @@ -6,7 +6,7 @@ User space code interacts with the objects in kernel space using **system calls**. Zircon has system calls to perform low-level operations such as: --> -用户空间代码使用**系统调用**与内核空间对象交互。Zircon 的系统调用用来执行低层操作,如: +用户空间代码使用**系统调用**与内核空间对象交互。Zircon 有执行低层操作的系统调用,如: -## 文档位置 +## 文档定位 - `/reference/` 目录包含生成的关于 Fuchsia 工具和 API 的参考文档,包括 FIDL 和内核的参考文档。 + `/reference/` 目录包含自动生成的关于 Fuchsia 工具和 API 的参考文档,包括 FIDL 和内核的参考文档。 * contribute: - `/contribute/` 目录包含代码和文档贡献进度以及最佳做法,包含文档准则和风格指南、代码策略以及管理体系。 + `/contribute/` 目录包含代码和文档的贡献进度以及最佳做法,包含文档准则和风格指南、代码策略以及管理体系。 * `images` +## 文档类型 -文件和目录名应当为小写,并使用短横线(hyphen)而非下划线(underscore)来分隔单词。在文件或目录名中请仅使用标准 ASCII 字母数字字符。如果文件名包含带有下划线的命令,那么您可以加入下划线。 +文件和目录名应当为小写,并使用短横线(hyphen)而非下划线(underscore)来分隔单词。在文件或目录名中请仅使用标准 ASCII 字母数字字符。如果文件名包含带有下划线的命令,那么您可以包含下划线。 -- **使用简单的美国英语撰写。** 使用清晰、直白的美国英语撰写,以使内容易于理解。请使用简单的词汇,保持简洁,并使用(常见)缩写,如 _it's_ 或 _don't_。 +- **使用通俗易懂的美国英语撰写。** 使用清晰、直白的美国英语撰写,以使内容易于理解。请使用简单的词汇,保持简洁,并使用(常见)缩写,如 _it's_ 或 _don't_。 From a71d3824ae2e7ac1cb762289f31be59a67029c08 Mon Sep 17 00:00:00 2001 From: y2-Whyto Date: Thu, 21 Jul 2022 14:53:44 +0800 Subject: [PATCH 014/154] Update documentation-standards.md --- contribute/docs/documentation-standards.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contribute/docs/documentation-standards.md b/contribute/docs/documentation-standards.md index 19e3f7d8..fa9319c3 100644 --- a/contribute/docs/documentation-standards.md +++ b/contribute/docs/documentation-standards.md @@ -155,7 +155,7 @@ include the following: All documentation for Fuchsia is written in Markdown (`.md`), and Fuchsia.dev uses the [Hoedown Markdown Parser](https://github.com/hoedown/hoedown). --> -Fuchsia 的所有文档均使用 Markdown(`.md`)撰写,Fuchsia.dev 使用 [Hoedown Markdown Parser](https://github.com/hoedown/hoedown)。 +Fuchsia 的所有文档均使用 Markdown(`.md`)撰写,Fuchsia.dev 使用 [Hoedown Markdown Parser](https://github.com/hoedown/hoedown) 作为 Markdown 文档语法分析器。 +## 沙箱化(sandboxing) + +当一个新进程被创建时,它没有任何能力。 +进程完全依赖于其创建者通过传给它的那些[句柄][glossary.handle]来提供能力。 +我们也可以说,空进程没有**环境权限**(ambient authority)。 + +因此,进程被创建时通常被赋予一些初始资源和能力。 +`fuchsia.process.Launcher` 协议提供了从一个可执行文件和一组内核对象句柄来在系统上创建新进程的低级接口。 +大多数软件使用组件框架,它简化了创建一个有一组标准的初始能力的新进程来执行一些代码的工作。 +您将在稍后更详细地探索组件。 - + +

一些给予进程的初始句柄是被进程挂载到**命名空间**(namespace)中的目录。

[glossary.handle]: /glossary/README.md#handle \ No newline at end of file From 03bee084b8250143ad547caae31db72fb0e37dd2 Mon Sep 17 00:00:00 2001 From: wy Date: Thu, 21 Jul 2022 22:34:28 +0800 Subject: [PATCH 016/154] translate build_fuchsia.md --- get-started/build_fuchsia.md | 197 ++++++++++++++++++++++++++--------- 1 file changed, 149 insertions(+), 48 deletions(-) diff --git a/get-started/build_fuchsia.md b/get-started/build_fuchsia.md index 7e66e119..4cc57f5c 100644 --- a/get-started/build_fuchsia.md +++ b/get-started/build_fuchsia.md @@ -1,167 +1,268 @@ -# Configure and build Fuchsia {#configure-and-build-fuchsia} + +# 配置和编译 Fuchsia {#configure-and-build-fuchsia} +这篇文档将引导你在主机上如何配置并编译 Fuchsia。 + +步骤如下: + +1. [准备](#prerequisites) +1. [配置设置项](#set-your-build-configuration) +1. [编译调优(可选)](#speed-up-the-build) +1. [编译](#build-fuchsia) + +## 1. 准备 {#prerequisites} + +在开始之前,先检查是否满足如下要求: + +* [准备源码](#source-code-setup) +* [硬件要求](#hardware-requirements) + +### 准备源码 {#source-code-setup} + +根据文档 [下载 Fuchsia 源码](/get-started/get_fuchsia_source.md) 指示下载 Fuchsia 的源码,然后在你的机器上设置开发环境。 + +### 硬件要求 {#hardware-requirements} + +Fuchsia 的编译支持如下架构的机器: + +- x86-64 Linux (只支持 Debian 系列的) +- x86-64 macOS + +注意:Windows 和 ARM64 是不支持的。 + +## 2. 配置设置项 {#set-your-build-configuration} + +Fuchsia 的编译设置项告诉编译系统如何编译,以及编译什么架构的文件。 + +设置你的 Fuchsia 编译选项,可以运行 [`fx set`][fx-set-reference] 命令: ```posix-terminal fx set {{ '' }}PRODUCT{{ '' }}.{{ '' }}BOARD{{ '' }} ``` - + +替换以下选项: + +* `PRODUCT`: 编译的目标文件类型, 比如可以设置为: `core` 和 `workstation_eng`. +* `BOARD`: 编译的可执行文件架构,比如:`x64` 和 `qemu-x64` + +下面的示例设置了编译选项为 `core.qemu-x64`: ```posix-terminal fx set core.qemu-x64 ``` - + +在这个示例中: + + * `core` 就是选择了特性最小化的 Fuchsia, 当然包括了常见的网络相关。 + * `qemu-x64` 这个选项设置了编译架构为在开源的虚拟机 (FEMU)中的 x64 架构 [QEMU][qemu]{:.external}. + +在看另一个编译选项示例,下面这个命令配置了 [在设备中安装 Fuchsia 工作站][build-workstation] 中常用的一个架构, `workstation_eng.x64`: ```posix-terminal fx set workstation_eng.x64 ``` - + +如果想查看更详细的编译选项介绍,参考 [配置编译选项](/development/build/fx.md#configure-a-build) + +## 3. 编译调优(可选) {#speed-up-the-build} + +注意:这一步不是必选项,但是建议您设置,因为设置了这一步能节省很多的编译时间。 + +编译调优的话,需要下面的服务: + +* [使用 Goma](#enable-goma) +* [安装 ccache](#install-ccache) + +### 使用 Goma {#enable-goma} + +[Goma](https://chromium.googlesource.com/infra/goma/server/){:.external} 是一个分布式编译服务,常用在一些开源项目中,如 Chrome,Android 以及 Fuchsia。 + +如果你能访问 Goma, 使用下面的命令来开启 Goma 客户端: ```posix-terminal fx goma ``` - + +### 安装 ccache {#install-ccache} + +如果不能访问 Goma,但是想加速本地编译时间,那就使用 [ccache](https://ccache.dev/){:.external} 来缓存来进行增量编译。 * {Linux} - + + 在 Linux 中使用 `ccache`,安装如下安装包: ```posix-terminal sudo apt install ccache ``` * {macOS} - + + 至于 macOS ,参考 [在 Mac 上使用 CCache](https://chromium.googlesource.com/chromium/src.git/+/HEAD/docs/ccache_mac.md){:.external} 中的安装步骤。 + +如果你的 `CCACHE_DIR` 环境变量指向一个存在的路径,`ccache` 就会自动开启。 + +如果想关闭这个特性,可以指定下面的标志为 `fx set`: + +* 强制使用 `ccache`,即使其他的加速项可以使用:
     fx set PRODUCT.BOARD --ccache
     
- + +* 关闭 `ccache`:
     fx set PRODUCT.BOARD --no-ccache
     
- + +## 4. 编译 {#build-fuchsia} + +[`fx build`][fx-build-reference] 命令可以把源代码编译打包,或者编译成其他的类型。 + +使用如下命令编译 Fuchsia: + +注意:编译时间一般为 90 分钟。 ```posix-terminal fx build ``` - + +当你修改源代码后,要运行命令 `fx build` 来增量编译,或则运行 `fx -i build` 命令来开启一个监视进程,这个监视进程一旦发现源码有更新就会自动编译。 + +想要更多编译 Fuchsia 的相信信息,参考 [开始编译](/development/build/fx.md#execute-a-build)。 + +## 下一步 + +关于如何在你的主机上打开 Fuchsia 模拟器 (FEMU),参考 [开启 Fuchsia 模拟器](/get-started/set_up_femu.md)。 + +如果你无论如何都想要在硬件平台上运行 Fuchsia, 可以参考 [在硬件设备中安装 Fuchsia](/development/hardware/README.md)。 + From 3ee5825602654e7884528278bb9bf35e64f84d65 Mon Sep 17 00:00:00 2001 From: Xyct <87l46110@gmail.com> Date: Thu, 21 Jul 2022 22:44:59 +0800 Subject: [PATCH 017/154] =?UTF-8?q?=E7=BF=BB=E8=AF=91=20=5Fcommon/intro/?= =?UTF-8?q?=5Fsandboxing=5Fnamespaces.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../_common/intro/_sandboxing_namespaces.md | 42 +++++++++++++++---- 1 file changed, 34 insertions(+), 8 deletions(-) diff --git a/get-started/_common/intro/_sandboxing_namespaces.md b/get-started/_common/intro/_sandboxing_namespaces.md index 7fd4a275..af30697b 100644 --- a/get-started/_common/intro/_sandboxing_namespaces.md +++ b/get-started/_common/intro/_sandboxing_namespaces.md @@ -1,11 +1,16 @@ -## Namespaces - + +## 命名空间 + +进程的命名空间包含了进程对外界的私有视图,并且控制了进程能够对 Fuchsia 系统造成多少影响。 +这有效地定义了进程所在的沙箱的规则。 -Namespaces are populated with various resource objects, including: - + +命名空间由各种资源对象填充,包括: + +* **文件**: 包含二进制数据的对象。 +* **目录**: 包含其他对象的对象。 +* **套接字**: 打开时建立连接的对象,如命名管道。 +* **协议和服务**: 打开时提供结构化服务的对象。 +* **设备**: 提供对硬件资源的访问的对象。 + +进程的创建者基于那些所请求的能力,来填充命名空间的内容。 +进程不能向自己的命名空间添加对象,因为这实际上相当于进程在授予自身访问那些对象的权限。 From ac8364b15645d19fb957675cd73963d0fa7f7226 Mon Sep 17 00:00:00 2001 From: cwolf9 <2717232422@qq.com> Date: Fri, 22 Jul 2022 01:47:16 +0800 Subject: [PATCH 018/154] =?UTF-8?q?=E7=BF=BB=E8=AF=91contribute/governance?= =?UTF-8?q?/rfcs/0007=5Fremove=5Fthread=5Fkilling.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rfcs/0007_remove_thread_killing.md | 194 ++++++++++-------- 1 file changed, 105 insertions(+), 89 deletions(-) diff --git a/contribute/governance/rfcs/0007_remove_thread_killing.md b/contribute/governance/rfcs/0007_remove_thread_killing.md index 35cd59ad..15b5a244 100644 --- a/contribute/governance/rfcs/0007_remove_thread_killing.md +++ b/contribute/governance/rfcs/0007_remove_thread_killing.md @@ -1,89 +1,105 @@ -{% set rfcid = "RFC-0007" %} -{% include "docs/contribute/governance/rfcs/_common/_rfc_header.md" %} -# {{ rfc.name }}: {{ rfc.title }} - - -## Summary - -In the past, `zx_task_kill` allowed usermode to kill individual threads. However, -killing individual threads encourages bad practices and has a high chance of leaving -the process in a bad state. For this reason, the ability to kill individual threads -should be removed. - -## Motivation and problem statement - -There is no reasonable use for usermode to kill individual threads. Exposing such facility -encourages bad practices. - -On Fuchsia, like other systems, killing a thread is done asynchronously; for running threads there -is no practical way to determine the exact place where it is safe to terminate a thread. For a -blocked (waiting) thread, the safer and often simple solution is to add logic so upon wakeup the -thread exits by itself. - -Dangers killing a thread - -* Locks can be left acquired, including global locks like ones controlling the heap. -* Memory can be leaked. At the very least the thread stack, but often many other pieces. -* Runtime left in an inconsistent state. This is at least true for the C and Go runtime. -* Killing a thread in its way to a syscall leaves the process in an unknown state. Kernel is - fine but the process does not have a way to know what happened and what did not happen. -* Defeats RAII wrappers and automatic cleanup. In fact, it defeats most guarantees from the high - level languages Fuchsia uses. - -## Design - -The following syscall will fail with `ZX_ERR_NOT_SUPPORTED` when passed a handle to a thread: - -``` -zx_status_t zx_task_kill(zx_handle_t handle); -``` - -Processes and jobs will still be killable as normal. - -## Implementation - -Luckily, thread killing is not used very much in Fuchsia. The only use cases are in test code -that checks that a thread hits a specific exception. This code is going to be updated so that -the excepting thread exits itself after the exception is handled. For code where the exception -is unrecoverable, the excepting thread's instruction pointer can be set directly to -zx_thread_exit or the runtime's thread exit function before the thread resumes. These tests -may still leak what the excepting thread had stored on the heap, but the runtime is in -a better state, and the leaks will be collected when the test's process exits. - -## Performance - -N/A - -## Security considerations - -N/A - -## Privacy considerations - -N/A - -## Testing - -The zircon core-tests will be updated to ensure that the zx_task_kill syscall behaves as intended. -Some amount of static analysis can be done to find call sites of zx_task_kill that are passed -threads. - -The full Fuchsia Large Scale Change (LSC) process will be followed to ensure this change is -properly tested. - -## Documentation - -The documentation for [zx_task_kill](/reference/syscalls/task_kill.md) will be updated to -reflect that threads are not killable. - -## Drawbacks, Alternatives, and Unknowns - -The alternative to this proposal is the current status quo, which is to allow threads to be -killed. Threads have been killable for the entire history of Fuchsia, but there has not been -any acceptable use cases where programs have relied on this behavior. For this reason, -we believe that thread killing can be safely removed. - -## Prior art and references - -* [Windows Vista tries to remove -TerminateThread](https://devblogs.microsoft.com/oldnewthing/20150814-00/?p=91811) +{% set rfcid = "RFC-0007" %} +{% include "docs/contribute/governance/rfcs/_common/_rfc_header.md" %} +# {{ rfc.name }}: {{ rfc.title }} + + +## Summary + + +过去,`zx_task_kill` 允许在用户态杀死单个线程。 但是,杀死单个线程会为不良做法提供支持,并且很有可能使进程处于不良状态。 出于这个原因,应该删除杀死单个线程的能力。 + +## Motivation and problem statement + + +用户态没有合理的用途来杀死单个线程。 暴露此类能力会为不良做法提供支持。 + + +在 Fuchsia 上,和其他系统一样,杀死一个线程是异步完成的; 对于正在运行的线程,没有实用的方法来确定可以安全终止线程的确切位置。 对于阻塞(等待)状态的线程,通常更安全且简单的解决方案是添加逻辑,以便在唤醒后线程自行退出。(todo) + + +杀死线程的危险 + + +* 锁可以被保持获取,包括像控制堆这样的全局锁。 +* 内存可能会泄漏。 至少线程堆栈可能泄露,但通常还有许多其他部分的内存会泄露。 +* 运行时处于不一致的状态。 至少对于 C 和 Go 运行时来说是这样。 +* 以系统调用的方式杀死一个线程会使进程处于未知状态。 内核没有影响,但该进程无法知道发生了什么以及没有发生什么。 +* 破坏 RAII 包装器和自动清理。 事实上,它破坏了 Fuchsia 使用的高级语言的大多数保证机制。 + +## Design + + +当将句柄被传递给线程时,以下系统调用将失败并返回`ZX_ERR_NOT_SUPPORTED`: + +``` +zx_status_t zx_task_kill(zx_handle_t handle); +``` + + +进程和作业仍然可以正常地被杀死。 + +## Implementation + + +幸运的是,Fuchsia 中并没有太多使用到杀死线程。 唯一的用例是在检查线程是否遇到特定异常的测试代码中。 此代码将被更新,以便异常线程在异常被处理后自行退出。 对于异常无法恢复的代码,可以在线程恢复前,将异常线程的指令指针直接设置为 zx_thread_exit 或运行时的线程退出函数。 这些测试可能仍然会泄漏异常线程存储在堆上的内容,但运行时会处于一个更好的状态,并且会在测试的进程退出时收集泄漏的内容。 + +## Performance + +N/A + +## Security considerations + +N/A + +## Privacy considerations + +N/A + +## Testing + + +Zircon 核心测试将被更新,以确保 zx_task_kill 系统调用按预期运行。可以进行一些静态分析来找到传递线程的 zx_task_kill 的调用点。 + + +将遵循完整的 Fuchsia Large Scale Change (LSC) 流程,以确保这一变化被正确测试。 + +## Documentation + + +[zx_task_kill](/reference/syscalls/task_kill.md) 的文档将被更新以反映线程不可杀死。 + +## Drawbacks, Alternatives, and Unknowns + + +该提议的替代方案是当前的现状,即允许线程被杀死。 在 Fuchsia 的整个历史中,线程都是可以被杀死的,但是没有任何可接受的用例表明程序依赖于这种行为。 出于这个原因,我们相信可以安全地删除线程杀死功能。 + +## Prior art and references + +* [Windows Vista tries to remove +TerminateThread](https://devblogs.microsoft.com/oldnewthing/20150814-00/?p=91811) From a82bfe5c2e74e29b3b1a6c544d36a0aac900c412 Mon Sep 17 00:00:00 2001 From: cwolf9 <2717232422@qq.com> Date: Fri, 22 Jul 2022 20:23:29 +0800 Subject: [PATCH 019/154] =?UTF-8?q?=E7=BF=BB=E8=AF=91=20get-started/=5Fcom?= =?UTF-8?q?mon/components/=5Fdeclaring=5Fintro.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- get-started/_common/components/_declaring_intro.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/get-started/_common/components/_declaring_intro.md b/get-started/_common/components/_declaring_intro.md index 395e91b2..8ee335b4 100644 --- a/get-started/_common/components/_declaring_intro.md +++ b/get-started/_common/components/_declaring_intro.md @@ -1,15 +1,24 @@ + +每个组件(component)都有一个声明,描述组件属性和功能。对于在软件包中分发的组件,其声明使用**组件清单(component manifest)文件**表示,并在**组件解析器**的帮助下加载。 + +![该图显示了如何使用“组件清单”来声明组件。该清单由开发者工具编译,并在运行时解析到设备上。](/get-started/images/components/component-manifest.png){: width="836"} + +请您使用组件清单语言(CML)文件声明组件。在构建时,组件清单编译器(`cmc`)工具会验证清单源并将其编译为二进制格式(`.cm`),并将其存储在组件的软件包中。在运行时,组件解析器将二进制清单文件加载到[组件管理器](/glossary/README.md#Component-Manager)的 [ComponentDecl](https://fuchsia.dev/reference/fidl/fuchsia.component.decl#Component) FIDL 结构中。 From a1f6b86a21d5859719dd1400c56eb1684c129c18 Mon Sep 17 00:00:00 2001 From: cwolf9 <2717232422@qq.com> Date: Fri, 22 Jul 2022 20:42:59 +0800 Subject: [PATCH 020/154] =?UTF-8?q?=E7=BF=BB=E8=AF=91=20get-started/=5Fcom?= =?UTF-8?q?mon/components/=5Fdeclaring=5Fmanifests.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/_declaring_manifests.md | 41 ++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/get-started/_common/components/_declaring_manifests.md b/get-started/_common/components/_declaring_manifests.md index dab204a6..6948a95d 100644 --- a/get-started/_common/components/_declaring_manifests.md +++ b/get-started/_common/components/_declaring_manifests.md @@ -1,9 +1,14 @@ -## Component manifests + +## 组件清单(component manifest)文件 + +CML 文件是以 `.cml` 扩展名结尾的 [JSON5](https://json5.org/){: .external} 文件。如下 CML 清单文件示例,描述了一个运行 ELF 二进制文件的简单组件,该文件向系统日志打印一条“Hello, World”信息: + +```json5 +{ + // 有关要运行的程序的信息。 + program: { + // 使用内置的 ELF 运行器。 + runner: "elf", + // 为此组件运行的二进制文件。 + binary: "bin/hello", + // 程序参数 + args: [ + "Hello", + "World!", + ], + }, + + // 此组件使用的能力。 + use: [ + { protocol: "fuchsia.logger.LogSink" }, + ], +} ``` + +该文件声明了关于组件的两个主要部分的信息: + +注意:要获取组件清单的更多详细信息,请参阅[组件清单](/concepts/components/v2/component_manifests.md)。 + +* `program`:描述可执行信息,例如二进制文件、程序参数和相关联的运行时。在此示例中,二进制文件被编译为 ELF 可执行文件并使用内置的 [ELF 运行器](/concepts/components/v2/elf_runner.md)。 + +* `use`:声明此组件运行所需的能力。在此示例中,`fuchsia.logger.LogSink` 协议使该组件能够向系统日志(syslog)写入消息。 From b407d5e9e099ffa453f8aaed08c257ec2c8f09b5 Mon Sep 17 00:00:00 2001 From: cwolf9 <2717232422@qq.com> Date: Fri, 22 Jul 2022 20:45:15 +0800 Subject: [PATCH 021/154] =?UTF-8?q?=E7=BF=BB=E8=AF=91=20get-started/=5Fcom?= =?UTF-8?q?mon/components/=5Fdeclaring=5Fshards.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../_common/components/_declaring_shards.md | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/get-started/_common/components/_declaring_shards.md b/get-started/_common/components/_declaring_shards.md index f752add6..84ca7ab4 100644 --- a/get-started/_common/components/_declaring_shards.md +++ b/get-started/_common/components/_declaring_shards.md @@ -1,15 +1,23 @@ -## Manifest shards + +## 清单碎片 (Manifest shard) + +一些能力集合代表了系统中许多组件所共有的用例需求,例如日志记录。为了简化将这些能力纳入组件的过程,本框架将其抽象为**清单碎片**,可将其纳入 CML 源文件中。 + +下面是一个与前面的示例等效的 CML。在这种情况下,通过包含 `diagnostics/syslog/client.shard.cml` 文件,而不是显式地声明 `fuchsia.logger.LogSink` 来提供必要的日志记录功能: + +```json5 +{ + include: [ "syslog/client.shard.cml" ], + + // 有关要运行的程序的信息。 + program: { + // 使用内置的 ELF 运行器。 + runner: "elf", + // 为此组件运行的二进制文件。 + binary: "bin/hello-world", + // 程序参数 + args: [ + "Hello", + "World!", + ], + }, +} +``` From 7cd976794ba3f5d700d97cca6d1cbfda8b6a34d9 Mon Sep 17 00:00:00 2001 From: Xyct <87l46110@gmail.com> Date: Fri, 22 Jul 2022 21:37:04 +0800 Subject: [PATCH 022/154] =?UTF-8?q?=E7=BF=BB=E8=AF=91=20learn/intro/sandbo?= =?UTF-8?q?xing.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- get-started/learn/intro/sandboxing.md | 70 ++++++++++++++++++++++++--- 1 file changed, 63 insertions(+), 7 deletions(-) diff --git a/get-started/learn/intro/sandboxing.md b/get-started/learn/intro/sandboxing.md index 426101cf..219ec044 100644 --- a/get-started/learn/intro/sandboxing.md +++ b/get-started/learn/intro/sandboxing.md @@ -1,5 +1,6 @@ {% import 'docs/_common/_doc_widgets.md' as widgets %} -# Software isolation model + +# 软件隔离模型 <<../../_common/intro/_sandboxing_intro.md>> @@ -7,30 +8,48 @@ <<../../_common/intro/_sandboxing_namespaces.md>> -## Exercise: Namespaces + +## 练习:命名空间(namespace) + +在本练习中,您将使用命令行来更详细地探索组件的命名空间的内容。 <<../_common/_start_femu.md>> -### Find a component in the hub + +### 在 hub 中找到一个组件 + +Fuchsia 提供了 [Hub](/concepts/components/v2/hub.md) 作为诊断接口, +用于获取系统中运行的组件实例的信息。 +您可以使用 hub 的目录结构来探索组件及其命名空间。 + +连接到设备命令行并输入以下 `ls` 命令 +来列出 `/hub-v2/children/core/children` 下的 `core` 领域(realm)的组件: ```posix-terminal fx shell ls /hub-v2/children/core/children @@ -45,10 +64,16 @@ build-info ... ``` + +这是许多核心 Fuchsia 系统组件的一个列表。要查看更多关于特定组件的详细信息,可以列出它的目录内容。 + +对 `http-client` 组件试试这个: ```posix-terminal fx shell ls /hub-v2/children/core/children/network/children/http-client @@ -65,10 +90,14 @@ resolved url ``` -### Explore the namespace and outgoing directory + +### 探索命名空间和出口目录 + +您将在 hub 内部的 `exec/in` 路径下找到运行中组件的**命名空间**。 ```posix-terminal fx shell ls /hub-v2/children/core/children/network/children/http-client/exec/in @@ -80,16 +109,27 @@ pkg svc ``` -Here are some quick highlights of each element: + +对每个元素简单说明如下: + +* `config/`: 组件的配置数据 +* `pkg/`: 组件的包的内容 +* `svc/`: 可供组件使用的系统服务 + +列出 `svc/` 目录的内容。这个目录包含 +[服务节点](https://fuchsia.dev/reference/fidl/fuchsia.io#NodeInfo), +表示提供给这个组件的系统服务。 ```posix-terminal fx shell ls /hub-v2/children/core/children/network/children/http-client/exec/in/svc @@ -101,13 +141,22 @@ fuchsia.net.name.Lookup fuchsia.posix.socket.Provider ``` + +每个服务都通过一个公有协议访问,其由一个 + [Fuchsia 接口定义语言(Fuchsia Interface Definition Language,FIDL)][glossary.FIDL]接口定义。 +组件通过其**出口目录**(outgoing directory)来提供系统服务, +这个目录被映射到 hub 内部的 `exec/out` 路径。 + +列出 `svc/` 出口目录来查看这个组件提供的系统服务。 ```posix-terminal fx shell ls /hub-v2/children/core/children/network/children/http-client/exec/out/svc @@ -117,11 +166,18 @@ fx shell ls /hub-v2/children/core/children/network/children/http-client/exec/out fuchsia.net.http.Loader ``` + +我们将在以后更详细地探索 FIDL 协议及如何访问各种服务。 From f7f9e74d31bb2c9532dbb189eb59322d0681f915 Mon Sep 17 00:00:00 2001 From: Xyct <87l46110@gmail.com> Date: Sat, 23 Jul 2022 13:14:20 +0800 Subject: [PATCH 023/154] =?UTF-8?q?=E7=BF=BB=E8=AF=91=5Fcommon/intro/=5Fsa?= =?UTF-8?q?ndboxing=5Fintro.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- get-started/_common/intro/_sandboxing_intro.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/get-started/_common/intro/_sandboxing_intro.md b/get-started/_common/intro/_sandboxing_intro.md index 2e22ab62..4978640a 100644 --- a/get-started/_common/intro/_sandboxing_intro.md +++ b/get-started/_common/intro/_sandboxing_intro.md @@ -1,3 +1,7 @@ + +在这一章中,您将学习 Zircon 内核对象如何使 Fuchsia 能够遵循 +**最少特权原则**,隔离进程并只授予他们需要的权限。 \ No newline at end of file From 82ab11d74f569a74e886c77a7be7bea49813ee05 Mon Sep 17 00:00:00 2001 From: cwolf9 <2717232422@qq.com> Date: Sat, 23 Jul 2022 15:03:47 +0800 Subject: [PATCH 024/154] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=A0=87=E9=A2=98?= =?UTF-8?q?=E7=AD=89=E6=A0=BC=E5=BC=8F=E9=97=AE=E9=A2=98=200007=5Fremove?= =?UTF-8?q?=5Fthread=5Fkilling.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rfcs/0007_remove_thread_killing.md | 53 +++++++++++-------- 1 file changed, 32 insertions(+), 21 deletions(-) diff --git a/contribute/governance/rfcs/0007_remove_thread_killing.md b/contribute/governance/rfcs/0007_remove_thread_killing.md index 15b5a244..e038bb49 100644 --- a/contribute/governance/rfcs/0007_remove_thread_killing.md +++ b/contribute/governance/rfcs/0007_remove_thread_killing.md @@ -3,25 +3,27 @@ # {{ rfc.name }}: {{ rfc.title }} -## Summary - + +## 概述 + -过去,`zx_task_kill` 允许在用户态杀死单个线程。 但是,杀死单个线程会为不良做法提供支持,并且很有可能使进程处于不良状态。 出于这个原因,应该删除杀死单个线程的能力。 +过去,`zx_task_kill` 允许在用户态杀死单个线程。但是,杀死单个线程会为不良做法提供支持,并且很有可能使进程处于不良状态。出于这个原因,应该删除杀死单个线程的能力。 -## Motivation and problem statement + +## 动机与问题陈述 -用户态没有合理的用途来杀死单个线程。 暴露此类能力会为不良做法提供支持。 +用户态没有合理的用途来杀死单个线程。暴露此类能力会为不良做法提供支持。 -在 Fuchsia 上,和其他系统一样,杀死一个线程是异步完成的; 对于正在运行的线程,没有实用的方法来确定可以安全终止线程的确切位置。 对于阻塞(等待)状态的线程,通常更安全且简单的解决方案是添加逻辑,以便在唤醒后线程自行退出。(todo) +在 Fuchsia 上,和其他系统一样,杀死一个线程是异步完成的;对于正在运行的线程,没有实用的方法来确定可以安全终止线程的确切位置。对于阻塞(等待)状态的线程,通常更安全且简单的解决方案是添加逻辑,以便在唤醒后线程自行退出。 杀死线程的危险 @@ -34,12 +36,13 @@ thread exits by itself. --> * Defeats RAII wrappers and automatic cleanup. In fact, it defeats most guarantees from the high level languages Fuchsia uses. --> * 锁可以被保持获取,包括像控制堆这样的全局锁。 -* 内存可能会泄漏。 至少线程堆栈可能泄露,但通常还有许多其他部分的内存会泄露。 -* 运行时处于不一致的状态。 至少对于 C 和 Go 运行时来说是这样。 -* 以系统调用的方式杀死一个线程会使进程处于未知状态。 内核没有影响,但该进程无法知道发生了什么以及没有发生什么。 -* 破坏 RAII 包装器和自动清理。 事实上,它破坏了 Fuchsia 使用的高级语言的大多数保证机制。 +* 内存可能会泄漏。至少线程堆栈可能泄露,但通常还有许多其他部分的内存会泄露。 +* 运行时处于不一致的状态。至少对于 C 和 Go 运行时来说是这样。 +* 以系统调用的方式杀死一个线程会使进程处于未知状态。内核没有影响,但该进程无法知道发生了什么以及没有发生什么。 +* 破坏 RAII 包装器和自动清理。事实上,它破坏了 Fuchsia 使用的高级语言的大多数保证机制。 -## Design + +## 设计 当将句柄被传递给线程时,以下系统调用将失败并返回`ZX_ERR_NOT_SUPPORTED`: @@ -51,7 +54,8 @@ zx_status_t zx_task_kill(zx_handle_t handle); 进程和作业仍然可以正常地被杀死。 -## Implementation + +## 实现 -幸运的是,Fuchsia 中并没有太多使用到杀死线程。 唯一的用例是在检查线程是否遇到特定异常的测试代码中。 此代码将被更新,以便异常线程在异常被处理后自行退出。 对于异常无法恢复的代码,可以在线程恢复前,将异常线程的指令指针直接设置为 zx_thread_exit 或运行时的线程退出函数。 这些测试可能仍然会泄漏异常线程存储在堆上的内容,但运行时会处于一个更好的状态,并且会在测试的进程退出时收集泄漏的内容。 +幸运的是,Fuchsia 中并没有太多使用到杀死线程。唯一的用例是在检查线程是否遇到特定异常的测试代码中。此代码将被更新,以便异常线程在异常被处理后自行退出。对于异常无法恢复的代码,可以在线程恢复前,将异常线程的指令指针直接设置为 zx_thread_exit 或运行时的线程退出函数。这些测试可能仍然会泄漏异常线程存储在堆上的内容,但运行时会处于一个更好的状态,并且会在测试的进程退出时收集泄漏的内容。 -## Performance + +## 性能 N/A -## Security considerations + +## 安全性考虑 N/A -## Privacy considerations + +## 隐私问题 N/A -## Testing + +## 测试 将遵循完整的 Fuchsia Large Scale Change (LSC) 流程,以确保这一变化被正确测试。 -## Documentation + +## 文档 [zx_task_kill](/reference/syscalls/task_kill.md) 的文档将被更新以反映线程不可杀死。 -## Drawbacks, Alternatives, and Unknowns + +## 缺点、替代方案和未知因素 -该提议的替代方案是当前的现状,即允许线程被杀死。 在 Fuchsia 的整个历史中,线程都是可以被杀死的,但是没有任何可接受的用例表明程序依赖于这种行为。 出于这个原因,我们相信可以安全地删除线程杀死功能。 +该提议的替代方案是当前的现状,即允许线程被杀死。在 Fuchsia 的整个历史中,线程都是可以被杀死的,但是没有任何可接受的用例表明程序依赖于这种行为。出于这个原因,我们相信可以安全地删除线程杀死功能。 -## Prior art and references + +## 现有技术和参考文献 * [Windows Vista tries to remove TerminateThread](https://devblogs.microsoft.com/oldnewthing/20150814-00/?p=91811) From 3f456b401ad98aa2bdc3f6653c0aadb625ee39f3 Mon Sep 17 00:00:00 2001 From: Xyct <87l46110@gmail.com> Date: Sat, 23 Jul 2022 15:55:35 +0800 Subject: [PATCH 025/154] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=8E=9F=E6=96=87?= =?UTF-8?q?=E9=99=84=E6=B3=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- get-started/_common/intro/_sandboxing_namespaces.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/get-started/_common/intro/_sandboxing_namespaces.md b/get-started/_common/intro/_sandboxing_namespaces.md index af30697b..b87d5551 100644 --- a/get-started/_common/intro/_sandboxing_namespaces.md +++ b/get-started/_common/intro/_sandboxing_namespaces.md @@ -50,7 +50,7 @@ capabilities to access those objects. means Fuchsia does not have a concept of chroot environments, since every process effectively has its own private "root". --> -

命名空间是为每个进程定义的。不像其他操作系统,Fuchsia 不存在“全局文件系统”。 +

命名空间是为每个进程定义的。不像其他操作系统,Fuchsia 不存在“全局文件系统(root filesystem)”。 而路径地址“/”则指代进程私有命名空间的根。 这也意味着 Fuchsia 不存在 chroot 环境的概念,因为每个进程都有自己的私有“root”。

这也影响到目录遍历,以及文件系统服务器如何解析包含 ../. 的路径。 - 要获取更多详情,请参阅我们认为双点有害

+ 要获取更多详情,请参阅我们认为双点(dot-dot)有害

From 1a3059756bafe26b39fb7b22386630c2a5d23916 Mon Sep 17 00:00:00 2001 From: Xyct <87l46110@gmail.com> Date: Sat, 23 Jul 2022 15:56:39 +0800 Subject: [PATCH 026/154] Update get-started/_common/intro/_sandboxing_sandboxing.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 具有权利 --> 具有的权利 --- get-started/_common/intro/_sandboxing_sandboxing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/get-started/_common/intro/_sandboxing_sandboxing.md b/get-started/_common/intro/_sandboxing_sandboxing.md index 88107709..25f4d7ab 100644 --- a/get-started/_common/intro/_sandboxing_sandboxing.md +++ b/get-started/_common/intro/_sandboxing_sandboxing.md @@ -27,7 +27,7 @@ detail later on. From 2257798a93bd35a53f2cae11772eb464aee5124e Mon Sep 17 00:00:00 2001 From: y2-Whyto Date: Tue, 26 Jul 2022 11:29:09 +0800 Subject: [PATCH 047/154] Update contribute/docs/documentation-style-guide.md Co-authored-by: Xyct <87l46110@gmail.com> --- contribute/docs/documentation-style-guide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contribute/docs/documentation-style-guide.md b/contribute/docs/documentation-style-guide.md index 9f4f846a..40026aa0 100644 --- a/contribute/docs/documentation-style-guide.md +++ b/contribute/docs/documentation-style-guide.md @@ -242,7 +242,7 @@ By default, `fuchsia.dev` creates anchors using underscores (`_`) in place of spaces. When referencing a section in a page, create a custom anchor using dashes (`-`) instead, using `{#section-title}`. Also, use dashes for file names. --> -默认情况下,`fuchsia.dev` 创建锚点时会在在空格处使用下划线(`_`)。不过,当引用一个页面中的章节时,请使用连接号(`-`,dash),使用 `{#section-title}`。同样地,请在文件名中使用连接号。 +默认情况下,`fuchsia.dev` 创建锚点时会在在空格处使用下划线(`_`)。不过,当引用一个页面中的章节时,请使用连接号(`-`,dash),使用 `{#section-title}` 创建自定义锚点。同样地,请在文件名中使用连接号。 -## 标头(header) +## 标题 -### 为页面和章节标题使用句首字母大写格式(sentence case) +### 为页面和章节标题使用句首字母大写格式 -### 为锚点使用连接号(dash),不要使用下划线 +### 为锚点使用连接号,不要使用下划线 * 要获取关于通用文档标准的信息,包括文件类型、位置和整体语言风格,请参阅 [Fuchsia 文档标准][doc-standard]。 * 要获取关于措辞、风格和结构的具体指导,请参阅 [Fuchsia 文档风格指南][style-guide]。 +* 要获取完整的 Markdown 参考指南,请参阅 [Markdown 参考指南][markdown-guide]。 -在 Fuchsia 项目中,代码的行最大长度为 100 字符,而文档的行最大长度为 80 字符。该规则一个值得注意的例外情况是 URL(即链接),写在一行中,不换行。 +在 Fuchsia 项目中,代码的行最大长度为 100 字符,而文档的行最大长度为 80 字符。该规则一个值得注意的例外情况是网址(即链接),写在一行中,不换行。 -不推荐:请勿在命令前硬编码一个 `$` 符号。 +不推荐:请勿在命令里硬编码 `$` 字符。 ```sh $ fx ota From a41e77359c8e822452db7022e926b627199daae0 Mon Sep 17 00:00:00 2001 From: y2-Whyto Date: Tue, 26 Jul 2022 11:42:15 +0800 Subject: [PATCH 052/154] Update contribute/docs/documentation-style-guide.md Co-authored-by: Xyct <87l46110@gmail.com> --- contribute/docs/documentation-style-guide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contribute/docs/documentation-style-guide.md b/contribute/docs/documentation-style-guide.md index dd9bc3ae..a562f78f 100644 --- a/contribute/docs/documentation-style-guide.md +++ b/contribute/docs/documentation-style-guide.md @@ -180,7 +180,7 @@ In the Fuchsia documentation you can link to three types of contents: * `/docs/` - 链接至位于 Fuchsia 源树中 `/docs/` 目录内的文档。这些链接必须关联到具有 `.md` 扩展名的文件。例如,`/concepts/README.md`。 * 源代码 - 链接至位于 Fuchsia 源树中的源代码文件。这些链接可以关联到任何文件扩展名,但这些文件必须存在于源树中。例如,`/src/sys/sysmgr/main.cc`。 * 参考文档 - 链接至自动生成的 Fuchsia 参考文档。 - * 大多数 Fuchsia 参考文档不存在于源树内,但在 [fuchsia.dev][fuchsia-dev] 上发布了。这些链接必须使用完整形式的 URL。例如,`https://fuchsia.dev/reference/fidl/fuchsia.io`。 + * 大多数 Fuchsia 参考文档不存在于源树内,但在 [fuchsia.dev][fuchsia-dev] 上发布了。这些链接必须使用完全限定的网址。例如,`https://fuchsia.dev/reference/fidl/fuchsia.io`。 * 不过,一些 Fuchsia 参考文档存在于源树内。这些文档位于 `/reference/`,并在 `https://fuchsia.dev/fuchsia-src/reference/` 中发布。这些链接必须关联到具有 `.md` 扩展名的文件。例如,`/reference/syscalls/bti_create.md`。 From ccb5f050f71ac7b11721c4bc19418e8033d30981 Mon Sep 17 00:00:00 2001 From: y2-Whyto Date: Tue, 26 Jul 2022 11:44:33 +0800 Subject: [PATCH 053/154] Update contribute/docs/documentation-style-guide.md Co-authored-by: Xyct <87l46110@gmail.com> --- contribute/docs/documentation-style-guide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contribute/docs/documentation-style-guide.md b/contribute/docs/documentation-style-guide.md index a562f78f..95430f84 100644 --- a/contribute/docs/documentation-style-guide.md +++ b/contribute/docs/documentation-style-guide.md @@ -386,7 +386,7 @@ $ my_command -### 引用源代码时使用路径,不要使用 URL +### 引用源代码时使用路径,不要使用网址 -该代码块在渲染时,命令前会添加 `$`: +该代码块在渲染时,命令前会出现 `$`: ```posix-terminal fx ota From 27714f20535f80e8a78fd171b3258e628a0bcc92 Mon Sep 17 00:00:00 2001 From: y2-Whyto Date: Tue, 26 Jul 2022 11:45:28 +0800 Subject: [PATCH 055/154] Update contribute/docs/documentation-style-guide.md Co-authored-by: Xyct <87l46110@gmail.com> --- contribute/docs/documentation-style-guide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contribute/docs/documentation-style-guide.md b/contribute/docs/documentation-style-guide.md index d302c3b2..5b750e55 100644 --- a/contribute/docs/documentation-style-guide.md +++ b/contribute/docs/documentation-style-guide.md @@ -393,7 +393,7 @@ $ my_command code should be referred to by path only. You will get a static error check otherwise. --> -推荐:任何引用源代码的链接应当仅使用路径指代。否则您将收到静态错误检查(static error check)。 +推荐:任何引用源代码的链接应当仅使用路径引用。否则您将收到静态错误检查(static error check)。 -### 对不同的 Fuchsia 内容使用正确链接 +### 为不同的 Fuchsia 内容使用正确链接 -在这一章中,您将学习 Zircon 内核对象如何使 Fuchsia 能够遵循 -**最少特权原则**,隔离进程并只授予他们需要的权限。 \ No newline at end of file +在这一章中,您将学习 Zircon 内核对象如何使 Fuchsia 能够遵循**最少特权原则**,隔离进程并只授予他们需要的权限。 From 7ae974ba5e1fb1ebae8572dc89fafc05bf6ec65d Mon Sep 17 00:00:00 2001 From: y2-Whyto Date: Tue, 26 Jul 2022 12:28:30 +0800 Subject: [PATCH 058/154] build, compile, prerequisites --- glossary-translation.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/glossary-translation.md b/glossary-translation.md index 90251919..1d0893b7 100644 --- a/glossary-translation.md +++ b/glossary-translation.md @@ -22,9 +22,11 @@ | automatic retry | 自动重试 | G | | backoff | 退避 | G | | best practice | 最佳做法 | G & i | +| build | 构建 | G | | caveats | 注意事项 | G | | cleanup | 清理 | G | -| consume | 使用
消耗 | G
后者在结算系统中使用 | +| compile | 编译 | G | +| consume | 使用
消耗 | G
后者在结算系统中使用 | | control plane | 控制层面
控制平面 | G | | data plane | 数据平面
数据层面 | G | | deprecated | 已弃用(的) | G | @@ -53,6 +55,7 @@ | path | 路径 | G | | pave | 铺设 | i | | policy | 政策 | G | +| prerequisites | 前提条件 | G | | proxy | 代理 | | | remote | 远程 | | | robust | 可靠的 | G | From 141b98181f4a1258aa8c1ed6cb9cf8e3eb01fa93 Mon Sep 17 00:00:00 2001 From: y2-Whyto Date: Tue, 26 Jul 2022 12:31:05 +0800 Subject: [PATCH 059/154] source code --- glossary-translation.md | 1 + 1 file changed, 1 insertion(+) diff --git a/glossary-translation.md b/glossary-translation.md index 1d0893b7..94544c98 100644 --- a/glossary-translation.md +++ b/glossary-translation.md @@ -68,6 +68,7 @@ | set up / setup | 设置 | | | settings | 设置 | | | sidecar | Sidecar | 首字母大写,不译
G | +| source code | 源代码 | G | | span | Span
跨 | 作名词时首字母大写,不译
作动词时译为“跨”
G | | strategy | 策略 | G | | suite | 套件 | G | From 44cef1feadd30488a73a2b9767c8469e5507ea19 Mon Sep 17 00:00:00 2001 From: y2-Whyto Date: Tue, 26 Jul 2022 16:28:31 +0800 Subject: [PATCH 060/154] Update documentation-style-guide.md --- contribute/docs/documentation-style-guide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contribute/docs/documentation-style-guide.md b/contribute/docs/documentation-style-guide.md index 07d2fa62..5b750e55 100644 --- a/contribute/docs/documentation-style-guide.md +++ b/contribute/docs/documentation-style-guide.md @@ -151,7 +151,7 @@ You can read more about reference style links in the external -### 为不同的 Fuchsia 内容使用正确链接 +### 对不同的 Fuchsia 内容使用正确链接 -## 标识组件 +## 组件的标记 -组件由 URL 标识。框架借助**组件解析器**将组件 URL 解析为组件声明。解析器本身就是能够处理特定 URL scheme 并获取组件清单、程序和资源的组件。 +组件由 URL 标识。框架借助**组件解析器**将组件 URL 解析为组件声明。解析器本身就是能够处理特定 URL 格式并获取组件清单、程序和资源的组件。 -组件实例由称为 **moniker** 的拓扑路径引用来标识。组件的 moniker 将其在组件实例树中的位置指示为绝对或相对路径。例如,moniker 路径 `/core/system-updater` 指的是存在于 `core` 领域中的 `system-updater` 的实例。 +组件实例由称为 **绰号(moniker)** 的拓扑路径引用来标识。组件的绰号将其在组件实例树中的位置指示为绝对或相对路径。例如,绰号路径 `/core/system-updater` 指的是存在于 `core` 领域中的 `system-updater` 的实例。 From aa3119054f19a36794433fae73c3b0fe34d82d9e Mon Sep 17 00:00:00 2001 From: wy Date: Tue, 26 Jul 2022 20:22:57 +0800 Subject: [PATCH 063/154] get_fuchsia_source.md review --- get-started/get_fuchsia_source.md | 75 ++++++++++++++++--------------- 1 file changed, 38 insertions(+), 37 deletions(-) diff --git a/get-started/get_fuchsia_source.md b/get-started/get_fuchsia_source.md index b3a6e206..085aed85 100644 --- a/get-started/get_fuchsia_source.md +++ b/get-started/get_fuchsia_source.md @@ -7,7 +7,7 @@ This guide provides instructions on how to download the Fuchsia source code and set up the Fuchsia development environment on your machine. --> -这篇文章将指导您下载 Fuchsia 源码以及在您的机器上部署开发环境。 +本指南说明了如何下载 Fuchsia 源码以及在您的机器上部署开发环境。 @@ -19,33 +19,34 @@ The steps are: 4. [Set up environment variables](#set-up-environment-variables). 5. [Configure firewall rules (Optional)](#configure-firewall-rules). --> -1. [前期检查](#perform-a-preflight-check). -2. [安装用到的软件包](#install-prerequisite-packages). +1. [执行预检查](#perform-a-preflight-check). +2. [安装必备软件包](#install-prerequisite-packages). 3. [下载 Fuchsia 源码](#download-the-fuchsia-source-code). 4. [设置环境变量](#set-up-environment-variables). -5. [配置防火墙(可选项)](#configure-firewall-rules). +5. [配置防火墙规则(可选)](#configure-firewall-rules). -## 1. 前期检查 {#perform-a-preflight-check} +## 1. 执行预检查 {#perform-a-preflight-check} -Fuchsia 提供了一个自动检测工具([`ffx platform preflight`][ffx-platform-preflight]),这个工具可以测试您的机器,并会在发现任何影响您编译 Fuchsia 源码的问题时通知您。 +Fuchsia 提供了一个预检工具([`ffx platform preflight`][ffx-platform-preflight]),这个工具可以测试您的机器,并会通知您任何在该机器上构建 Fuchsia 源码时会受影响的问题。 -注意:这个检测工具只支持 x64 架构。Fuchsia 目前对其他架构的机器上的编译不做成功担保,比如 Windows 和 ARM64。 +注意:这个预检测工具只支持 x64 架构。目前 Fuchsia 不保证在其他宿主架构上能构建成功,比如 Windows 和 ARM64。 + -运行下面的命令: +运行如下命令: * {Linux} @@ -61,7 +62,7 @@ Run the following command: -## 2. 安装用到的软件包 {#install-prerequisite-packages} +## 2. 安装必备软件包 {#install-prerequisite-packages} - 安装(或更新)下面的软件: + 安装(或更新)下面的软件包: ```posix-terminal sudo apt install curl file git unzip @@ -87,7 +88,7 @@ Fuchsia 要求 `curl`、 `file`、 `unzip` 以及 `git` 等工具是最新版。 --> 安装 Xcode 命令行工具: - 注意:如果 `ffx platform preflight` 工具检测到 Xcode 已经安装,就省去这一步操作。 + 注意:如果 `ffx platform preflight` 检测到 Xcode 工具已经安装,就可以跳过这一步。 ```posix-terminal xcode-select --install @@ -109,7 +110,7 @@ another 80 to 90 GB of space later when you build Fuchsia. Additionally, the download process uses a substantial amount of memory. It is advisible to close non-crucial processes during this time. --> -下载 Fuchsia 源码要求您机器上有 2 GB 的存储空间。之后在编译 Fuchsia 过程中需要另外 80 到 90 GB 的存储空间,这取决于您的编译选项配置。另外,下载过程中也会使用一部分的内存空间。建议您在此过程中关闭其他非必要的程序进程。 +下载 Fuchsia 源码要求您机器上有 2 GB 的存储空间。取决于您的构建配置,之后的构建 Fuchsia 过程则需要额外 80 到 90 GB 的存储空间。另外,下载过程中也会使用大量的内存。建议您在此过程中关闭其他非必要的程序进程。 @@ -120,7 +121,7 @@ To download the Fuchsia source, do the following: Note: You can set up Fuchsia in any directory. This guide selects the `$HOME` directory as an example. --> -1. 选择一个 Fuchsia 源码存储目录,例如: +1. 选择一个 Fuchsia 源码下载目录,例如: 注意:您可以把 Fuchsia 下载到任何路径。本篇教程选择 `$HOME` 作为示例。 @@ -146,10 +147,9 @@ To download the Fuchsia source, do the following: bootstrapping process, see [Authentication error](#authentication-error) for help. --> - 这个脚本会先创建 `fuchsia` 路径,然后下载源码到该路径下。 - - 如果您在脚本运行期间看到了 `Invalid authentication credentials` 错误信息,参考[认证失败](#authentication-error)章节寻求帮助。 + 这个脚本会创建 `fuchsia` 目录,并且下载源码。 + 如果您在脚本运行期间看到了 `Invalid authentication credentials` 错误信息,参考[认证错误](#authentication-error)章节寻求帮助。 -* 添加 `.jiri_root/bin` 路径到您的 `PATH` 环境变量 +* 添加 `.jiri_root/bin` 目录到您的 `PATH` 环境变量 - `.jiri_root/bin` 路径在 Fuchsia 源码中包含了 [`jiri`](https://fuchsia.googlesource.com/jiri) 和 [`fx`](/development/build/fx.md) 工具,这些工具对 Fuchsia 的后续操作起着至关重要的作用。Fuchsia 使用 `jiri` 工具在 Fuchsia 的项目中管理仓库,使用 `fx` 工具帮助配置、编译、运行以及调试 Fuchsia。Fuchsia 的工具链需要可以在您 `PATH` 环境变量中找得到 `jiri` 工具。 + Fuchsia 源码中的 `.jiri_root/bin` 目录包含了 [`jiri`](https://fuchsia.googlesource.com/jiri) 和 [`fx`](/development/build/fx.md) 工具,这些是 Fuchsia 工作流中的必备工具。Fuchsia 使用 `jiri` 工具在 Fuchsia 的项目中管理仓库,使用 `fx` 工具帮助配置、构建、运行以及调试 Fuchsia。Fuchsia 的工具链需要可以在您的 `PATH` 环境变量中找到 `jiri` 工具。 * 导入 `scripts/fx-env.sh` 文件 - 虽然这并不是必须的,导入 [`fx-env.sh`](/scripts/fx-env.sh) 文件可以在您的终端中建立一系列的非常有用的 shell 函数。比如,它会创建给 `fd` 工具用来切换路径时提供自动补全的 `FUCHSIA_DIR` 环境变量(如果想获取更多信息,请参考 `fx-env.sh` 文件)。 + 虽然这并不是必须的,导入 [`fx-env.sh`](/scripts/fx-env.sh) 文件可以在您的终端中启用一系列有用的 shell 函数。比如,它会创建 `FUCHSIA_DIR` 环境变量,以及提供 `fd` 命令用来在目录中导航时提供自动补全 (如果想获取更多信息,请参考 `fx-env.sh` 文件)。 -注意:如果您不想更新您的 shell 配置,在附录中参考[不更新 PATH 变量编译 Fuchsia](#work-on-fuchsia-without-updating-your-path)。 +注意:如果您不想更新您的 shell 配置,参考附录[不更新 PATH 变量的情况下在 Fuchsia 上工作](#work-on-fuchsia-without-updating-your-path)。 -1. 请用文本编辑器打开您的 `~/.bash_profile` 文件(参考如下示例,我们使用 [Nano][nano]{:.external} ) +1. 请用文本编辑器打开您的 `~/.bash_profile` 文件(参考如下示例,我们使用 [Nano][nano]{:.external} 文本编辑器) - 注意:这篇文章使用 `bash` 终端作为示例,如果您使用 `zsh` 的话,在如下步骤中请替换文件 `~/.bash_profile` 为 `~/.zprofile`: + 注意:本指南使用 `bash` 终端作为示例,如果您使用 `zsh` 的话,在如下步骤中请替换 `~/.bash_profile` 为 `~/.zprofile`: ```posix-terminal nano ~/.bash_profile @@ -222,7 +222,7 @@ do the following: --> 1. 在您的 `~/.bash_profile` 文件中添加如下配置: - 注意:如果您的 Fuchsia 源码不在 `~/fuchsia` 路径下,替换 `~/fuchsia` 路径为您的 Fuchsia 路径。 + 注意:如果您的 Fuchsia 源码不在 `~/fuchsia` 目录下,替换 `~/fuchsia` 为您的 Fuchsia 目录。 ```sh export PATH=~/fuchsia/.jiri_root/bin:$PATH @@ -256,7 +256,7 @@ do the following: -## 5. 配置防火墙(可选项) {#configure-firewall-rules} +## 5. 配置防火墙规则(可选) {#configure-firewall-rules} -注意:这一步在您的编译或者运行 Fuchsia 步骤中并不是必须的。但是是被建议的,因为可以用来确保您能在 Linux 中流畅的运行 Fuchsia 虚拟机。 +注意:这一步对构建或者运行 Fuchsia 并不是必须的。但是为了确保 Fuchsia 模拟器实例能在 Linux 上顺利运行是推荐的。 -(**Linux**) 如果您计划在 Linux 中运行 Fuchsia,建议您运行如下命令来允许 Fuchsia 使用一些特殊的特性: +(**仅Linux**) 如果您计划在 Linux 中运行 Fuchsia,建议您运行如下命令在宿主机上允许 Fuchsia 相关的流量: ```posix-terminal fx setup-ufw @@ -285,7 +285,7 @@ firewall rules. (For more information on this script, see [`setup-ufw`][setup-uf To build your first Fuchsia system image, see [Configure and build Fuchsia](/get-started/build_fuchsia.md). --> -编译您第一个 Fuchsia 系统镜像,参考[配置和编译 Fuchsia](/get-started/build_fuchsia.md) 文件。 +构建您第一个 Fuchsia 系统镜像,参考[配置和构建 Fuchsia](/get-started/build_fuchsia.md)。 @@ -293,7 +293,7 @@ To build your first Fuchsia system image, see -### 验证失败 {#authentication-error} +### 认证错误 {#authentication-error} -* 按照屏幕路径的提示为仓库输入密码 -* 删除 `.gitcookies` 文件中不需要的 cookie。 +* 按照屏幕上的指示为特定的仓库获取密码 +* 删除 `.gitcookies` 文件中有问题的 cookie。 -* [把工具复制到可执行文件目录](#copy-the-tool-to-your-binary-directory) -* [为工具添加链接文件到可执行文件目录](#add-a-symlink-to-your-binary-directory) +* [把工具复制到二进制目录](#copy-the-tool-to-your-binary-directory) +* [添加符号链接到二进制目录](#add-a-symlink-to-your-binary-directory) -#### 把工具复制到可执行文件目录 {#copy-the-tool-to-your-binary-directory} +#### 把工具复制到二进制目录 {#copy-the-tool-to-your-binary-directory} -无论如何,您首先需要有不用 `sudo` 命令就可以访问 `~/bin` 路径的权限。如果没有,`jiri` 就不能使它自己保持在最新版本。 +但是,您需要在没有 `sudo` 的情况下对 `~/bin` 有写访问权限。如果没有,`jiri` 就不能保持在最新版本。 -#### 为工具添加链接文件到可执行文件目录 {#add-a-symlink-to-your-binary-directory} +#### 添加符号链接到二进制目录 {#add-a-symlink-to-your-binary-directory} 同样的,如果您想不更新环境变量使用 `fx` 工具,在 `~/bin` 路径中提供您的 `fx` 工具的链接文件,比如: +同样的,如果您想不更新环境变量而使用 `fx` 工具,在 `~/bin` 目录中提供 `fx` 工具的符号链接,比如: 注意:如果您的 Fuchsia 源码不在 `~/fuchsia` 目录中,把 `~/fuchsia` 替换为您的 Fuchsia 目录。 @@ -377,7 +378,7 @@ ln -s ~/fuchsia/scripts/fx ~/bin -相应地,您也可以使用 `fx` 工具的完整路径,比如: +或者,直接用其路径运行 `fx` 工具,比如: ```posix-terminal ./scripts/fx help @@ -385,7 +386,7 @@ Alternatively, run the `fx` tool directly using its path, for example: -另一方面,您需要在 `PATH` 环境变零中设置您的 `jiri` 工具。 +无论哪种情况,您都需要`jiri` 工具在您的 `PATH` 环境变量中。 [ffx-platform-preflight]: https://fuchsia.dev/reference/tools/sdk/ffx#preflight From 6875cc67646c494d3e2bfdf6d0050807341a6e38 Mon Sep 17 00:00:00 2001 From: wy Date: Tue, 26 Jul 2022 20:24:53 +0800 Subject: [PATCH 064/154] =?UTF-8?q?substitute=20=E7=BC=96=E8=AF=91=20with?= =?UTF-8?q?=20=E6=9E=84=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- get-started/build_fuchsia.md | 49 ++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 25 deletions(-) diff --git a/get-started/build_fuchsia.md b/get-started/build_fuchsia.md index 33940dcf..6200e514 100644 --- a/get-started/build_fuchsia.md +++ b/get-started/build_fuchsia.md @@ -1,12 +1,11 @@ - -# 配置和编译 Fuchsia {#configure-and-build-fuchsia} +# 配置和构建 Fuchsia {#configure-and-build-fuchsia} -这篇文档将引导您在主机上如何配置并编译 Fuchsia。 +这篇文档将引导您在主机上如何配置并构建 Fuchsia。 @@ -19,8 +18,8 @@ The steps are: --> 1. [准备](#prerequisites) 1. [配置设置项](#set-your-build-configuration) -1. [编译调优(可选)](#speed-up-the-build) -1. [编译](#build-fuchsia) +1. [构建调优(可选)](#speed-up-the-build) +1. [构建](#build-fuchsia) @@ -54,7 +53,7 @@ environment on your machine. You can build Fuchsia only on a machine with one of the following host architectures: --> -Fuchsia 的编译支持如下架构的机器: +Fuchsia 的构建支持如下架构的机器: -Fuchsia 的编译设置项告诉编译系统如何编译,以及编译什么架构的文件。 +Fuchsia 的构建设置项告诉构建系统如何构建,以及构建什么架构的文件。 -设置您的 Fuchsia 编译选项,可以运行 [`fx set`][fx-set-reference] 命令: +设置您的 Fuchsia 构建选项,可以运行 [`fx set`][fx-set-reference] 命令: ```posix-terminal fx set {{ '' }}PRODUCT{{ '' }}.{{ '' }}BOARD{{ '' }} ``` @@ -91,12 +90,12 @@ Replace the following: `workstation_eng`. * `BOARD`: The architecture of the product; for example, `x64` and `qemu-x64` --> -* `PRODUCT`: 编译的目标文件类型, 比如可以设置为: `core` 和 `workstation_eng`. -* `BOARD`: 编译的可执行文件架构,比如:`x64` 和 `qemu-x64` +* `PRODUCT`: 构建的目标文件类型, 比如可以设置为: `core` 和 `workstation_eng`. +* `BOARD`: 构建的可执行文件架构,比如:`x64` 和 `qemu-x64` -下面的示例设置了编译选项为 `core.qemu-x64`: +下面的示例设置了构建选项为 `core.qemu-x64`: ```posix-terminal fx set core.qemu-x64 @@ -113,13 +112,13 @@ In this example: [QEMU][qemu]{:.external}. --> * `core` 就是选择了特性最小化的 Fuchsia, 当然包括了常见的网络相关。 - * `qemu-x64` 这个选项设置了编译架构为在开源的虚拟机 (FEMU)中的 x64 架构 [QEMU][qemu]{:.external}. + * `qemu-x64` 这个选项设置了构建架构为在开源的虚拟机 (FEMU)中的 x64 架构 [QEMU][qemu]{:.external}. -在看另一个编译选项示例,下面这个命令配置了 [在设备中安装 Fuchsia 工作站][build-workstation] 中常用的一个架构, `workstation_eng.x64`: +在看另一个构建选项示例,下面这个命令配置了 [在设备中安装 Fuchsia 工作站][build-workstation] 中常用的一个架构, `workstation_eng.x64`: ```posix-terminal fx set workstation_eng.x64 @@ -128,20 +127,20 @@ fx set workstation_eng.x64 For more information on the build configuration, see [Configure a build](/development/build/fx.md#configure-a-build). --> -如果想查看更详细的编译选项介绍,参考 [配置编译选项](/development/build/fx.md#configure-a-build) +如果想查看更详细的构建选项介绍,参考 [配置构建选项](/development/build/fx.md#configure-a-build) -## 3. 编译调优(可选) {#speed-up-the-build} +## 3. 构建调优(可选) {#speed-up-the-build} -注意:这一步不是必选项,但是建议您设置,因为设置了这一步能节省很多的编译时间。 +注意:这一步不是必选项,但是建议您设置,因为设置了这一步能节省很多的构建时间。 -编译调优的话,需要下面的服务: +构建调优的话,需要下面的服务: -[Goma](https://chromium.googlesource.com/infra/goma/server/){:.external} 是一个分布式编译服务,常用在一些开源项目中,如 Chrome,Android 以及 Fuchsia。 +[Goma](https://chromium.googlesource.com/infra/goma/server/){:.external} 是一个分布式构建服务,常用在一些开源项目中,如 Chrome,Android 以及 Fuchsia。 @@ -175,7 +174,7 @@ If you do not have access to Goma, but want to accelerate the Fuchsia build locally, use [ccache](https://ccache.dev/){:.external} to cache artifacts from previous builds. --> -如果不能访问 Goma,但是想加速本地编译时间,则可以使用 [ccache](https://ccache.dev/){:.external} 来缓存来进行增量编译。 +如果不能访问 Goma,但是想加速本地构建时间,则可以使用 [ccache](https://ccache.dev/){:.external} 来缓存来进行增量构建。 * {Linux} -## 4. 编译 {#build-fuchsia} +## 4. 构建 {#build-fuchsia} -[`fx build`][fx-build-reference] 命令可以把源代码编译打包,或者编译成其他的类型。 +[`fx build`][fx-build-reference] 命令可以把源代码构建打包,或者构建成其他的类型。 -使用如下命令编译 Fuchsia: +使用如下命令构建 Fuchsia: -注意:编译时间一般为 90 分钟。 +注意:构建时间一般为 90 分钟。 ```posix-terminal fx build @@ -242,12 +241,12 @@ When you modify source code, run the `fx build` command again to perform an incremental build, or run the `fx -i build` command to start a watcher, which automatically builds whenever you update the source code. --> -当您修改源代码后,要运行命令 `fx build` 来增量编译,或者运行 `fx -i build` 命令来开启一个监视进程,这个监视进程一旦发现源码有更新就会自动编译。 +当您修改源代码后,要运行命令 `fx build` 来增量构建,或者运行 `fx -i build` 命令来开启一个监视进程,这个监视进程一旦发现源码有更新就会自动构建。 -要获取关于编译 Fuchsia 的更多信息,请参考参阅[开始编译](/development/build/fx.md#execute-a-build)。 +要获取关于构建 Fuchsia 的更多信息,请参考参阅[开始构建](/development/build/fx.md#execute-a-build)。 From 54acce6729754250419de76c662536d0b24e2a87 Mon Sep 17 00:00:00 2001 From: cwolf9 <2717232422@qq.com> Date: Wed, 27 Jul 2022 04:06:02 +0800 Subject: [PATCH 065/154] =?UTF-8?q?=E7=BF=BB=E8=AF=91=20get-started/=5Fcom?= =?UTF-8?q?mon/fidl/=5Foverview.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- get-started/_common/fidl/_overview.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/get-started/_common/fidl/_overview.md b/get-started/_common/fidl/_overview.md index 1075fdb1..9234dc6a 100644 --- a/get-started/_common/fidl/_overview.md +++ b/get-started/_common/fidl/_overview.md @@ -1,22 +1,34 @@ + +在 **Fuchsia 简介**中了解到,Zircon 提供了内核对象类型来支持 Fuchsia 的进程间通信(IPC)。这些对象类型定义了进程用来交换数据的特定机制。在这个框架内,Zircon 通道提供了一个基于消息的异步传输能力,即支持同时传递数据和一组句柄来授予访问权。 + +Zircon 通道是 **Fuchsia 接口定义语言**(Fuchsia Interface Definition Language,FIDL)所描述的更高层次的交互的基础,FIDL 是用来描述 Fuchsia 程序所使用的 IPC 协议的语言。FIDL 允许不同的客户和服务器相互进行操作,通过强制执行一套语义行为和在通道上操作的持久性格式来实现相互操作。 + +程序通过 **FIDL 编译器**生成的特定语言的 binding 和库与 FIDL 协议进行交互,该编译器是用于隐藏 Zircon IPC 复杂性的一个抽象层。这使得我们可以引入熟悉的编程习惯,如结构化类型和同步执行。编译器为每种支持的语言都生成了 bingding,因此供应商不需要维护客户端库。 + +![图中显示了 Fuchsia 接口定义语言(FIDL)如何通过一个通用接口促进进程间通信(IPC);与何种编程语言无关。](/get-started/images/fidl/fuchsia-interface.png){: width="870"} From 3027500156a6b0f064351267d378c38d918b15c1 Mon Sep 17 00:00:00 2001 From: cwolf9 <2717232422@qq.com> Date: Wed, 27 Jul 2022 04:09:26 +0800 Subject: [PATCH 066/154] =?UTF-8?q?=E7=BF=BB=E8=AF=91=20get-started/=5Fcom?= =?UTF-8?q?mon/fidl/=5Ffidl=5Fintro.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- get-started/_common/fidl/_fidl_intro.md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/get-started/_common/fidl/_fidl_intro.md b/get-started/_common/fidl/_fidl_intro.md index 33d69954..2905c3fb 100644 --- a/get-started/_common/fidl/_fidl_intro.md +++ b/get-started/_common/fidl/_fidl_intro.md @@ -1,11 +1,17 @@ + +Fuchsia 接口定义语言(FIDL)是用来描述 Fuchsia 程序使用的进程间通信(IPC)协议的语言。FIDL 提供了一种简化的声明语法,供供应商将接口定义为一种**协议**。支持的数据类型包括整数、浮点数、布尔运算、字符串和[句柄][glossary.handle]。这些可以被组织成更复杂的数组、向量、结构体、表格和联合体。 + +考虑以下用于 `Echo` 接口的 FIDL 协议的示例。 ```fidl library fuchsia.examples; @@ -15,27 +21,45 @@ library fuchsia.examples; {% includecode gerrit_repo="fuchsia/fuchsia" gerrit_path="examples/fidl/fuchsia.examples/echo.test.fidl" region_tag="echo" adjust_indentation="auto" %} ``` + +FIDL 协议描述了一组**方法**,在通过通道发送消息时被调用。通道消息本身是异步的,发送方和接收方彼此可以独立操作。FIDL 方法引入了更高层次的语义,使 FIDL 交易的客户端和服务器端的编程更加符合传统习惯。 + +FIDL支持以下方法类型: + +* **双向方法**:一个典型的方法调用是,接受可选的参数,其返回类型定义在 `->` 操作符之后。双向方法会阻塞调用方直到收到响应。在 `Echo` 的例子中,`EchoString()` 方法是一个双向的方法。 + +* **单向方法**:异步方法调用,立即返回而不等待响应。没有声明返回类型的方法被认为是客户端的单向方法。在 `Echo` 的例子中,`SendString()` 方法是一个单向的方法。 + +* **事件**:必要时,服务器端可以向客户端发送非请求信息,称之为事件。事件在 `->` 操作符的返回端声明其方法名称。在 `Echo` 的例子中,`OnString()` 方法是一个事件。 + +注意:要获取 FIDL 语言语法和支持的类型的更多细节,请参阅 [FIDL 语言规范](/reference/fidl/language/language.md)。 [glossary.handle]: /glossary/README.md#handle From 11305e485a61bb5047a1d697bb5f0804a69a0907 Mon Sep 17 00:00:00 2001 From: y2-Whyto Date: Wed, 27 Jul 2022 09:56:49 +0800 Subject: [PATCH 067/154] product, board --- glossary-translation.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/glossary-translation.md b/glossary-translation.md index 94544c98..75b4c9dc 100644 --- a/glossary-translation.md +++ b/glossary-translation.md @@ -22,6 +22,7 @@ | automatic retry | 自动重试 | G | | backoff | 退避 | G | | best practice | 最佳做法 | G & i | +| board | 板型 | i | | build | 构建 | G | | caveats | 注意事项 | G | | cleanup | 清理 | G | @@ -56,6 +57,7 @@ | pave | 铺设 | i | | policy | 政策 | G | | prerequisites | 前提条件 | G | +| product | 产品 | i & G | | proxy | 代理 | | | remote | 远程 | | | robust | 可靠的 | G | From a36f14f0a9d28ca43f6d854c283b6652258e7ac8 Mon Sep 17 00:00:00 2001 From: cwolf9 <2717232422@qq.com> Date: Wed, 27 Jul 2022 22:10:28 +0800 Subject: [PATCH 068/154] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=BC=8F=E7=BF=BB?= =?UTF-8?q?=E5=8F=8A=E7=BF=BB=E8=AF=91=E7=BB=86=E8=8A=82=20=5Foverview.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- get-started/_common/fidl/_overview.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/get-started/_common/fidl/_overview.md b/get-started/_common/fidl/_overview.md index 9234dc6a..3e6be97e 100644 --- a/get-started/_common/fidl/_overview.md +++ b/get-started/_common/fidl/_overview.md @@ -5,7 +5,7 @@ define specific mechanisms that processes use to exchange data. Within this framework, **Zircon channels** provide an asynchronous message-based transport capable of passing both data and a set of handles to grant access rights. --> -在 **Fuchsia 简介**中了解到,Zircon 提供了内核对象类型来支持 Fuchsia 的进程间通信(IPC)。这些对象类型定义了进程用来交换数据的特定机制。在这个框架内,Zircon 通道提供了一个基于消息的异步传输能力,即支持同时传递数据和一组句柄来授予访问权。 +您已经在 **Fuchsia 简介**中了解到,Zircon 提供了内核对象类型来支持 Fuchsia 的进程间通信(IPC)。这些对象类型定义了进程用来交换数据的特定机制。在这个框架内,Zircon 通道提供了一个基于消息的异步传输能力,即支持同时传递数据和一组句柄来授予访问权。 -程序通过 **FIDL 编译器**生成的特定语言的 binding 和库与 FIDL 协议进行交互,该编译器是用于隐藏 Zircon IPC 复杂性的一个抽象层。这使得我们可以引入熟悉的编程习惯,如结构化类型和同步执行。编译器为每种支持的语言都生成了 bingding,因此供应商不需要维护客户端库。 +程序通过 **FIDL 编译器**生成的特定语言的绑定(binding)和库与 FIDL 协议进行交互,该编译器是用于隐藏 Zircon IPC 复杂性的一个抽象层。这使得我们可以引入熟悉的编程习惯,如结构化类型和同步执行。编译器为每种支持的语言都生成了绑定,因此供应商不需要维护客户端库。 -Fuchsia 接口定义语言(FIDL)是用来描述 Fuchsia 程序使用的进程间通信(IPC)协议的语言。FIDL 提供了一种简化的声明语法,供供应商将接口定义为一种**协议**。支持的数据类型包括整数、浮点数、布尔运算、字符串和[句柄][glossary.handle]。这些可以被组织成更复杂的数组、向量、结构体、表格和联合体。 +Fuchsia 接口定义语言(FIDL)是用来描述 Fuchsia 程序使用的进程间通信(IPC)协议的语言。FIDL 为供应商提供了一种简化的声明语法,以便将接口定义为一种**协议**。支持的数据类型包括整数、浮点数、布尔运算、字符串和[句柄][glossary.handle]。这些可以被组织成更复杂的数组、向量、结构体、表格和联合体。 -FIDL支持以下方法类型: +FIDL 支持以下方法类型: -* **事件**:必要时,服务器端可以向客户端发送非请求信息,称之为事件。事件在 `->` 操作符的返回端声明其方法名称。在 `Echo` 的例子中,`OnString()` 方法是一个事件。 +* **事件**:必要时,服务器端可以向客户端发送非请求信息,这种消息称为事件。事件在 `->` 操作符的返回端声明其方法名称。在 `Echo` 的例子中,`OnString()` 方法是一个事件。 -如果您在脚本运行期间看到了 `Invalid authentication credentials` 报错信息,您的 `~/.gitcookies` 文件中可能包含了一些引导脚本想要自动检测的来自 `googlesource.com` 的 cookie 信息。 +如果您在引导脚本运行过程中看到了 `Invalid authentication credentials` 报错信息,您的 `~/.gitcookies` 文件中可能包含了来自 `googlesource.com` 中的一些仓库的 cookie,引导脚本想要匿名检出。 @@ -386,7 +386,7 @@ Alternatively, run the `fx` tool directly using its path, for example: -无论哪种情况,您都需要`jiri` 工具在您的 `PATH` 环境变量中。 +无论哪种情况,您都需要 `jiri` 工具在您的 `PATH` 环境变量中。 [ffx-platform-preflight]: https://fuchsia.dev/reference/tools/sdk/ffx#preflight From b42fd3fd01cc083b7e16f0180d4a4f3209c18d06 Mon Sep 17 00:00:00 2001 From: wy Date: Fri, 29 Jul 2022 20:00:54 +0800 Subject: [PATCH 071/154] build_fuchsia.md file review --- get-started/build_fuchsia.md | 78 ++++++++++++++++++------------------ 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/get-started/build_fuchsia.md b/get-started/build_fuchsia.md index 6200e514..e044f36a 100644 --- a/get-started/build_fuchsia.md +++ b/get-started/build_fuchsia.md @@ -5,7 +5,7 @@ on a host machine. --> # 配置和构建 Fuchsia {#configure-and-build-fuchsia} -这篇文档将引导您在主机上如何配置并构建 Fuchsia。 +这篇文档将引导您在主机上配置并构建 Fuchsia。 @@ -16,9 +16,9 @@ The steps are: 1. [Speed up the build (Optional)](#speed-up-the-build). 1. [Build Fuchsia](#build-fuchsia). --> -1. [准备](#prerequisites) +1. [前提条件](#prerequisites) 1. [配置设置项](#set-your-build-configuration) -1. [构建调优(可选)](#speed-up-the-build) +1. [提升构建速度(可选)](#speed-up-the-build) 1. [构建](#build-fuchsia) -* [准备源码](#source-code-setup) +* [源代码设置](#source-code-setup) * [硬件要求](#hardware-requirements) -### 准备源码 {#source-code-setup} +### 源代码设置 {#source-code-setup} -根据文档 [下载 Fuchsia 源码](/get-started/get_fuchsia_source.md) 指示下载 Fuchsia 的源码,然后在您的机器上设置开发环境。 +根据文档[下载 Fuchsia 源代码](/get-started/get_fuchsia_source.md)指示下载 Fuchsia 的源代码,然后在您的计算机上设置开发环境。 @@ -53,7 +53,7 @@ environment on your machine. You can build Fuchsia only on a machine with one of the following host architectures: --> -Fuchsia 的构建支持如下架构的机器: +您只能在具有下列主机架构之一的计算机上构建 Fuchsia: -注意:Windows 和 ARM64 是不支持的。 +注意:不支持 Windows 和 ARM64。 -## 2. 配置设置项 {#set-your-build-configuration} +## 2. 设置构建配置 {#set-your-build-configuration} -Fuchsia 的构建设置项告诉构建系统如何构建,以及构建什么架构的文件。 +Fuchsia 的构建配置告诉构建系统进行构建的产品,以及构建面向的平台。 -设置您的 Fuchsia 构建选项,可以运行 [`fx set`][fx-set-reference] 命令: +要设置您的 Fuchsia 构建配置,请运行 [`fx set`][fx-set-reference] 命令: ```posix-terminal fx set {{ '' }}PRODUCT{{ '' }}.{{ '' }}BOARD{{ '' }} ``` -替换以下选项: +请替换以下选项: -* `PRODUCT`: 构建的目标文件类型, 比如可以设置为: `core` 和 `workstation_eng`. -* `BOARD`: 构建的可执行文件架构,比如:`x64` 和 `qemu-x64` +* `PRODUCT`(产品):您想要构建的 Fuchsia 产品,比如:`core` 和 `workstation_eng`。 +* `BOARD`(板型):编译的可执行文件架构,比如:`x64` 和 `qemu-x64`。 -下面的示例设置了构建选项为 `core.qemu-x64`: +下面的示例将一项构建配置设置为 `core.qemu-x64`: ```posix-terminal fx set core.qemu-x64 @@ -111,14 +111,14 @@ In this example: emulator (FEMU), which is based on the open source emulator [QEMU][qemu]{:.external}. --> - * `core` 就是选择了特性最小化的 Fuchsia, 当然包括了常见的网络相关。 - * `qemu-x64` 这个选项设置了构建架构为在开源的虚拟机 (FEMU)中的 x64 架构 [QEMU][qemu]{:.external}. + * `core` 是 Fuchsia 具备最小功能集的产品,包括常用的网络功能。 + * `qemu-x64` 是 Fuchsia 模拟器(FEMU)的 x64 架构这一板型,FEMU 基于开源模拟器 [QEMU][qemu]{:.external}。 -在看另一个构建选项示例,下面这个命令配置了 [在设备中安装 Fuchsia 工作站][build-workstation] 中常用的一个架构, `workstation_eng.x64`: +另外,下面的例子将一项编译配置设置为 `workstation_eng.x64`,这常用于[在设备上安装 Fuchsia 工作站][build-workstation]: ```posix-terminal fx set workstation_eng.x64 @@ -127,40 +127,40 @@ fx set workstation_eng.x64 For more information on the build configuration, see [Configure a build](/development/build/fx.md#configure-a-build). --> -如果想查看更详细的构建选项介绍,参考 [配置构建选项](/development/build/fx.md#configure-a-build) +要获取关于构建配置的更多信息,请参阅[配置构建](/development/build/fx.md#configure-a-build)。 -## 3. 构建调优(可选) {#speed-up-the-build} +## 3. 提升构建速度(可选) {#speed-up-the-build} -注意:这一步不是必选项,但是建议您设置,因为设置了这一步能节省很多的构建时间。 +注意:这一步对于构建 Fuchsia 而言并不是必需的,但是可以在您构建 Fuchsia 时节省很多时间,因此建议您完成该步骤。 -构建调优的话,需要下面的服务: +要提升 Fuchsia 构建速度,您可以使用下列服务之一: -* [使用 Goma](#enable-goma) +* [启用 Goma](#enable-goma) * [安装 ccache](#install-ccache) -### 使用 Goma {#enable-goma} +### 启用 Goma {#enable-goma} -[Goma](https://chromium.googlesource.com/infra/goma/server/){:.external} 是一个分布式构建服务,常用在一些开源项目中,如 Chrome,Android 以及 Fuchsia。 +[Goma](https://chromium.googlesource.com/infra/goma/server/){:.external} 是一个分布式编译器服务,适用于 Chrome、Android 和 Fuchsia 等开源项目。 -如果您能访问 Goma, 那么请使用下面的命令来开启 Goma 客户端: +如果您能访问 Goma, 请在您的计算机上 Goma 客户端: ```posix-terminal fx goma @@ -174,13 +174,13 @@ If you do not have access to Goma, but want to accelerate the Fuchsia build locally, use [ccache](https://ccache.dev/){:.external} to cache artifacts from previous builds. --> -如果不能访问 Goma,但是想加速本地构建时间,则可以使用 [ccache](https://ccache.dev/){:.external} 来缓存来进行增量构建。 +如果您无法访问 Goma,但想在本地加速构建,则可以使用 [ccache](https://ccache.dev/){:.external} 缓存之前构建的产物。 * {Linux} - 在 Linux 中使用 `ccache`,安装如下安装包: + 要在 Linux 上使用 `ccache`,请安装如下安装包: ```posix-terminal sudo apt install ccache ``` @@ -190,20 +190,20 @@ artifacts from previous builds. [Using CCache on Mac](https://chromium.googlesource.com/chromium/src.git/+/HEAD/docs/ccache_mac.md){:.external} for installation instructions. --> - 对于 macOS ,参考 [在 Mac 上使用 CCache](https://chromium.googlesource.com/chromium/src.git/+/HEAD/docs/ccache_mac.md){:.external} 中的安装步骤。 + 对于 macOS ,请参阅[在 Mac 上使用 CCache](https://chromium.googlesource.com/chromium/src.git/+/HEAD/docs/ccache_mac.md){:.external} 中的安装步骤。 -如果您的 `CCACHE_DIR` 环境变量指向一个存在的路径,`ccache` 就会自动开启。 +如果您的 `CCACHE_DIR` 环境变量指向已有路径,那么 `ccache` 就会自动开启。 -如果想关闭这个特性,可以指定下面的标志为 `fx set`: +要覆盖此默认行为,请为 `fx set` 指定以下标志: -* 强制使用 `ccache`,即使其他的加速项可以使用: +* 即使其他的加速项可用,也要强制使用 `ccache`,则:
     fx set PRODUCT.BOARD --ccache
@@ -211,7 +211,7 @@ To override this default behavior, specify the following flags to `fx set`:
 
-*   关闭 `ccache`:
+*   要禁用 `ccache`:
     
     fx set PRODUCT.BOARD --no-ccache
     
@@ -227,7 +227,7 @@ source code into packages and other build artifacts. -使用如下命令构建 Fuchsia: +要构建 Fuchsia,请运行以下命令: @@ -241,26 +241,26 @@ When you modify source code, run the `fx build` command again to perform an incremental build, or run the `fx -i build` command to start a watcher, which automatically builds whenever you update the source code. --> -当您修改源代码后,要运行命令 `fx build` 来增量构建,或者运行 `fx -i build` 命令来开启一个监视进程,这个监视进程一旦发现源码有更新就会自动构建。 +当您修改源代码后,请再次运行命令 `fx build` 进行增量构建,或者运行 `fx -i build` 命令来开启一个监视进程,这个监视进程会在发现源代码更新时自动构建。 -要获取关于构建 Fuchsia 的更多信息,请参考参阅[开始构建](/development/build/fx.md#execute-a-build)。 +要获取关于构建 Fuchsia 的更多信息,请参阅[执行构建](/development/build/fx.md#execute-a-build)。 -## 下一步 +## 后续步骤 -关于如何在您的主机上打开 Fuchsia 模拟器 (FEMU),参考 [开启 Fuchsia 模拟器](/get-started/set_up_femu.md)。 +要在您的计算机上启动 Fuchsia 模拟器 (FEMU),请参阅[开启 Fuchsia 模拟器](/get-started/set_up_femu.md)。 -如果您无论如何都想要在硬件平台上运行 Fuchsia, 可以参考 [在硬件设备中安装 Fuchsia](/development/hardware/README.md)。 +不过,如果您想在硬件设备上运行 Fuchsia,请参阅[在设备上安装 Fuchsia](/development/hardware/README.md)。 From 7795077fa5d5fb4db8beb479d6bd4049f64d7abf Mon Sep 17 00:00:00 2001 From: "user: wy" <101500325+user-wy@users.noreply.github.com> Date: Fri, 29 Jul 2022 20:04:32 +0800 Subject: [PATCH 072/154] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20next=20steps=20?= =?UTF-8?q?=E6=9C=AF=E8=AF=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加 next steps 术语 --- glossary-translation.md | 1 + 1 file changed, 1 insertion(+) diff --git a/glossary-translation.md b/glossary-translation.md index 75b4c9dc..f8c7d45a 100644 --- a/glossary-translation.md +++ b/glossary-translation.md @@ -77,6 +77,7 @@ | traffic | 流量 | G | | unmount | 卸载 | G | | validate | 验证 | G | +| Next steps | 后续步骤 | G | ## 文档中未出现术语的翻译参考表 From 6654362fc3f67cc761e41ec5a4c63eefbab6de5d Mon Sep 17 00:00:00 2001 From: wy Date: Sun, 31 Jul 2022 22:22:34 +0800 Subject: [PATCH 073/154] build_fuchsia.md file review --- get-started/build_fuchsia.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/get-started/build_fuchsia.md b/get-started/build_fuchsia.md index e044f36a..42057111 100644 --- a/get-started/build_fuchsia.md +++ b/get-started/build_fuchsia.md @@ -17,13 +17,13 @@ The steps are: 1. [Build Fuchsia](#build-fuchsia). --> 1. [前提条件](#prerequisites) -1. [配置设置项](#set-your-build-configuration) +1. [设置构建配置](#set-your-build-configuration) 1. [提升构建速度(可选)](#speed-up-the-build) -1. [构建](#build-fuchsia) +1. [构建 Fuchsia](#build-fuchsia) -## 1. 准备 {#prerequisites} +## 1. 前提条件 {#prerequisites} @@ -91,7 +91,7 @@ Replace the following: * `BOARD`: The architecture of the product; for example, `x64` and `qemu-x64` --> * `PRODUCT`(产品):您想要构建的 Fuchsia 产品,比如:`core` 和 `workstation_eng`。 -* `BOARD`(板型):编译的可执行文件架构,比如:`x64` 和 `qemu-x64`。 +* `BOARD`(板型):产品的可执行文件架构,比如:`x64` 和 `qemu-x64`。 @@ -118,7 +118,7 @@ On the other hand, the example below sets the build configuration to `workstation_eng.x64`, which is commonly used to [install Fuchsia's Workstation product on a device][build-workstation]: --> -另外,下面的例子将一项编译配置设置为 `workstation_eng.x64`,这常用于[在设备上安装 Fuchsia 工作站][build-workstation]: +另外,下面的例子将一项构建配置设置为 `workstation_eng.x64`,这常用于[在设备上安装 Fuchsia 工作站][build-workstation]: ```posix-terminal fx set workstation_eng.x64 @@ -218,7 +218,7 @@ To override this default behavior, specify the following flags to `fx set`: -## 4. 构建 {#build-fuchsia} +## 4. 构建 Fuchsia {#build-fuchsia} -注意:这一步对构建或者运行 Fuchsia 并不是必须的。但是为了确保 Fuchsia 模拟器实例能在 Linux 上顺利运行是推荐的。 +注意:这一步对构建或者运行 Fuchsia 并不是必需的。但是为了确保 Fuchsia 模拟器实例能在 Linux 上顺利运行是推荐的。 -(**仅Linux**) 如果您计划在 Linux 中运行 Fuchsia,建议您运行如下命令在宿主机上允许 Fuchsia 相关的流量: +(**仅限 Linux**) 如果您计划在 Linux 中运行 Fuchsia,建议您运行如下命令在宿主机上允许 Fuchsia 相关的流量: ```posix-terminal fx setup-ufw @@ -279,13 +279,13 @@ firewall rules. (For more information on this script, see [`setup-ufw`][setup-uf -## 下一步 +## 后续步骤 -构建您第一个 Fuchsia 系统镜像,参考[配置和构建 Fuchsia](/get-started/build_fuchsia.md)。 +要构建您第一个 Fuchsia 系统镜像,请参考[配置和构建 Fuchsia](/get-started/build_fuchsia.md)。 @@ -299,11 +299,11 @@ If you see the `Invalid authentication credentials` error during the bootstrap process, your `~/.gitcookies` file may contain cookies from some repositories in `googlesource.com` that the bootstrap script wants to check out anonymously. --> -如果您在引导脚本运行过程中看到了 `Invalid authentication credentials` 报错信息,您的 `~/.gitcookies` 文件中可能包含了来自 `googlesource.com` 中的一些仓库的 cookie,引导脚本想要匿名检出。 +如果您在引导脚本运行过程中看到了 `Invalid authentication credentials` 报错信息,那么您的 `~/.gitcookies` 文件中可能包含了来自 `googlesource.com` 中一些仓库的 cookie,引导脚本想要匿名检出。 -为了解决这个问题,使用以下任何一个方式: +要解决该错误,请使用以下方式之一: -* 按照屏幕上的指示为特定的仓库获取密码 +* 按照屏幕上的指示为特定的仓库获取密码。 * 删除 `.gitcookies` 文件中有问题的 cookie。 +系统中的所有组件组成一个有根的**组件实例树**。树中的父组件负责将其他组件的实例声明为其子组件并为它们提供功能。同时,子组件可以向父组件公开功能。这些组件实例和功能关系构成了**组件拓扑**。 + +任何父组件及其所有子组件在树中形成一个称为**领域**的组。领域使父级能够控制哪些功能流入和流出其组件的子树,从而创建功能边界。这种封装允许领域在内部进行重组,而不会影响依赖于其公开功能的外部组件。 + +![图表展示了组件实例被组织成一个树,父组件通过“功能路由”确定每个子组件可用的功能。](/get-started/images/components/component-topology.png){: width="616"} + +在上图中,`fuchsia.example.Foo` 协议功能通过组件实例树从提供者路由到客户端。组件使用 `use` 关键字声明它们**需要**的功能: + +```json5 +{ + // 程序运行的有关信息。 + program: { + // 使用内置的 ELF 运行程序来运行二进制文件。 + runner: "elf", + // 运行该组件的二进制文件。 + binary: "bin/client", + }, + + // 此组件所需的功能。 + use: [ + { protocol: "fuchsia.example.Foo" }, + ], +} ``` + +组件使用组件清单中的 `capabilities` 部分声明它们实现或**提供**的功能。这使得组件框架知道该功能和它的提供者。请查看下面的 `provider.cml` 示例: + +```json5 +{ + // 程序运行的有关信息。 + program: { + // 使用内置的 ELF 运行程序来运行二进制文件。 + runner: "elf", + // 运行该组件的二进制文件。 + binary: "bin/provider", + }, + // 此组件提供的功能。 + capabilities: [ + { protocol: "fuchsia.example.Foo" }, + ], + // 通过此组件路由的功能。 + expose: [ + { + protocol: "fuchsia.example.Foo", + from: "self", + }, + ], +} +``` + + +`expose` 关键字使这个组件的功能通过它的父组件向其他领域提供,这也可能包括这个组件的子组件提供的功能。在这种情况下,功能的来源是 `self`,因为这个组件是提供者。 + +父组件控制领域内的**功能路由**,创建从客户端组件到提供者的显式路径。请查看以下 `parent.cml` 清单示例: ```json5 { @@ -96,18 +160,28 @@ example `parent.cml` manifest: } ``` + + + +父组件在领域中声明一组子组件,并使用 `offer` 关键字将功能路由到它们。用这种方法,父组件就决定了每个子组件功能的范围和来源。这也使拓扑中的多个组件能够提供相同的功能,因为组件框架依赖于显式路由来确定如何解析来自每个客户端的请求。 + +注意:要获取关于组件组织的更多详细信息,请参阅[组件拓扑](/concepts/components/v2/topology.md). From 8924986cd3f836215a994655f848d50389c57f9e Mon Sep 17 00:00:00 2001 From: cwolf9 <2717232422@qq.com> Date: Thu, 4 Aug 2022 21:23:35 +0800 Subject: [PATCH 076/154] =?UTF-8?q?=E7=BF=BB=E8=AF=91=20get-started/=5Fcom?= =?UTF-8?q?mon/components/=5Ftests=5Fintro.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- get-started/_common/components/_tests_intro.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/get-started/_common/components/_tests_intro.md b/get-started/_common/components/_tests_intro.md index 9b994c64..eac6dac3 100644 --- a/get-started/_common/components/_tests_intro.md +++ b/get-started/_common/components/_tests_intro.md @@ -1,19 +1,31 @@ + +Fuchsia **测试运行器框架**(Test Runner Framework)使开发者能够使用各种语言和运行时为组件构建测试,并在目标设备上执行它们。该框架提供了实现 `fuchsia.test.Suite` 协议的**测试运行器**组件,并与通用的特定语言的测试框架(如 GoogleTest (C++))集成。 + +`test_manager` 组件负责在 Fuchsia 设备上运行测试。它检查实现测试套件协议的组件,并将它们作为子组件启动。这意味着 `test_manager` 也负责为每个测试套件提供能力,即创建通常称为**测试领域**的东西。 + +![图中显示了测试运行器框架如何为开发者提供接口来公开测试套件,以及开发者工具如何在 Fuchsia 设备上执行测试。](/get-started/images/components/test-realm.png){: width="714"} + +`ffx test` 等开发者工具与设备上的 `test_manager` 进行通信,以执行测试套件并检索结果。 From ba1347427fe1ce1dd7e60eb533aeb44e7b99908d Mon Sep 17 00:00:00 2001 From: cwolf9 <2717232422@qq.com> Date: Thu, 4 Aug 2022 21:24:52 +0800 Subject: [PATCH 077/154] =?UTF-8?q?=E7=BF=BB=E8=AF=91=20get-started/=5Fcom?= =?UTF-8?q?mon/fidl/=5Ftesting=5Fintro.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- get-started/_common/fidl/_testing_intro.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/get-started/_common/fidl/_testing_intro.md b/get-started/_common/fidl/_testing_intro.md index b1611972..159e3aa8 100644 --- a/get-started/_common/fidl/_testing_intro.md +++ b/get-started/_common/fidl/_testing_intro.md @@ -1,3 +1,4 @@ + +[集成测试](https://en.wikipedia.org/wiki/Integration_testing){:.external} 侧重于验证组件的行为,因为它会与系统上其他组件进行交互。正因为如此,集成测试通常与主组件分开构建,并且可以将被测组件和其他依赖组件声明为子组件。根据测试的性质,依赖组件可以作为模拟或存根提供,以促进测试用例保持封闭性。 From 816cda46c4b8b3da3b1d199526edd1e695b07ba0 Mon Sep 17 00:00:00 2001 From: Xyct <87l46110@gmail.com> Date: Fri, 5 Aug 2022 13:57:42 +0800 Subject: [PATCH 078/154] =?UTF-8?q?=E7=BF=BB=E8=AF=91=5Fcommon/intro/=5Far?= =?UTF-8?q?chitecture.md=E5=92=8Cget-started/learn/intro/architecture.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- get-started/_common/intro/_architecture.md | 27 +++++++++++++++++++++- get-started/learn/intro/architecture.md | 3 ++- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/get-started/_common/intro/_architecture.md b/get-started/_common/intro/_architecture.md index 522c93d6..aee80ff5 100644 --- a/get-started/_common/intro/_architecture.md +++ b/get-started/_common/intro/_architecture.md @@ -1,29 +1,54 @@ + +![展示整个 Fuchsia 系统架构的高层图表的数据表,强调了核心组件和子系统] (/get-started/images/intro/fuchsia-architecture.png){: width="1080"} -The following architectural principles guide Fuchsia's design and development: + +以下架构性原则指导了 Fuchsia 的设计与开发: + +* [**简单:**][simple]Fuchsia 让创建、维护和集成软件与硬件在广范的设备中都变得容易。 + +* [**安全:**][secure]Fuchsia 有着为现代计算设计的内核和软件模型。 + +* [**可升级:**][updatable]作为模块化操作系统,Fuchsia 允许内核、驱动和软件组件独立升级。 + +* [**高性能:**][performant]Fuchsia 为真实世界产品需求设计,并为性能优化。 + +系统的核心是 [Zircon][glossary.zircon],它是处理系统启动与引导的内核和一组库。其他所有系统组件都实现于用户空间并被隔离,再次强化了**最小特权原则**。这些组件包括: + +* 设备驱动 +* 文件系统 +* 网络栈 [glossary.zircon]: /glossary/README.md#zircon [simple]: /concepts/principles/simple.md diff --git a/get-started/learn/intro/architecture.md b/get-started/learn/intro/architecture.md index aab7cae8..fb7f06da 100644 --- a/get-started/learn/intro/architecture.md +++ b/get-started/learn/intro/architecture.md @@ -1,3 +1,4 @@ -# Fuchsia architecture + +# Fuchsia 架构 <<../../_common/intro/_architecture.md>> From 4a9f66bd86586871167a2077b102f325792323dc Mon Sep 17 00:00:00 2001 From: Xyct <87l46110@gmail.com> Date: Fri, 5 Aug 2022 18:00:02 +0800 Subject: [PATCH 079/154] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=BF=BB=E8=AF=91?= =?UTF-8?q?=E6=9C=AF=E8=AF=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- glossary-translation.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/glossary-translation.md b/glossary-translation.md index f8c7d45a..1c5049f6 100644 --- a/glossary-translation.md +++ b/glossary-translation.md @@ -39,6 +39,7 @@ | escalate | 上报 | G | | execute-only memory | 只执行内存 | G | | fault injection | 故障注入 | G | +| fully qualified URL | 完全限定的网址 | G | | get stared | 使用入门
入门 | G
前者更常用 | | get started with | 开始使用
使用入门 | G
二者均常用 | | guidance | 指导 | | @@ -50,6 +51,7 @@ | infrastructure | 基础架构 | G | | inspect | 审视 | Fuchsia 专有名词
i | | just-in-time (JIT) compilation | 即时(JIT)编译 | G | +| moniker | 代称 | i | | mount | 装载 | G | | namespace | 命名空间 | G | | out-of-tree | 树外 | G
此处指源码树 | @@ -76,6 +78,7 @@ | suite | 套件 | G | | traffic | 流量 | G | | unmount | 卸载 | G | +| URL | 网址 | G | | validate | 验证 | G | | Next steps | 后续步骤 | G | From 9e71d4abbfea78743616f52ba7f36d2362dd368e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=97=85=E7=AB=8B=E3=81=A1=E3=81=AE=E9=A2=A8?= <36873309+tabidachinokaze@users.noreply.github.com> Date: Fri, 5 Aug 2022 21:53:23 +0800 Subject: [PATCH 080/154] Update get-started/_common/components/_organizing_intro.md Co-authored-by: y2-Whyto --- get-started/_common/components/_organizing_intro.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/get-started/_common/components/_organizing_intro.md b/get-started/_common/components/_organizing_intro.md index 8be5db0c..d22ce23c 100644 --- a/get-started/_common/components/_organizing_intro.md +++ b/get-started/_common/components/_organizing_intro.md @@ -15,7 +15,7 @@ out of its sub-tree of components, creating a capability boundary. This encapsulation allows the realm to be reorganized internally without affecting external components dependent on its exposed capabilities. --> -任何父组件及其所有子组件在树中形成一个称为**领域**的组。领域使父级能够控制哪些功能流入和流出其组件的子树,从而创建功能边界。这种封装允许领域在内部进行重组,而不会影响依赖于其公开功能的外部组件。 +任何父组件及其所有子组件在树中形成一个称为**领域**的组。领域使父级能够控制那些功能流入和流出其组件的子树,从而创建功能边界。这种封装允许领域在内部进行重组,而不会影响依赖于其公开功能的外部组件。 -Fuchsia 是谷歌从内核创建的一种新的开源操作系统,旨在满足当今不断增长的连接设备生态系统的需求。 +Fuchsia 是谷歌从内核创建的一种新的开源操作系统,旨在满足当今不断增长的互联设备生态系统的需求。 + -在本培训模块中,您将了解这一新操作系统背后的核心原理, -并探索 Fuchsia 如何为开发人员在各种设备上创建经久耐用的产品和体验奠定基础。 +在本培训模块中,您将了解这一新操作系统背后的核心原理,并探索 Fuchsia 如何为开发人员在各种设备上创建经久耐用的产品和体验奠定基础。 From 8a5128a72624baead30126d4edd9e4c82799d5fd Mon Sep 17 00:00:00 2001 From: Eric X Date: Sat, 6 Aug 2022 17:52:36 +0800 Subject: [PATCH 082/154] =?UTF-8?q?=E5=9B=9E=E9=80=80build=5Ffuchsia?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=88=B0=E6=9C=AA=E7=BF=BB=E8=AF=91=E7=89=88?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- get-started/build_fuchsia.md | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/get-started/build_fuchsia.md b/get-started/build_fuchsia.md index 58964b9d..7e66e119 100644 --- a/get-started/build_fuchsia.md +++ b/get-started/build_fuchsia.md @@ -1,17 +1,14 @@ - -# 配置和构建 Fuchsia +# Configure and build Fuchsia {#configure-and-build-fuchsia} - -本指南提供如何在宿主机上配置和构建 Fuchsia 的指令。 +This guide provide instructions on how to configure and build Fuchsia +on a host machine. - -步骤如下: +The steps are: - +1. [Build Fuchsia](#build-fuchsia). ## 1. Prerequisites {#prerequisites} From 1e84ad4db836476362a8107d613d16f180594ad8 Mon Sep 17 00:00:00 2001 From: Eric X Date: Sat, 6 Aug 2022 17:57:04 +0800 Subject: [PATCH 083/154] =?UTF-8?q?=E5=9B=9E=E9=80=80=E5=85=B6=E4=BB=96?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=88=B0=E6=9C=AA=E7=BF=BB=E8=AF=91=E7=89=88?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- get-started/_common/components/_overview.md | 34 ++++++------------- .../_common/components/_product_driver.md | 21 ++++-------- .../_common/components/_product_intro.md | 12 ++----- .../_common/components/_product_session.md | 22 ++++-------- 4 files changed, 28 insertions(+), 61 deletions(-) diff --git a/get-started/_common/components/_overview.md b/get-started/_common/components/_overview.md index 26934923..fd829dc0 100644 --- a/get-started/_common/components/_overview.md +++ b/get-started/_common/components/_overview.md @@ -1,40 +1,28 @@ - -一个组件是一个运行在 Fuchsia 沙盒中的程序。每个组件都是一个可组合的模块,依据各自功能与其它组件交互。 -Fuchsia 中的所有软件都被定义为一个个组件,除了内核、引导进程以及组件管理器。 +except for the kernel image, bootstrapping processes, and the Component Manager. - -Fuchsia 的组件框架致力于让系统可以运行几乎所有的用户空间软件。 -组件管理器是一个系统进程,负责协调各个组件实例的执行和生命周期,维护组件拓扑,给组件提供相应功能,并使它们彼此隔离。 +from one another. - -组件通过功能获得访问更广泛系统的各个部分的特权。 -每个组件都可以声明它们提供给系统的新功能以及需要其他组件(或框架)提供的功能。 -组件管理器解析并验证组件之间的所有功能请求,以确保它们与组件已被正确授予的功能相匹配。 +has been properly granted. diff --git a/get-started/_common/components/_product_driver.md b/get-started/_common/components/_product_driver.md index 7271df4f..e56a8b82 100644 --- a/get-started/_common/components/_product_driver.md +++ b/get-started/_common/components/_product_driver.md @@ -1,20 +1,13 @@ - -## 驱动框架 +## Driver framework - -与 session 类似,Fuchsia 驱动框架使开发人员能够将产品特定的设备驱动程序实现为组件。 -一些驱动程序组件代表硬件接口控制器,例如 PCI 或 USB,而其他驱动程序组件则与终端设备交互, -例如以太网控制器或键盘。 +interact with end devices, such as an ethernet controller or keyboard. - -当设备被发现或连接到系统时,`driver_manager` 平台组件启动必要的驱动程序组件, -将它们绑定到硬件接口,并管理它们的生命周期。 +hardware interfaces, and manages their lifecycle. - -注:有关驱动框架的细节,参考[Fuchsia 驱动框架](/development/drivers/concepts/fdf.md). +Note: For more details on the driver framework, see +[Fuchsia Driver Framework](/development/drivers/concepts/fdf.md). diff --git a/get-started/_common/components/_product_intro.md b/get-started/_common/components/_product_intro.md index 186ceaa7..cc748e6a 100644 --- a/get-started/_common/components/_product_intro.md +++ b/get-started/_common/components/_product_intro.md @@ -1,16 +1,10 @@ - -组件构成了在 Fuchsia 用户空间中运行的软件的基础。 -到目前为止,您探索的组件是运行 Fuchsia 的所有产品通用的核心平台的一部分。 -Fuchsia 产品由平台组件和产品特定元素组成,以满足设备硬件和用户体验的独特需求。 -在本节中,您将探索 Fuchsia 如何构建组件以实现产品级定制。 +Fuchsia builds on components to enable product-level customization. - -![数据表展现了 Fuchsia 通过会话框架和驱动框架让产品在核心平台上的定制成为可能.] (/get-started/images/components/product.png){: width="582"} diff --git a/get-started/_common/components/_product_session.md b/get-started/_common/components/_product_session.md index 4e78ca99..d776e8c1 100644 --- a/get-started/_common/components/_product_session.md +++ b/get-started/_common/components/_product_session.md @@ -1,23 +1,15 @@ - -## Session 框架 +## Session framework - -会话是一系列封装了产品用户体验的组件。会话框架充当 Fuchsia 平台和产品级用户交互之间的边界。 -每个 Fuchsia 产品都将单个会话实例定义为产品体验的根,并可能管理其他子组件。 +additional child components. - - -`session_manager` 平台组件在启动时打开会话组件,并为其提供一组固定的功能,以支持诸如窗口管理、 -输入事件处理或可访问元素的会话框架 API. +accessibility. - -注: 有关会话框架的更多细节,请参考 -[会话框架介绍](/concepts/session/introduction.md). +Note: For more details on the session framework, see +[Introduction to the session framework](/concepts/session/introduction.md). From a50c8f9a0c1de013e360b4abb40b6b7debb172e3 Mon Sep 17 00:00:00 2001 From: tabidachinokaze Date: Sat, 6 Aug 2022 22:04:24 +0800 Subject: [PATCH 084/154] =?UTF-8?q?=E7=BF=BB=E8=AF=91=20get-started/=5Fcom?= =?UTF-8?q?mon/components/=5Forganizing=5Flifecycle.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/_organizing_lifecycle.md | 30 ++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/get-started/_common/components/_organizing_lifecycle.md b/get-started/_common/components/_organizing_lifecycle.md index 7ae52f80..a797afff 100644 --- a/get-started/_common/components/_organizing_lifecycle.md +++ b/get-started/_common/components/_organizing_lifecycle.md @@ -1,37 +1,65 @@ -## Component lifecycle + +## 组件生命周期 + +在组件拓扑中添加和移除组件实例时,会创建和销毁组件实例。这可以通过以下两种方式之一发生: + +* **静态地**:该实例在组件清单中被声明为树中另一个组件的子组件。静态组件仅当一个更新更改组件拓扑时才会创建和销毁。 + +* **动态地**:实例在运行时使用 `fuchsia.component.Realm` 协议在组件 `collection` 中添加或移除。动态组件在系统关闭时销毁。 + +一旦组件被销毁,框架就会移除它的持久状态(比如本地存储)。 + +框架会启动一个组件实例当另一个组件尝试打开一个通道到该组件实例时——这称为**绑定**。当连接到一个由组件公开的能力时,绑定会**隐式**发生。绑定到已经启动的组件会连接到当前运行的实例。 + + + +组件可能会通过退出程序(由组件的 `runner` 定义)自行停止,或者框架可能会在系统关闭时停止组件。在被销毁之前,框架将组件移动到**关闭**状态以指示它不能再次启动。 + +![该图显示了组件如何具有两种不同的状态:实例和执行。这些状态描述了“组件生命周期”。](/get-started/images/components/component-lifecycle.png){: width="662"} + +注意:要获取关于组件状态和执行的更多详细信息,请参阅[组件生命周期](/concepts/components/v2/lifecycle.md)。 From 77a03dca5a501237441d23147061f18d3cc8d670 Mon Sep 17 00:00:00 2001 From: Eric X Date: Sun, 7 Aug 2022 10:31:27 +0800 Subject: [PATCH 085/154] =?UTF-8?q?=E5=88=86=E6=8B=86=E7=BF=BB=E8=AF=91?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=88=B0=E5=8D=95=E7=8B=AC=E5=88=86=E6=94=AF?= =?UTF-8?q?=EF=BC=8C=E5=90=88=E5=B9=B6=E5=8E=9FPR=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E5=AE=A1=E6=A0=B8=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../_common/components/_product_intro.md | 9 +++------ .../_common/components/_product_session.md | 19 ++++++++++++------- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/get-started/_common/components/_product_intro.md b/get-started/_common/components/_product_intro.md index ceab5fb6..cc748e6a 100644 --- a/get-started/_common/components/_product_intro.md +++ b/get-started/_common/components/_product_intro.md @@ -1,13 +1,10 @@ - -组件构成了在 Fuchsia 用户空间中运行的软件的基础。 到目前为止,您所探索的组件是运行 Fuchsia 的所有产品通用的核心平台的一部分。Fuchsia 产品由平台组件和特定产品元素组成,以满足设备硬件和用户体验的独特需求。 在本节中,您将探索 Fuchsia 如何构建组件以实现产品级定制。 +Fuchsia builds on components to enable product-level customization. - -![数据表展现了 Fuchsia 通过会话框架和驱动框架使产品在核心平台上的定制成为可能。] (/get-started/images/components/product.png){: width="582"} diff --git a/get-started/_common/components/_product_session.md b/get-started/_common/components/_product_session.md index d776e8c1..9c87a511 100644 --- a/get-started/_common/components/_product_session.md +++ b/get-started/_common/components/_product_session.md @@ -1,15 +1,20 @@ -## Session framework + +## 会话框架 -Sessions are components that encapsulate a product’s user experience. The + +会话是一系列封装了产品用户体验的组件。会话框架充当 Fuchsia 平台和产品级用户交互之间的边界。每个 Fuchsia 产品都将单个会话实例定义为产品体验的根,并可能管理其他子组件。 -The `session_manager` platform component starts the session component on boot + + +`session_manager` 平台组件在启动时打开会话组件,并为其提供一组固定的功能,以支持诸如窗口管理、输入事件处理或可访问元素的会话框架 API。 -Note: For more details on the session framework, see -[Introduction to the session framework](/concepts/session/introduction.md). + +注: 要获取关于会话框架的更多细节,请参阅[会话框架介绍](/concepts/session/introduction.md). From f28d39be9be6d2e55bd38ba0e3324a47adc5b870 Mon Sep 17 00:00:00 2001 From: Eric X Date: Sun, 7 Aug 2022 10:40:25 +0800 Subject: [PATCH 086/154] =?UTF-8?q?=E5=88=86=E6=8B=86=E7=BF=BB=E8=AF=91?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=88=B0=E5=8D=95=E7=8B=AC=E5=88=86=E6=94=AF?= =?UTF-8?q?=EF=BC=8C=E5=90=88=E5=B9=B6=E5=8E=9FPR=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E5=AE=A1=E6=A0=B8=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- get-started/_common/components/_overview.md | 29 ++++++++++++------- .../_common/components/_product_session.md | 19 +++++------- 2 files changed, 25 insertions(+), 23 deletions(-) diff --git a/get-started/_common/components/_overview.md b/get-started/_common/components/_overview.md index fd829dc0..e5b845f5 100644 --- a/get-started/_common/components/_overview.md +++ b/get-started/_common/components/_overview.md @@ -1,28 +1,35 @@ -A component is a program that runs on Fuchsia in its own sandbox. + +一个组件是一个运行在 Fuchsia 沙盒中的程序。每个组件都是一个可组合的模块,依据各自功能与其它组件交互。Fuchsia 中所有软件都被定义为组件,除了内核、引导进程以及组件管理器。 -Fuchsia's component framework is responsible for running nearly all user space + +Fuchsia 的组件框架致力于让系统可以运行几乎所有的用户空间软件。组件管理器是一个系统进程,负责协调各个组件实例的执行和生命周期、维护组件拓扑、给组件提供相应功能,并使它们彼此隔离。 -Components obtain privileges to access various parts of the wider system through + +组件通过功能获得访问更广泛系统的各个部分的特权。每个组件都可以声明它们提供给系统的新功能以及需要其他组件(或框架)提供的功能。组件管理器解析并验证组件间的所有功能请求,以确保它们与组件已被正确授予的功能相匹配。 diff --git a/get-started/_common/components/_product_session.md b/get-started/_common/components/_product_session.md index 9c87a511..d776e8c1 100644 --- a/get-started/_common/components/_product_session.md +++ b/get-started/_common/components/_product_session.md @@ -1,20 +1,15 @@ - -## 会话框架 +## Session framework - -会话是一系列封装了产品用户体验的组件。会话框架充当 Fuchsia 平台和产品级用户交互之间的边界。每个 Fuchsia 产品都将单个会话实例定义为产品体验的根,并可能管理其他子组件。 +additional child components. - - -`session_manager` 平台组件在启动时打开会话组件,并为其提供一组固定的功能,以支持诸如窗口管理、输入事件处理或可访问元素的会话框架 API。 +accessibility. - -注: 要获取关于会话框架的更多细节,请参阅[会话框架介绍](/concepts/session/introduction.md). +Note: For more details on the session framework, see +[Introduction to the session framework](/concepts/session/introduction.md). From 4ece22462f13c4e275101f58f3c8eaacb4e5a849 Mon Sep 17 00:00:00 2001 From: Eric X Date: Sun, 7 Aug 2022 11:34:01 +0800 Subject: [PATCH 087/154] =?UTF-8?q?=E5=88=86=E6=8B=86=E7=BF=BB=E8=AF=91?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=88=B0=E5=8D=95=E7=8B=AC=E5=88=86=E6=94=AF?= =?UTF-8?q?=EF=BC=8C=E5=90=88=E5=B9=B6=E5=8E=9FPR=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E5=AE=A1=E6=A0=B8=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- get-started/_common/components/_overview.md | 29 ++---- get-started/explore_fuchsia.md | 109 ++++++++++++++------ 2 files changed, 87 insertions(+), 51 deletions(-) diff --git a/get-started/_common/components/_overview.md b/get-started/_common/components/_overview.md index e5b845f5..fd829dc0 100644 --- a/get-started/_common/components/_overview.md +++ b/get-started/_common/components/_overview.md @@ -1,35 +1,28 @@ - -一个组件是一个运行在 Fuchsia 沙盒中的程序。每个组件都是一个可组合的模块,依据各自功能与其它组件交互。Fuchsia 中所有软件都被定义为组件,除了内核、引导进程以及组件管理器。 +except for the kernel image, bootstrapping processes, and the Component Manager. - -Fuchsia 的组件框架致力于让系统可以运行几乎所有的用户空间软件。组件管理器是一个系统进程,负责协调各个组件实例的执行和生命周期、维护组件拓扑、给组件提供相应功能,并使它们彼此隔离。 +from one another. - -组件通过功能获得访问更广泛系统的各个部分的特权。每个组件都可以声明它们提供给系统的新功能以及需要其他组件(或框架)提供的功能。组件管理器解析并验证组件间的所有功能请求,以确保它们与组件已被正确授予的功能相匹配。 +has been properly granted. diff --git a/get-started/explore_fuchsia.md b/get-started/explore_fuchsia.md index c1e32ae8..7a9d302c 100644 --- a/get-started/explore_fuchsia.md +++ b/get-started/explore_fuchsia.md @@ -1,85 +1,119 @@ -# Explore Fuchsia {#explore-fuchsia} + +# 探索 Fuchsia {#explore-fuchsia} -Once you have Fuchsia up and running on a device or emulator, -check out the following resources: + +在设备或模拟器上启动并运行 Fuchsia 后,请查看以下资源: -* [Run ffx commands](#run-ffx-commands). + +* [运行 ffx 命令](#run-ffx-commands). +* [运行示例程序](#run-examples). +* [创建 Fuchsia 组件](#create-fuchsia-components). +* [贡献修订](#contribute-changes). -## Run ffx commands {#run-ffx-commands} + +## 运行 ffx 命令 {#run-ffx-commands} -[`ffx`][ffx-overview] is a host tool for Fuchsia target workflows that + +[`ffx`][ffx-overview] 是 Fuchsia 目标工作流的主机工具,为所有 Fuchsia 环境和主机平台上提供一致的开发体验。 -The following are some of `ffx` command examples: + +以下是一些 `ffx` 命令示例: -* Display the list of devices: + +* 显示设备列表: ```posix-terminal ffx target list ``` -* Display the device information: + +* 显示设备信息: ```posix-terminal ffx target show ``` -* Print the device logs: + +* 输出设备日志: ```posix-terminal ffx log ``` -* Reboot the device: + +* 重启设备: ```posix-terminal ffx target reboot ``` -## Run examples {#run-examples} + +## 运行示例 -To try out Fuchsia's sample software, check out the guides below: + +要试用 Fuchsia 的样例程序,请参考如下指南: -* [Run an example component](/development/run/run-examples.md) + +* [运行样例组件](/development/run/run-examples.md) +* [运行测试组件](/development/run/run-test-component.md) +* [运行端到端测试](/development/testing/run_an_end_to_end_test.md) -## Create Fuchsia components {#create-fuchsia-components} + +## 创建 Fuchsia 组件 {#create-fuchsia-components} -The basic executable units of software in Fuchsia are + +Fuchsia 中最小可运行软件单元是[组件](/concepts/components/v2),这些组件通过 +[FIDL](/concepts/fidl/overview.md)(Fuchsia 接口定义语言)协议彼此交互。 -To learn more about Fuchsia components and FIDL, check out the guides below: + +要想了解更多有关 Fuchsia 组件和 FIDL 的信息,参考如下指南: -* [Build components](/development/components/build.md) + +* [构建组件](/development/components/build.md) +* [FIDL 概览](/development/languages/fidl/README.md) +* [FIDL 教程](/development/languages/fidl/tutorials/overview.md) -## Contribute changes {#contribute-changes} + +## 贡献更改 {#contribute-changes} -When you're ready to contribute to the Fuchsia project, -see [Contribute changes][contribute-changes]. + +当您准备好为 Fuchsia 项目做出贡献时,请参阅[贡献更改][contribute-changes]。 -## See also + +## 参阅 -For more information on Fuchsia's development workflows, -check out the following resources: + +要获取关于 Fuchsia 开发流程的更多信息,请参阅下列资源: -* [fx workflows](/development/build/fx.md) + +* [fx 工作流程](/development/build/fx.md) +* [工作流程技巧和问题](/development/source_code/workflow_tips_and_faq.md) +* [配置编辑器](/development/editors/) +* [源码规划](/development/source_code/layout.md) +* [构建系统](/development/build/build_system/index.md) -[components]: /concepts/components/v2 + +[组件]: /concepts/components/v2 +[运行示例程序]: /development/run/run-examples.md +[ffx 命令概览]: /development/tools/ffx/overview.md +[fidl]: /development/languages/fidl +[fidl 指南]: /development/languages/fidl/tutorials/overview.md +[fidl 概念]: /concepts/fidl/overview.md +[运行 fuchsia 测试]: /development/testing/run_fuchsia_tests.md +[scenic]: /concepts/ui/scenic/index.md +[贡献更改]: /development/source_code/contribute_changes.md From 67336c9d54dad4cff62bb00464546e646048d498 Mon Sep 17 00:00:00 2001 From: Eric X Date: Sun, 7 Aug 2022 12:00:20 +0800 Subject: [PATCH 088/154] =?UTF-8?q?=E5=88=86=E6=8B=86=E5=88=B0=E5=8D=95?= =?UTF-8?q?=E7=8B=AC=E5=88=86=E6=94=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../_common/intro/_components_intro.md | 24 ++-- get-started/explore_fuchsia.md | 109 ++++++------------ 2 files changed, 49 insertions(+), 84 deletions(-) diff --git a/get-started/_common/intro/_components_intro.md b/get-started/_common/intro/_components_intro.md index fbdc8fe7..f4aef32b 100644 --- a/get-started/_common/intro/_components_intro.md +++ b/get-started/_common/intro/_components_intro.md @@ -1,20 +1,28 @@ -**Components** are the foundational building blocks of software running in + +**组件**是 Fuchsia 中运行的软件的基石。每一个组件都是可以组合的沙盒模块,相互之间通过功能交互。这提高了系统安全性并在各个组件之间建立了清晰的接口,使它们更容易更新或替换。 -In Fuchsia, **everything is a component** (almost). Recall from the previous + +Fuchsia 中**一切都是组件**(几乎)。回想一下之前对 Zircon 的讨论,内核有意设计得很小,大多数核心服务都是在用户空间中实现。这意味着在 Fuchsia 上运行的大多数软件都是采用组件框架实现的,包括: -* User-facing applications + +* 面向用户的应用 +* 设备驱动 +* 文件系统 +* 媒体编解码器 +* 网络栈 -Outside the kernel there are only a few low-level exceptions not using the -component framework, such as bootloaders and the `userboot` process. + +内核之外只有少数不使用组件框架的底层例外,如引导程序和 `userboot` 进程。 diff --git a/get-started/explore_fuchsia.md b/get-started/explore_fuchsia.md index 7a9d302c..c1e32ae8 100644 --- a/get-started/explore_fuchsia.md +++ b/get-started/explore_fuchsia.md @@ -1,119 +1,85 @@ - -# 探索 Fuchsia {#explore-fuchsia} +# Explore Fuchsia {#explore-fuchsia} - -在设备或模拟器上启动并运行 Fuchsia 后,请查看以下资源: +Once you have Fuchsia up and running on a device or emulator, +check out the following resources: - -* [运行 ffx 命令](#run-ffx-commands). -* [运行示例程序](#run-examples). -* [创建 Fuchsia 组件](#create-fuchsia-components). -* [贡献修订](#contribute-changes). +* [Contribute changes](#contribute-changes). - -## 运行 ffx 命令 {#run-ffx-commands} +## Run ffx commands {#run-ffx-commands} - -[`ffx`][ffx-overview] 是 Fuchsia 目标工作流的主机工具,为所有 Fuchsia 环境和主机平台上提供一致的开发体验。 +and host platforms. - -以下是一些 `ffx` 命令示例: +The following are some of `ffx` command examples: - -* 显示设备列表: +* Display the list of devices: ```posix-terminal ffx target list ``` - -* 显示设备信息: +* Display the device information: ```posix-terminal ffx target show ``` - -* 输出设备日志: +* Print the device logs: ```posix-terminal ffx log ``` - -* 重启设备: +* Reboot the device: ```posix-terminal ffx target reboot ``` - -## 运行示例 +## Run examples {#run-examples} - -要试用 Fuchsia 的样例程序,请参考如下指南: +To try out Fuchsia's sample software, check out the guides below: - -* [运行样例组件](/development/run/run-examples.md) -* [运行测试组件](/development/run/run-test-component.md) -* [运行端到端测试](/development/testing/run_an_end_to_end_test.md) +* [Run an end-to-end test](/development/testing/run_an_end_to_end_test.md) - -## 创建 Fuchsia 组件 {#create-fuchsia-components} +## Create Fuchsia components {#create-fuchsia-components} - -Fuchsia 中最小可运行软件单元是[组件](/concepts/components/v2),这些组件通过 -[FIDL](/concepts/fidl/overview.md)(Fuchsia 接口定义语言)协议彼此交互。 +(Fuchsia Interface Definition Language) protocols. - -要想了解更多有关 Fuchsia 组件和 FIDL 的信息,参考如下指南: +To learn more about Fuchsia components and FIDL, check out the guides below: - -* [构建组件](/development/components/build.md) -* [FIDL 概览](/development/languages/fidl/README.md) -* [FIDL 教程](/development/languages/fidl/tutorials/overview.md) +* [FIDL tutorials](/development/languages/fidl/tutorials/overview.md) - -## 贡献更改 {#contribute-changes} +## Contribute changes {#contribute-changes} - -当您准备好为 Fuchsia 项目做出贡献时,请参阅[贡献更改][contribute-changes]。 +When you're ready to contribute to the Fuchsia project, +see [Contribute changes][contribute-changes]. - -## 参阅 +## See also - -要获取关于 Fuchsia 开发流程的更多信息,请参阅下列资源: +For more information on Fuchsia's development workflows, +check out the following resources: - -* [fx 工作流程](/development/build/fx.md) -* [工作流程技巧和问题](/development/source_code/workflow_tips_and_faq.md) -* [配置编辑器](/development/editors/) -* [源码规划](/development/source_code/layout.md) -* [构建系统](/development/build/build_system/index.md) +* [Build system](/development/build/build_system/index.md) - [fidl-concepts]: /concepts/fidl/overview.md [run-fuchsia-tests]: /development/testing/run_fuchsia_tests.md [scenic]: /concepts/ui/scenic/index.md -[contribute-changes]: /development/source_code/contribute_changes.md --> -[组件]: /concepts/components/v2 -[运行示例程序]: /development/run/run-examples.md -[ffx 命令概览]: /development/tools/ffx/overview.md -[fidl]: /development/languages/fidl -[fidl 指南]: /development/languages/fidl/tutorials/overview.md -[fidl 概念]: /concepts/fidl/overview.md -[运行 fuchsia 测试]: /development/testing/run_fuchsia_tests.md -[scenic]: /concepts/ui/scenic/index.md -[贡献更改]: /development/source_code/contribute_changes.md +[contribute-changes]: /development/source_code/contribute_changes.md From c585fb14786838a41c560eb6ccf21c4bbc522c46 Mon Sep 17 00:00:00 2001 From: y2-Whyto Date: Mon, 8 Aug 2022 12:30:25 +0800 Subject: [PATCH 089/154] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20capability?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- glossary-translation.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/glossary-translation.md b/glossary-translation.md index 1c5049f6..6b08568d 100644 --- a/glossary-translation.md +++ b/glossary-translation.md @@ -24,6 +24,7 @@ | best practice | 最佳做法 | G & i | | board | 板型 | i | | build | 构建 | G | +| capability | 能力 | i | | caveats | 注意事项 | G | | cleanup | 清理 | G | | compile | 编译 | G | @@ -80,7 +81,7 @@ | unmount | 卸载 | G | | URL | 网址 | G | | validate | 验证 | G | -| Next steps | 后续步骤 | G | +| Next steps | 后续步骤 | G | ## 文档中未出现术语的翻译参考表 From daa955a9cccad29a9ddfbd82fd3151e69222ab57 Mon Sep 17 00:00:00 2001 From: y2-Whyto Date: Mon, 8 Aug 2022 17:22:16 +0800 Subject: [PATCH 090/154] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20accessibility?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- glossary-translation.md | 1 + 1 file changed, 1 insertion(+) diff --git a/glossary-translation.md b/glossary-translation.md index 6b08568d..4a774ebf 100644 --- a/glossary-translation.md +++ b/glossary-translation.md @@ -12,6 +12,7 @@ | 英文原文 | 中文翻译对应词 | 备注 | | ------------------------------ | ---------------------- | ----------------------------------------------------- | +| accessibility | 无障碍功能 | G | | application | 应用
应用程序 | | | ArchiveAccessor | 档案访问器 | i | | archivist | 归档器 | i | From 0451b8358b1b3a4446f5b29fea7714875c442e17 Mon Sep 17 00:00:00 2001 From: wwvm <51313548+wwvm@users.noreply.github.com> Date: Mon, 8 Aug 2022 19:03:03 +0800 Subject: [PATCH 091/154] Update get-started/explore_fuchsia.md Co-authored-by: y2-Whyto --- get-started/explore_fuchsia.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/get-started/explore_fuchsia.md b/get-started/explore_fuchsia.md index 7a9d302c..1e6a5dcd 100644 --- a/get-started/explore_fuchsia.md +++ b/get-started/explore_fuchsia.md @@ -10,7 +10,7 @@ check out the following resources: --> * [Create Fuchsia components](#create-fuchsia-components). * [Contribute changes](#contribute-changes). --> * [运行 ffx 命令](#run-ffx-commands). -* [运行示例程序](#run-examples). +* [运行示例](#run-examples). * [创建 Fuchsia 组件](#create-fuchsia-components). * [贡献修订](#contribute-changes). From 2ecb33ac67f89b08d9110d558749aa5153cecf0a Mon Sep 17 00:00:00 2001 From: wwvm <51313548+wwvm@users.noreply.github.com> Date: Mon, 8 Aug 2022 19:03:24 +0800 Subject: [PATCH 092/154] Update get-started/explore_fuchsia.md Co-authored-by: y2-Whyto --- get-started/explore_fuchsia.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/get-started/explore_fuchsia.md b/get-started/explore_fuchsia.md index 1e6a5dcd..566798d4 100644 --- a/get-started/explore_fuchsia.md +++ b/get-started/explore_fuchsia.md @@ -62,7 +62,7 @@ and host platforms. --> -* [运行样例组件](/development/run/run-examples.md) +* [运行示例组件](/development/run/run-examples.md) * [运行测试组件](/development/run/run-test-component.md) * [运行端到端测试](/development/testing/run_an_end_to_end_test.md) From 90659b70748c10ae9b3976e07ee11f71543c86e6 Mon Sep 17 00:00:00 2001 From: wwvm <51313548+wwvm@users.noreply.github.com> Date: Mon, 8 Aug 2022 19:03:41 +0800 Subject: [PATCH 093/154] Update get-started/explore_fuchsia.md Co-authored-by: y2-Whyto --- get-started/explore_fuchsia.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/get-started/explore_fuchsia.md b/get-started/explore_fuchsia.md index 566798d4..30abce12 100644 --- a/get-started/explore_fuchsia.md +++ b/get-started/explore_fuchsia.md @@ -73,7 +73,7 @@ and host platforms. --> [components](/concepts/components/v2), and these components interact with each other using [FIDL](/concepts/fidl/overview.md) (Fuchsia Interface Definition Language) protocols. --> -Fuchsia 中最小可运行软件单元是[组件](/concepts/components/v2),这些组件通过 +Fuchsia 中软件的最小可执行单元是[组件](/concepts/components/v2),这些组件通过 [FIDL](/concepts/fidl/overview.md)(Fuchsia 接口定义语言)协议彼此交互。 From 64e4708d4f9e52505a29ac86e830b5fbc2293fd9 Mon Sep 17 00:00:00 2001 From: wwvm <51313548+wwvm@users.noreply.github.com> Date: Mon, 8 Aug 2022 19:03:55 +0800 Subject: [PATCH 094/154] Update get-started/explore_fuchsia.md Co-authored-by: y2-Whyto --- get-started/explore_fuchsia.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/get-started/explore_fuchsia.md b/get-started/explore_fuchsia.md index 30abce12..b9475766 100644 --- a/get-started/explore_fuchsia.md +++ b/get-started/explore_fuchsia.md @@ -12,7 +12,7 @@ check out the following resources: --> * [运行 ffx 命令](#run-ffx-commands). * [运行示例](#run-examples). * [创建 Fuchsia 组件](#create-fuchsia-components). -* [贡献修订](#contribute-changes). +* [贡献更改](#contribute-changes). ## 运行 ffx 命令 {#run-ffx-commands} From 11722afae948b333819f93946b60644579493bfd Mon Sep 17 00:00:00 2001 From: wwvm <51313548+wwvm@users.noreply.github.com> Date: Mon, 8 Aug 2022 19:04:06 +0800 Subject: [PATCH 095/154] Update get-started/explore_fuchsia.md Co-authored-by: y2-Whyto --- get-started/explore_fuchsia.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/get-started/explore_fuchsia.md b/get-started/explore_fuchsia.md index b9475766..9eb990da 100644 --- a/get-started/explore_fuchsia.md +++ b/get-started/explore_fuchsia.md @@ -77,7 +77,7 @@ Fuchsia 中软件的最小可执行单元是[组件](/concepts/components/v2), [FIDL](/concepts/fidl/overview.md)(Fuchsia 接口定义语言)协议彼此交互。 -要想了解更多有关 Fuchsia 组件和 FIDL 的信息,参考如下指南: +要想了解更多有关 Fuchsia 组件和 FIDL 的信息,请参考如下指南: * [fx 工作流程](/development/build/fx.md) * [工作流程技巧和问题](/development/source_code/workflow_tips_and_faq.md) * [配置编辑器](/development/editors/) -* [源码规划](/development/source_code/layout.md) +* [源代码布局](/development/source_code/layout.md) * [构建系统](/development/build/build_system/index.md) From c4642b1acdc7e5fd5dd7d31d262b617e40d5ec01 Mon Sep 17 00:00:00 2001 From: wwvm <51313548+wwvm@users.noreply.github.com> Date: Mon, 8 Aug 2022 19:04:44 +0800 Subject: [PATCH 097/154] Update get-started/explore_fuchsia.md Co-authored-by: y2-Whyto --- get-started/explore_fuchsia.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/get-started/explore_fuchsia.md b/get-started/explore_fuchsia.md index 418ff75c..810672b1 100644 --- a/get-started/explore_fuchsia.md +++ b/get-started/explore_fuchsia.md @@ -113,7 +113,7 @@ check out the following resources: --> - [fidl-concepts]: /concepts/fidl/overview.md [run-fuchsia-tests]: /development/testing/run_fuchsia_tests.md [scenic]: /concepts/ui/scenic/index.md -[contribute-changes]: /development/source_code/contribute_changes.md --> -[组件]: /concepts/components/v2 -[运行示例程序]: /development/run/run-examples.md -[ffx 命令概览]: /development/tools/ffx/overview.md -[fidl]: /development/languages/fidl -[fidl 指南]: /development/languages/fidl/tutorials/overview.md -[fidl 概念]: /concepts/fidl/overview.md -[运行 fuchsia 测试]: /development/testing/run_fuchsia_tests.md -[scenic]: /concepts/ui/scenic/index.md -[贡献更改]: /development/source_code/contribute_changes.md +[contribute-changes]: /development/source_code/contribute_changes.md From eb8f6591c9415bf87e3354fd3d22eeffd0593e0b Mon Sep 17 00:00:00 2001 From: wwvm <51313548+wwvm@users.noreply.github.com> Date: Mon, 8 Aug 2022 19:08:47 +0800 Subject: [PATCH 099/154] Update get-started/_common/components/_product_session.md Co-authored-by: y2-Whyto --- get-started/_common/components/_product_session.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/get-started/_common/components/_product_session.md b/get-started/_common/components/_product_session.md index 9c87a511..83726bc2 100644 --- a/get-started/_common/components/_product_session.md +++ b/get-started/_common/components/_product_session.md @@ -6,7 +6,7 @@ session framework serves as a boundary between the Fuchsia platform and the product-level user interaction. Each Fuchsia product defines a single session instance as the root of the product experience, which may or may not manage additional child components. --> -会话是一系列封装了产品用户体验的组件。会话框架充当 Fuchsia 平台和产品级用户交互之间的边界。每个 Fuchsia 产品都将单个会话实例定义为产品体验的根,并可能管理其他子组件。 +会话是一系列封装了产品用户体验的组件。会话框架充当 Fuchsia 平台和产品级用户之间交流的边界。每个 Fuchsia 产品都将单个会话实例定义为产品体验的根,它可能管理,也可能不管理其他子组件。 and offers it a fixed set of capabilities necessary to support the session framework APIs for elements such as window management, input event handling, or accessibility. --> -`session_manager` 平台组件在启动时打开会话组件,并为其提供一组固定的功能,以支持诸如窗口管理、输入事件处理或可访问元素的会话框架 API。 +`session_manager` 平台组件在启动时打开会话组件,并为其提供一组固定的功能,以支持诸如窗口管理、输入事件处理或无障碍功能等元素的会话框架 API。 From a8e09fc0183713af52321b0e29781fb7ddeaf9e6 Mon Sep 17 00:00:00 2001 From: tabidachinokaze Date: Tue, 9 Aug 2022 00:55:08 +0800 Subject: [PATCH 101/154] =?UTF-8?q?capability=20/=20capabilities=20?= =?UTF-8?q?=E7=BF=BB=E8=AF=91=E6=9B=BF=E6=8D=A2=E4=B8=BA=E8=83=BD=E5=8A=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../_common/components/_organizing_intro.md | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/get-started/_common/components/_organizing_intro.md b/get-started/_common/components/_organizing_intro.md index 8be5db0c..b23dbc34 100644 --- a/get-started/_common/components/_organizing_intro.md +++ b/get-started/_common/components/_organizing_intro.md @@ -6,7 +6,7 @@ with capabilities. At the same time, child components can expose capabilities back to the parent. These component instance and capability relationships make up the **component topology**. --> -系统中的所有组件组成一个有根的**组件实例树**。树中的父组件负责将其他组件的实例声明为其子组件并为它们提供功能。同时,子组件可以向父组件公开功能。这些组件实例和功能关系构成了**组件拓扑**。 +系统中的所有组件组成一个有根的**组件实例树**。树中的父组件负责将其他组件的实例声明为其子组件并为它们提供能力。同时,子组件可以向父组件公开能力。这些组件实例和能力关系构成了**组件拓扑**。 -任何父组件及其所有子组件在树中形成一个称为**领域**的组。领域使父级能够控制哪些功能流入和流出其组件的子树,从而创建功能边界。这种封装允许领域在内部进行重组,而不会影响依赖于其公开功能的外部组件。 +任何父组件及其所有子组件在树中形成一个称为**领域**的组。领域使父级能够控制那些能力流入和流出其组件的子树,从而创建能力边界。这种封装允许领域在内部进行重组,而不会影响依赖于其公开能力的外部组件。 -![图表展示了组件实例被组织成一个树,父组件通过“功能路由”确定每个子组件可用的功能。](/get-started/images/components/component-topology.png){: width="616"} +![图表展示了组件实例被组织成一个树,父组件通过“能力路由”确定每个子组件可用的能力。](/get-started/images/components/component-topology.png){: width="616"} -在上图中,`fuchsia.example.Foo` 协议功能通过组件实例树从提供者路由到客户端。组件使用 `use` 关键字声明它们**需要**的功能: +在上图中,`fuchsia.example.Foo` 协议能力通过组件实例树从提供者路由到客户端。组件使用 `use` 关键字声明它们**需要**的能力: -组件使用组件清单中的 `capabilities` 部分声明它们实现或**提供**的功能。这使得组件框架知道该功能和它的提供者。请查看下面的 `provider.cml` 示例: +组件使用组件清单中的 `capabilities` 部分声明它们实现或**提供**的能力。这使得组件框架知道该能力和它的提供者。请查看下面的 `provider.cml` 示例: -`expose` 关键字使这个组件的功能通过它的父组件向其他领域提供,这也可能包括这个组件的子组件提供的功能。在这种情况下,功能的来源是 `self`,因为这个组件是提供者。 +`expose` 关键字使这个组件的能力通过它的父组件向其他领域提供,这也可能包括这个组件的子组件提供的能力。在这种情况下,能力的来源是 `self`,因为这个组件是提供者。 -父组件控制领域内的**功能路由**,创建从客户端组件到提供者的显式路径。请查看以下 `parent.cml` 清单示例: +父组件控制领域内的**能力路由**,创建从客户端组件到提供者的显式路径。请查看以下 `parent.cml` 清单示例: ```json5 { @@ -178,7 +178,7 @@ enables multiple components in the topology to provide the same capability, as the component framework relies on explicit routes to determine how to resolve the requests from each client. --> -父组件在领域中声明一组子组件,并使用 `offer` 关键字将功能路由到它们。用这种方法,父组件就决定了每个子组件功能的范围和来源。这也使拓扑中的多个组件能够提供相同的功能,因为组件框架依赖于显式路由来确定如何解析来自每个客户端的请求。 +父组件在领域中声明一组子组件,并使用 `offer` 关键字将能力路由到它们。用这种方法,父组件就决定了每个子组件能力的范围和来源。这也使拓扑中的多个组件能够提供相同的能力,因为组件框架依赖于显式路由来确定如何解析来自每个客户端的请求。 -* **静态地**:该实例在组件清单中被声明为树中另一个组件的子组件。静态组件仅当一个更新更改组件拓扑时才会创建和销毁。 +* **静态地**:该实例在组件清单中被声明为树中另一个组件的子组件。静态组件仅当一个更新改变了组件拓扑时才会创建和销毁。 -框架会启动一个组件实例当另一个组件尝试打开一个通道到该组件实例时——这称为**绑定**。当连接到一个由组件公开的能力时,绑定会**隐式**发生。绑定到已经启动的组件会连接到当前运行的实例。 +当一个组件尝试打开到另一组件的通道时(这称为**绑定**(binding)),框架会启动后者的一个组件实例。当连接到由组件所暴露的能力时,绑定会**隐式**发生。对已经启动的组件进行绑定,会连接到其当前运行的实例。 -组件可能会通过退出程序(由组件的 `runner` 定义)自行停止,或者框架可能会在系统关闭时停止组件。在被销毁之前,框架将组件移动到**关闭**状态以指示它不能再次启动。 +组件可能会通过退出程序(由组件的 `runner` 定义)自行停止,或者可能由框架在系统关闭时停止。在被销毁之前,框架将组件移动到**关闭**状态以表示它不能再次启动。 -`test_manager` 组件负责在 Fuchsia 设备上运行测试。它检查实现测试套件协议的组件,并将它们作为子组件启动。这意味着 `test_manager` 也负责为每个测试套件提供能力,即创建通常称为**测试领域**的东西。 +`test_manager` 组件负责在 Fuchsia 设备上运行测试。它检查实现测试套件协议的组件,并将它们作为子组件启动。这意味着 `test_manager` 也负责为每个测试套件提供能力,即创建通常所谓的**测试领域**。 -`ffx test` 等开发者工具与设备上的 `test_manager` 进行通信,以执行测试套件并检索结果。 +`ffx test` 等开发者工具与设备上的 `test_manager` 进行通信,以执行测试套件并取回结果。 From b2e6dc6fc135d1aee34749b8bec5528ae00d2723 Mon Sep 17 00:00:00 2001 From: cwolf9 <2717232422@qq.com> Date: Tue, 9 Aug 2022 09:18:14 +0800 Subject: [PATCH 104/154] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=B8=8D=E5=B8=B8?= =?UTF-8?q?=E8=A7=81=E5=8D=95=E8=AF=8D=E7=9A=84=E7=BF=BB=E8=AF=91=E6=A0=87?= =?UTF-8?q?=E6=B3=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- get-started/_common/fidl/_testing_intro.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/get-started/_common/fidl/_testing_intro.md b/get-started/_common/fidl/_testing_intro.md index 159e3aa8..20be291d 100644 --- a/get-started/_common/fidl/_testing_intro.md +++ b/get-started/_common/fidl/_testing_intro.md @@ -7,4 +7,4 @@ and other dependencies as children. Depending on the nature of the test, dependency components may be provided as mocks or stubs to promote that the test cases remain hermetic. --> -[集成测试](https://en.wikipedia.org/wiki/Integration_testing){:.external} 侧重于验证组件的行为,因为它会与系统上其他组件进行交互。正因为如此,集成测试通常与主组件分开构建,并且可以将被测组件和其他依赖组件声明为子组件。根据测试的性质,依赖组件可以作为模拟或存根提供,以促进测试用例保持封闭性。 +[集成测试](https://en.wikipedia.org/wiki/Integration_testing){:.external} 侧重于验证组件的行为,因为它会与系统上其他组件进行交互。正因为如此,集成测试通常与主组件分开构建,并且可能将被测组件和其他依赖组件声明为子组件。根据测试的性质,依赖组件可以作为模拟(mock)或存根(stub)提供,以促进测试用例保持封闭性。 From d6d26aa755b5eec72208c70acedb3505c4e9a40a Mon Sep 17 00:00:00 2001 From: y2-Whyto Date: Tue, 9 Aug 2022 20:21:50 +0800 Subject: [PATCH 105/154] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20job?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://developer.android.com/kotlin/coroutines/coroutines-adv --- glossary-translation.md | 1 + 1 file changed, 1 insertion(+) diff --git a/glossary-translation.md b/glossary-translation.md index 4a774ebf..4d0bf7a0 100644 --- a/glossary-translation.md +++ b/glossary-translation.md @@ -52,6 +52,7 @@ | in-tree | 树内 | G
此处指源码树 | | infrastructure | 基础架构 | G | | inspect | 审视 | Fuchsia 专有名词
i | +| job | 作业 | G | | just-in-time (JIT) compilation | 即时(JIT)编译 | G | | moniker | 代称 | i | | mount | 装载 | G | From efb6573aaa588b2a2179570a755bf7a59d3503ec Mon Sep 17 00:00:00 2001 From: y2-Whyto Date: Tue, 9 Aug 2022 20:38:04 +0800 Subject: [PATCH 106/154] parse, parser --- glossary-translation.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/glossary-translation.md b/glossary-translation.md index 4d0bf7a0..cd8b978c 100644 --- a/glossary-translation.md +++ b/glossary-translation.md @@ -58,6 +58,8 @@ | mount | 装载 | G | | namespace | 命名空间 | G | | out-of-tree | 树外 | G
此处指源码树 | +| parse | 解析 | G | +| parser | 解析器 | G | | path | 路径 | G | | pave | 铺设 | i | | policy | 政策 | G | From a2574ef4db918e04f84e51257fc84393f1314864 Mon Sep 17 00:00:00 2001 From: y2-Whyto Date: Tue, 9 Aug 2022 21:13:37 +0800 Subject: [PATCH 107/154] realm --- glossary-translation.md | 1 + 1 file changed, 1 insertion(+) diff --git a/glossary-translation.md b/glossary-translation.md index cd8b978c..89755e05 100644 --- a/glossary-translation.md +++ b/glossary-translation.md @@ -66,6 +66,7 @@ | prerequisites | 前提条件 | G | | product | 产品 | i & G | | proxy | 代理 | | +| realm | 领域 | i | | remote | 远程 | | | robust | 可靠的 | G | | sandbox | 沙盒 | G | From 6c4d45e0adeed37d66a305b2f3481437f462ea79 Mon Sep 17 00:00:00 2001 From: y2-Whyto Date: Tue, 9 Aug 2022 21:45:58 +0800 Subject: [PATCH 108/154] expose https://support.google.com/cloudidentity/answer/9167101?hl=zh-Hans https://support.google.com/tagmanager/answer/7683362?hl=zh-Hans --- glossary-translation.md | 1 + 1 file changed, 1 insertion(+) diff --git a/glossary-translation.md b/glossary-translation.md index 89755e05..ced0929b 100644 --- a/glossary-translation.md +++ b/glossary-translation.md @@ -40,6 +40,7 @@ | ergonomics | 工效学 | i & G | | escalate | 上报 | G | | execute-only memory | 只执行内存 | G | +| expose | 公开
显示 | G
具体选择取决于语境,亦有“公开显示”译法 | | fault injection | 故障注入 | G | | fully qualified URL | 完全限定的网址 | G | | get stared | 使用入门
入门 | G
前者更常用 | From f74220f76f74148e3da368df56280dcd3322302f Mon Sep 17 00:00:00 2001 From: tabidachinokaze Date: Wed, 10 Aug 2022 03:01:30 +0800 Subject: [PATCH 109/154] update --- get-started/_common/components/_organizing_intro.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/get-started/_common/components/_organizing_intro.md b/get-started/_common/components/_organizing_intro.md index b23dbc34..8ef85e7c 100644 --- a/get-started/_common/components/_organizing_intro.md +++ b/get-started/_common/components/_organizing_intro.md @@ -184,4 +184,4 @@ the requests from each client. Note: For more details on component organization, see [Component topology](/concepts/components/v2/topology.md). --> -注意:要获取关于组件组织的更多详细信息,请参阅[组件拓扑](/concepts/components/v2/topology.md). +注意:要获取关于组件组织的更多详细信息,请参阅[组件拓扑](/concepts/components/v2/topology.md)。 From ebe0f88a3775212371c1b96035b77618e69cf71a Mon Sep 17 00:00:00 2001 From: wy Date: Wed, 10 Aug 2022 22:24:20 +0800 Subject: [PATCH 110/154] get_fuchsia_source.md file review --- get-started/get_fuchsia_source.md | 88 +++++++++++++++++-------------- 1 file changed, 48 insertions(+), 40 deletions(-) diff --git a/get-started/get_fuchsia_source.md b/get-started/get_fuchsia_source.md index 4ad24397..cd7212b3 100644 --- a/get-started/get_fuchsia_source.md +++ b/get-started/get_fuchsia_source.md @@ -1,13 +1,13 @@ -# 下载 Fuchsia 源码 +# 下载 Fuchsia 源代码 -本指南说明了如何下载 Fuchsia 源码以及在您的机器上部署开发环境。 +本指南说明了如何下载 Fuchsia 源代码以及在您的机器上部署开发环境。 @@ -21,7 +21,7 @@ The steps are: --> 1. [执行预检查](#perform-a-preflight-check). 2. [安装必备软件包](#install-prerequisite-packages). -3. [下载 Fuchsia 源码](#download-the-fuchsia-source-code). +3. [下载 Fuchsia 源代码](#download-the-fuchsia-source-code). 4. [设置环境变量](#set-up-environment-variables). 5. [配置防火墙规则(可选)](#configure-firewall-rules). @@ -35,13 +35,13 @@ Fuchsia provides a preflight check tool that examines your machine and informs you of any issues that may affect building Fuchsia from source on the machine. --> -Fuchsia 提供了一个预检工具([`ffx platform preflight`][ffx-platform-preflight]),这个工具可以测试您的机器,并会通知您任何在该机器上构建 Fuchsia 源码时会受影响的问题。 +Fuchsia 提供了一个预检查工具([`ffx platform preflight`][ffx-platform-preflight]),这个工具可以测试您的机器,并会通知您在该机器上可能会影响从源代码构建 Fuchsia 的任何问题。 -注意:这个预检测工具只支持 x64 架构。目前 Fuchsia 不保证在其他宿主架构上能构建成功,比如 Windows 和 ARM64。 +注意:这个预检查工具只支持 x64 架构。目前 Fuchsia 不保证在其他宿主架构上能构建成功,比如 Windows 和 ARM64。 @@ -67,19 +68,21 @@ Run the following command: Fuchsia requires `curl`, `file`, `unzip`, and `git` to be up to date. The version of `git` needs to be 2.28 or higher. --> -Fuchsia 要求 `curl`、 `file`、 `unzip` 以及 `git` 等工具是最新版。 `git` 版本要求 2.28 或以上。 +Fuchsia 要求 `curl`、 `file`、 `unzip` 以及 `git` 等工具是最新版。 `git` 版本需为 2.28 或以上。 * {Linux} + - 安装(或更新)下面的软件包: + 安装(或更新)以下软件包: ```posix-terminal sudo apt install curl file git unzip ``` * {macOS} + 安装 Xcode 命令行工具: - 注意:如果 `ffx platform preflight` 检测到 Xcode 工具已经安装,就可以跳过这一步。 + 注意:如果 `ffx platform preflight` 显示 Xcode 工具已经安装,则请跳过这一步。 ```posix-terminal xcode-select --install ``` + -## 3. 下载 Fuchsia 源码 {#download-the-fuchsia-source-code} +## 3. 下载 Fuchsia 源代码 {#download-the-fuchsia-source-code} -Fuchsia 提供了一个[引导脚本](/scripts/bootstrap),这个脚本会创建一个 `fuchsia` 的文件夹并把 Fuchsia 源码下载到这里。 +Fuchsia 提供了一个[引导脚本](/scripts/bootstrap),这个脚本会创建一个名为 `fuchsia` 的文件夹,并把 Fuchsia 源码下载到这里。 -下载 Fuchsia 源码要求您机器上有 2 GB 的存储空间。取决于您的构建配置,之后的构建 Fuchsia 过程则需要额外 80 到 90 GB 的存储空间。另外,下载过程中也会使用大量的内存。建议您在此过程中关闭其他非必要的程序进程。 +下载 Fuchsia 源码要求您机器上有大约 2 GB 的存储空间。根据您的构建配置,之后在构建 Fuchsia 时,您还额外需要 80 到 90 GB 的存储空间。另外,下载过程中也会使用大量的内存。建议您在此过程中关闭其他非必要的进程。 -下载 Fuchsia 源码,请按如下步骤: +要下载 Fuchsia 源代码,请执行如下步骤: -1. 选择一个 Fuchsia 源码下载目录,例如: +1. 选择一个 Fuchsia 源代码下载目录,例如: - 注意:您可以把 Fuchsia 下载到任何路径。本篇教程选择 `$HOME` 作为示例。 + 注意:您可以在任何目录下设置 Fuchsia。本指南选择 `$HOME` 作为示例。 ```posix-terminal cd $HOME ``` + 1. 运行引导脚本: - 注意:下载 Fuchsia 源码可能需要 60 分钟。 + 注意:下载 Fuchsia 源代码可能需要 60 分钟。 ```posix-terminal curl -s "https://fuchsia.googlesource.com/fuchsia/+/HEAD/scripts/bootstrap?format=TEXT" | base64 --decode | bash @@ -147,9 +152,9 @@ To download the Fuchsia source, do the following: bootstrapping process, see [Authentication error](#authentication-error) for help. --> - 这个脚本会创建 `fuchsia` 目录,并且下载源码。 + 这个脚本会创建 `fuchsia` 目录,并且下载源代码。 - 如果您在脚本运行期间看到了 `Invalid authentication credentials` 错误信息,参考[认证错误](#authentication-error)章节寻求帮助。 + 如果您在脚本运行期间看到了 `Invalid authentication credentials` 错误信息,请参考[认证错误](#authentication-error)章节寻求帮助。 -Fuchsia 建议您在 shell 的配置文件中添加如下几个配置: +Fuchsia 建议您按照如下操作更新 shell 配置文件: * 添加 `.jiri_root/bin` 目录到您的 `PATH` 环境变量 - Fuchsia 源码中的 `.jiri_root/bin` 目录包含了 [`jiri`](https://fuchsia.googlesource.com/jiri) 和 [`fx`](/development/build/fx.md) 工具,这些是 Fuchsia 工作流中的必备工具。Fuchsia 使用 `jiri` 工具在 Fuchsia 的项目中管理仓库,使用 `fx` 工具帮助配置、构建、运行以及调试 Fuchsia。Fuchsia 的工具链需要可以在您的 `PATH` 环境变量中找到 `jiri` 工具。 + Fuchsia 源码中的 `.jiri_root/bin` 目录包含了 [`jiri`](https://fuchsia.googlesource.com/jiri) 和 [`fx`](/development/build/fx.md) 工具,这些是 Fuchsia 工作流中的必备工具。Fuchsia 使用 `jiri` 工具在 Fuchsia 的项目中管理仓库,而 `fx` 工具能够帮助配置、构建、运行以及调试 Fuchsia。Fuchsia 的工具链需要可以在您的 `PATH` 环境变量中找到 `jiri` 工具。 -注意:如果您不想更新您的 shell 配置,参考附录[不更新 PATH 变量的情况下在 Fuchsia 上工作](#work-on-fuchsia-without-updating-your-path)。 +注意:如果您不想更新您的 shell 配置,则请参阅[在不更新 PATH 变量的情况下处理 Fuchsia](#work-on-fuchsia-without-updating-your-path)。 -为了更新您的 shell 配置文件来设置 Fuchsia 的环境变量,请按如下步骤: +要更新您的 shell 配置文件来设置 Fuchsia 的环境变量,请执行如下步骤: -1. 请用文本编辑器打开您的 `~/.bash_profile` 文件(参考如下示例,我们使用 [Nano][nano]{:.external} 文本编辑器) +1. 使用文本编辑器打开您的 `~/.bash_profile` 文件(在以下示例中,我们使用 [Nano][nano]{:.external} 文本编辑器): - 注意:本指南使用 `bash` 终端作为示例,如果您使用 `zsh` 的话,在如下步骤中请替换 `~/.bash_profile` 为 `~/.zprofile`: + 注意:本指南使用 `bash` 终端作为示例,如果您使用 `zsh`,请在后续步骤中请替换 `~/.bash_profile` 为 `~/.zprofile`: ```posix-terminal nano ~/.bash_profile ``` + 1. 在您的 `~/.bash_profile` 文件中添加如下配置: - 注意:如果您的 Fuchsia 源码不在 `~/fuchsia` 目录下,替换 `~/fuchsia` 为您的 Fuchsia 目录。 + 注意:如果您的 Fuchsia 源码不在 `~/fuchsia` 目录下,则请替换 `~/fuchsia` 为您的 Fuchsia 目录。 + ```sh export PATH=~/fuchsia/.jiri_root/bin:$PATH source ~/fuchsia/scripts/fx-env.sh ``` + @@ -235,16 +243,17 @@ do the following: -1. 更新环境变量,请运行如下命令: +1. 要更新环境变量,请运行如下命令: ```posix-terminal source ~/.bash_profile ``` + -1. 验证您是否可以运行如下命令且没有报错: +1. 验证您可以在您的 `fuchsia` 目录内运行如下命令且没有报错: ```posix-terminal jiri help @@ -264,9 +273,9 @@ recommended to ensure that Fuchsia's emulator instances run smoothly on Linux. (**Linux only**) If you're planning on running Fuchsia on Linux, it is advised to run the following command to allow Fuchsia-specific traffic on the host machine: --> -注意:这一步对构建或者运行 Fuchsia 并不是必需的。但是为了确保 Fuchsia 模拟器实例能在 Linux 上顺利运行是推荐的。 +注意:这一步对构建或者运行 Fuchsia 并不是必需的。但是推荐您进行该步骤,以确保 Fuchsia 模拟器实例能在 Linux 上流畅运行。 -(**仅限 Linux**) 如果您计划在 Linux 中运行 Fuchsia,建议您运行如下命令在宿主机上允许 Fuchsia 相关的流量: +(**仅限 Linux**) 如果您计划在 Linux 中运行 Fuchsia,那么建议您运行如下命令,在宿主机上允许 Fuchsia 特定流量: ```posix-terminal fx setup-ufw @@ -275,7 +284,7 @@ fx setup-ufw This script requires `sudo` (which asks for your password) to set the appropriate firewall rules. (For more information on this script, see [`setup-ufw`][setup-ufw].) --> -这个脚本需要 `sudo` (会提示您输入密码)权限来设置防火墙规则。(更多关于脚本的的信息,参考 [`setup-ufw`][setup-ufw] 文件)。 +该脚本需要 `sudo` 权限(会要求您输入密码)来设置适当的防火墙规则。(要获取关于该脚本的更多信息,请参考 [`setup-ufw`][setup-ufw])。 @@ -285,7 +294,7 @@ firewall rules. (For more information on this script, see [`setup-ufw`][setup-uf To build your first Fuchsia system image, see [Configure and build Fuchsia](/get-started/build_fuchsia.md). --> -要构建您第一个 Fuchsia 系统镜像,请参考[配置和构建 Fuchsia](/get-started/build_fuchsia.md)。 +要构建您第一个 Fuchsia 系统镜像,请参阅[配置和构建 Fuchsia](/get-started/build_fuchsia.md)。 @@ -299,7 +308,7 @@ If you see the `Invalid authentication credentials` error during the bootstrap process, your `~/.gitcookies` file may contain cookies from some repositories in `googlesource.com` that the bootstrap script wants to check out anonymously. --> -如果您在引导脚本运行过程中看到了 `Invalid authentication credentials` 报错信息,那么您的 `~/.gitcookies` 文件中可能包含了来自 `googlesource.com` 中一些仓库的 cookie,引导脚本想要匿名检出。 +如果您在引导脚本运行过程中看到了 `Invalid authentication credentials`(无效的认证凭据)错误信息,那么您的 `~/.gitcookies` 文件中可能含有来自 `googlesource.com` 中一些仓库的 cookie,引导脚本想要匿名检查。 @@ -311,7 +320,7 @@ To resolve this error, do one of the following: * Delete the offending cookies from the `.gitcookies` file. --> -* 按照屏幕上的指示为特定的仓库获取密码。 +* 按照屏幕上的指示为指定仓库获取密码。 * 删除 `.gitcookies` 文件中有问题的 cookie。 -下面的章节为[设置环境变量](#set-up-environment-variables)章节提供了替代选项: +下面的章节为[设置环境变量](#set-up-environment-variables)章节提供了替代方法: -如果您不想更新您的环境变量,但是您想在任何目录中使用 `jiri` 工具,把 `jiri` 工具复制到 `~/bin` 目录中,比如: +如果您不想更新您的环境变量,但是想在任何目录中使用 `jiri` 工具,那么请把 `jiri` 工具复制到 `~/bin` 目录中,比如: -注意:如果您的 Fuchsia 源码不在 `~/fuchsia` 目录中,把 `~/fuchsia` 替换为您的 Fuchsia 目录。 +注意:如果您的 Fuchsia 源码不在 `~/fuchsia` 目录中,则请把 `~/fuchsia` 替换为您的 Fuchsia 目录。 ```posix-terminal cp ~/fuchsia/.jiri_root/bin/jiri ~/bin @@ -354,7 +363,7 @@ cp ~/fuchsia/.jiri_root/bin/jiri ~/bin However, you must have write access to the `~/bin` directory without `sudo`. If you don't, `jiri` cannot keep itself up-to-date. --> -但是,您需要在没有 `sudo` 的情况下对 `~/bin` 有写访问权限。如果没有,`jiri` 就不能保持在最新版本。 +但是,您必须在没有 `sudo` 的情况下对 `~/bin` 有写访问权限。否则,`jiri` 无法自动保持最新版本。 @@ -367,10 +376,9 @@ example: Note: If your Fuchsia source code is not located in the `~/fuchsia` directory, replace `~/fuchsia` with your Fuchsia directory. --> -同样的,如果您想不更新环境变量使用 `fx` 工具,在 `~/bin` 路径中提供您的 `fx` 工具的链接文件,比如: -同样的,如果您想不更新环境变量而使用 `fx` 工具,在 `~/bin` 目录中提供 `fx` 工具的符号链接,比如: +同样地,如果您想在不更新环境变量的情况下使用 `fx` 工具,则请在 `~/bin` 路径中添加您 `fx` 工具的链接文件,比如: -注意:如果您的 Fuchsia 源码不在 `~/fuchsia` 目录中,把 `~/fuchsia` 替换为您的 Fuchsia 目录。 +注意:如果您的 Fuchsia 源码不在 `~/fuchsia` 目录中,则请把 `~/fuchsia` 替换为您的 Fuchsia 目录。 ```posix-terminal ln -s ~/fuchsia/scripts/fx ~/bin @@ -378,7 +386,7 @@ ln -s ~/fuchsia/scripts/fx ~/bin -或者,直接用其路径运行 `fx` 工具,比如: +或者,请直接使用 `fx` 工具的路径来运行,比如: ```posix-terminal ./scripts/fx help From bf555589879a1641cd20f9c10fe5276f7896d1b8 Mon Sep 17 00:00:00 2001 From: Xyct <87l46110@gmail.com> Date: Thu, 11 Aug 2022 14:46:46 +0800 Subject: [PATCH 111/154] Update get-started/_common/intro/_architecture.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 广泛的 --> 各种 Co-authored-by: y2-Whyto --- get-started/_common/intro/_architecture.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/get-started/_common/intro/_architecture.md b/get-started/_common/intro/_architecture.md index aee80ff5..9455f7c9 100644 --- a/get-started/_common/intro/_architecture.md +++ b/get-started/_common/intro/_architecture.md @@ -14,7 +14,7 @@ architecture, highlighting core components and subsystems.] Fuchsia makes it easy to create, maintain, and integrate software and hardware across a wide range of devices. --> -* [**简单:**][simple]Fuchsia 让创建、维护和集成软件与硬件在广范的设备中都变得容易。 +* [**简单:**][simple]Fuchsia 让创建、维护和集成软件与硬件在各种设备中都变得容易。 +# 开始步骤 + +Fuchsia 是一个现代化开源操作系统,定位在简单、安全、可更新以及运行效率方面。同时提供了操作系统的核心功能,比如系统资源管理、驱动框架以及软件抽象。Fuchsia 是一个支持常见设备的操作系统,被设计于助力软硬件多样的生态系统。 + +## SDK 还是源代码? + +Fuchsia 是 Google 积极开发的一个开源项目。现在有两种方式来参与 Fuchsia:可以使用 Fuchsia 的 SDK 来为 Fuchsia 开发产品和软件,或者为 Fuchsia 的平台源代码贡献一份力。 + +## SDK - 为 Fuchsia 开发软件 + +Fuchsia 的 SDK 配套有一些工具可以帮助你为 Fuchsia 开发软件。在您开始开发软件之前,建议您学习一些 Fuchsia 的 SDK 的基础。 Fundamentals for SDK - + href="/get-started/sdk/learn">SDK 基础 + +## 源代码 - 为 Fuchsia 贡献 + +Fuchsia 作为一个开源项目,你当然可以为它的源代码做贡献。在你开始编写源码之前,建议您学习一些 Fuchsia 的基础以更好的理解它的运行原理。 Fundamentals for contributors \ No newline at end of file + href="/get-started/learn">贡献人员基础知识 From 9d7628a5e1a91e36ee62a1075a5116766c44f3d5 Mon Sep 17 00:00:00 2001 From: wy Date: Thu, 11 Aug 2022 15:57:14 +0800 Subject: [PATCH 113/154] =?UTF-8?q?replace=20=E4=BD=A0=20with=20=E6=82=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- get-started/learn-fuchsia.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/get-started/learn-fuchsia.md b/get-started/learn-fuchsia.md index 35eb2a4e..f3a5171b 100644 --- a/get-started/learn-fuchsia.md +++ b/get-started/learn-fuchsia.md @@ -29,7 +29,7 @@ Fuchsia has an SDK with tools to help you get started developing software that will run on Fuchsia. Before you begin building your software, it is recommended you learn about the fundamentals of using the Fuchsia SDK. --> -Fuchsia 的 SDK 配套有一些工具可以帮助你为 Fuchsia 开发软件。在您开始开发软件之前,建议您学习一些 Fuchsia 的 SDK 的基础。 +Fuchsia 的 SDK 配套有一些工具可以帮助您为 Fuchsia 开发软件。在您开始开发软件之前,建议您学习一些 Fuchsia 的 SDK 的基础。 SDK 基础 @@ -42,6 +42,6 @@ As Fuchsia is an open source project, you can contribute to the Fuchsia source t begin contributing, it’s recommended that you learn about the fundamentals about the Fuchsia platform to understand how Fuchsia works. --> -Fuchsia 作为一个开源项目,你当然可以为它的源代码做贡献。在你开始编写源码之前,建议您学习一些 Fuchsia 的基础以更好的理解它的运行原理。 +Fuchsia 作为一个开源项目,您当然可以为它的源代码做贡献。在您开始编写源码之前,建议您学习一些 Fuchsia 的基础以更好的理解它的运行原理。 贡献人员基础知识 From 0254e11fe73fb48606277546fcac29f8dea06925 Mon Sep 17 00:00:00 2001 From: y2-Whyto Date: Thu, 11 Aug 2022 20:29:07 +0800 Subject: [PATCH 114/154] contribute changes --- glossary-translation.md | 1 + 1 file changed, 1 insertion(+) diff --git a/glossary-translation.md b/glossary-translation.md index ced0929b..a2feb9e9 100644 --- a/glossary-translation.md +++ b/glossary-translation.md @@ -30,6 +30,7 @@ | cleanup | 清理 | G | | compile | 编译 | G | | consume | 使用
消耗 | G
后者在结算系统中使用 | +| contribute changes | 贡献更改 | i | | control plane | 控制层面
控制平面 | G | | data plane | 数据平面
数据层面 | G | | deprecated | 已弃用(的) | G | From e1f53ee895a571a7f1b153f05e155a977174a484 Mon Sep 17 00:00:00 2001 From: y2-Whyto Date: Thu, 11 Aug 2022 21:06:21 +0800 Subject: [PATCH 115/154] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20#184?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- get-started/_common/components/_product_driver.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/get-started/_common/components/_product_driver.md b/get-started/_common/components/_product_driver.md index e56a8b82..991bec91 100644 --- a/get-started/_common/components/_product_driver.md +++ b/get-started/_common/components/_product_driver.md @@ -1,13 +1,25 @@ + +## 驱动框架 + +与会话类似,Fuchsia 驱动框架使开发人员能够将产品特定的设备驱动程序实现为组件。一些驱动程序组件代表硬件接口控制器,例如 PCI 或 USB,而其他驱动程序组件则与终端设备交互,例如以太网控制器或键盘。 + +当设备被发现或连接到系统时,`driver_manager` 平台组件启动必要的驱动程序组件,将它们绑定到硬件接口,并管理它们的生命周期。 + +注:要获取关于驱动框架的更多细节,请参阅[Fuchsia 驱动框架](/development/drivers/concepts/fdf.md)。 From 273d0837a8f5ee7c3e991641b6986a2c8afb366a Mon Sep 17 00:00:00 2001 From: y2-Whyto Date: Thu, 11 Aug 2022 21:07:29 +0800 Subject: [PATCH 116/154] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20#184?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- get-started/_common/components/_product_driver.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/get-started/_common/components/_product_driver.md b/get-started/_common/components/_product_driver.md index 991bec91..814fc730 100644 --- a/get-started/_common/components/_product_driver.md +++ b/get-started/_common/components/_product_driver.md @@ -22,4 +22,4 @@ hardware interfaces, and manages their lifecycle. Note: For more details on the driver framework, see [Fuchsia Driver Framework](/development/drivers/concepts/fdf.md). --> -注:要获取关于驱动框架的更多细节,请参阅[Fuchsia 驱动框架](/development/drivers/concepts/fdf.md)。 +注:要获取关于驱动框架的更多细节,请参阅 [Fuchsia 驱动框架](/development/drivers/concepts/fdf.md)。 From b6d89702e5bb49319560de844ba9f3e3351a139d Mon Sep 17 00:00:00 2001 From: y2-Whyto Date: Fri, 12 Aug 2022 12:47:42 +0800 Subject: [PATCH 117/154] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=87=A0=E4=B8=AA=20?= =?UTF-8?q?#165=20=E4=B8=AD=E7=9A=84=E4=BF=AE=E6=94=B9=E5=BB=BA=E8=AE=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- get-started/get_fuchsia_source.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/get-started/get_fuchsia_source.md b/get-started/get_fuchsia_source.md index cd7212b3..4f744d1f 100644 --- a/get-started/get_fuchsia_source.md +++ b/get-started/get_fuchsia_source.md @@ -189,16 +189,16 @@ Fuchsia 建议您按照如下操作更新 shell 配置文件: navigating directories with auto-completion. (For more information, see comments in `fx-env.sh`.) --> -* 导入 `scripts/fx-env.sh` 文件 +* 使用“source”命令导入 `scripts/fx-env.sh` 文件 - 虽然这并不是必须的,导入 [`fx-env.sh`](/scripts/fx-env.sh) 文件可以在您的终端中启用一系列有用的 shell 函数。比如,它会创建 `FUCHSIA_DIR` 环境变量,以及提供 `fd` 命令用来在目录中导航时提供自动补全 (如果想获取更多信息,请参考 `fx-env.sh` 文件)。 + 虽然这并不是必须的,但是使用“source”命令导入 [`fx-env.sh`](/scripts/fx-env.sh) 文件可以在您的终端中启用一系列有用的 shell 函数。比如,它会创建 `FUCHSIA_DIR` 环境变量,以及提供 `fd` 命令用来在目录中导航时提供自动补全 (要获取更多信息,请参阅 `fx-env.sh` 中的注释)。 -注意:如果您不想更新您的 shell 配置,则请参阅[在不更新 PATH 变量的情况下处理 Fuchsia](#work-on-fuchsia-without-updating-your-path)。 +注意:如果您不想更新您的 shell 配置,则请参阅[在不更新 PATH 变量的情况下准备 Fuchsia](#work-on-fuchsia-without-updating-your-path)。 -### 不更新 PATH 变量编译 Fuchsia {#work-on-fuchsia-without-updating-your-path} +### 在不更新 PATH 变量的情况下准备 Fuchsia {#work-on-fuchsia-without-updating-your-path} +协议句柄是一个很常见的对象,它提供了一个 FIDL 协议的实现,FIDL 协议可以通过组件命名空间找到。组件框架使用能力促进了[组件](/glossary/README.md#component)之间的协议发现。能力路由描述了哪个组件应该作为任何给定客户端的提供者。一旦确定了适当的组件,[组件管理器](/glossary/README.md#component-manager)就会使用每个组件命名空间中的句柄来启动组件之间的连接。 + +请看以下 `fuchsia.example.Foo` 协议的示例: + +![图中显示了如何连接组件,组件是能力路由和协议服务的结合。组件必须为它们提供给其他组件的协议的实现来提供服务。](/get-started/images/fidl/protocol-serving.png){: width="629"} + +该图强调了执行连接所涉及的主要元素: + +1. 提供者组件在清单的 `capabilities` 部分中静态地**声明**协议。这使组件框架能够执行能力路由。 + +2. 客户端组件在清单(manifest)的 `use` 部分静态地**请求**协议。如果能力路由成功,这将在客户端的命名空间中创建 `/svc/fuchsia.example.Foo` 协议项。 + +3. 提供者代码在运行时**发布**实现。这将在提供者传出目录中的 `/svc/fuchsia.example.Foo` 处创建一个协议项。 + +4. 客户端代码在运行时**连接**到协议句柄。这将与运行在提供者组件中的实现打开一个 FIDL 连接。 From 4b2a013788239c52ade76344e8e60e135ffd8891 Mon Sep 17 00:00:00 2001 From: Cwolf9 <35797478+Cwolf9@users.noreply.github.com> Date: Sat, 13 Aug 2022 10:23:43 +0800 Subject: [PATCH 119/154] Update _connecting_intro.md --- get-started/_common/fidl/_connecting_intro.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/get-started/_common/fidl/_connecting_intro.md b/get-started/_common/fidl/_connecting_intro.md index 0ac40657..d1eecf71 100644 --- a/get-started/_common/fidl/_connecting_intro.md +++ b/get-started/_common/fidl/_connecting_intro.md @@ -14,7 +14,7 @@ component's namespace. -请看以下 `fuchsia.example.Foo` 协议的示例: +请参考以下 `fuchsia.example.Foo` 协议的示例: -注: 要获取关于会话框架的更多细节,请参阅[会话框架介绍](/concepts/session/introduction.md). +注: 要获取关于会话框架的更多细节,请参阅[会话框架介绍](/concepts/session/introduction.md)。 From 3c98856b925242a44e89e019cbed57a903167df2 Mon Sep 17 00:00:00 2001 From: wy Date: Sun, 14 Aug 2022 20:22:04 +0800 Subject: [PATCH 121/154] learn-fuchsia.md review --- get-started/learn-fuchsia.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/get-started/learn-fuchsia.md b/get-started/learn-fuchsia.md index f3a5171b..7ccd4074 100644 --- a/get-started/learn-fuchsia.md +++ b/get-started/learn-fuchsia.md @@ -9,7 +9,7 @@ system resource management, a driver framework, and software abstractions. Fuchsia is a general purpose operating system designed to power a diverse ecosystem of hardware and software. --> -Fuchsia 是一个现代化开源操作系统,定位在简单、安全、可更新以及运行效率方面。同时提供了操作系统的核心功能,比如系统资源管理、驱动框架以及软件抽象。Fuchsia 是一个支持常见设备的操作系统,被设计于助力软硬件多样的生态系统。 +Fuchsia 是一个现代化开源操作系统,它简单、安全、可更新以及运行效率高。同时提供了操作系统的核心功能,比如系统资源管理、驱动框架以及软件抽象。Fuchsia 是一个支持常见设备的操作系统,被设计于助力软硬件多样的生态系统。 @@ -19,7 +19,7 @@ Fuchsia is an open source project in active development at Google. There are two ways to work with Fuchsia: you can build products and software for Fuchsia using the SDK, or contribute to the source tree to build the Fuchsia platform. --> -Fuchsia 是 Google 积极开发的一个开源项目。现在有两种方式来参与 Fuchsia:可以使用 Fuchsia 的 SDK 来为 Fuchsia 开发产品和软件,或者为 Fuchsia 的平台源代码贡献一份力。 +Fuchsia 是 Google 积极开发的一个开源项目。现在有两种方式来参与 Fuchsia:可以使用 Fuchsia 的 SDK 来为 Fuchsia 开发产品和软件,或者为 Fuchsia 平台的源代码贡献一份力。 @@ -29,7 +29,7 @@ Fuchsia has an SDK with tools to help you get started developing software that will run on Fuchsia. Before you begin building your software, it is recommended you learn about the fundamentals of using the Fuchsia SDK. --> -Fuchsia 的 SDK 配套有一些工具可以帮助您为 Fuchsia 开发软件。在您开始开发软件之前,建议您学习一些 Fuchsia 的 SDK 的基础。 +Fuchsia 的 SDK 配套有一些工具可以帮助您为 Fuchsia 开发软件。在您开始开发软件之前,建议您学习一些 Fuchsia SDK 的基本使用方法。 SDK 基础 From 084a4391318f07b05c91ff2d35691399ed7b57f6 Mon Sep 17 00:00:00 2001 From: y2-Whyto Date: Wed, 17 Aug 2022 10:28:42 +0800 Subject: [PATCH 122/154] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=B8=83=E5=B1=80?= =?UTF-8?q?=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- get-started/get_fuchsia_source.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/get-started/get_fuchsia_source.md b/get-started/get_fuchsia_source.md index 4f744d1f..43caa1dc 100644 --- a/get-started/get_fuchsia_source.md +++ b/get-started/get_fuchsia_source.md @@ -19,11 +19,11 @@ The steps are: 4. [Set up environment variables](#set-up-environment-variables). 5. [Configure firewall rules (Optional)](#configure-firewall-rules). --> -1. [执行预检查](#perform-a-preflight-check). -2. [安装必备软件包](#install-prerequisite-packages). -3. [下载 Fuchsia 源代码](#download-the-fuchsia-source-code). -4. [设置环境变量](#set-up-environment-variables). -5. [配置防火墙规则(可选)](#configure-firewall-rules). +1. [执行预检查](#perform-a-preflight-check)。 +2. [安装必备软件包](#install-prerequisite-packages)。 +3. [下载 Fuchsia 源代码](#download-the-fuchsia-source-code)。 +4. [设置环境变量](#set-up-environment-variables)。 +5. [配置防火墙规则(可选)](#configure-firewall-rules)。 -1. 选择一个 Fuchsia 源代码下载目录,例如: +1. 选择一个 Fuchsia 源代码下载目录,例如: 注意:您可以在任何目录下设置 Fuchsia。本指南选择 `$HOME` 作为示例。 @@ -161,11 +161,13 @@ To download the Fuchsia source, do the following: ## 4. Set up environment variables {#set-up-environment-variables} --> ## 4. 设置环境变量 {#set-up-environment-variables} + Fuchsia 建议您按照如下操作更新 shell 配置文件: + -* 添加 `.jiri_root/bin` 目录到您的 `PATH` 环境变量 +* 添加 `.jiri_root/bin` 目录到您的 `PATH` 环境变量 - Fuchsia 源码中的 `.jiri_root/bin` 目录包含了 [`jiri`](https://fuchsia.googlesource.com/jiri) 和 [`fx`](/development/build/fx.md) 工具,这些是 Fuchsia 工作流中的必备工具。Fuchsia 使用 `jiri` 工具在 Fuchsia 的项目中管理仓库,而 `fx` 工具能够帮助配置、构建、运行以及调试 Fuchsia。Fuchsia 的工具链需要可以在您的 `PATH` 环境变量中找到 `jiri` 工具。 + Fuchsia 源码中的 `.jiri_root/bin` 目录包含了 [`jiri`](https://fuchsia.googlesource.com/jiri) 和 [`fx`](/development/build/fx.md) 工具,这些是 Fuchsia 工作流中的必备工具。Fuchsia 使用 `jiri` 工具在 Fuchsia 的项目中管理仓库,而 `fx` 工具能够帮助配置、构建、运行以及调试 Fuchsia。Fuchsia 的工具链需要可以在您的 `PATH` 环境变量中找到 `jiri` 工具。 + 注意:如果您不想更新您的 shell 配置,则请参阅[在不更新 PATH 变量的情况下准备 Fuchsia](#work-on-fuchsia-without-updating-your-path)。 + 要更新您的 shell 配置文件来设置 Fuchsia 的环境变量,请执行如下步骤: + 1. 保存文件并退出。 + @@ -263,10 +268,12 @@ do the following: ```posix-terminal fx help ``` + ## 5. 配置防火墙规则(可选) {#configure-firewall-rules} + 该脚本需要 `sudo` 权限(会要求您输入密码)来设置适当的防火墙规则。(要获取关于该脚本的更多信息,请参考 [`setup-ufw`][setup-ufw])。 + @@ -296,20 +305,24 @@ To build your first Fuchsia system image, see [Configure and build Fuchsia](/get-started/build_fuchsia.md). --> 要构建您第一个 Fuchsia 系统镜像,请参阅[配置和构建 Fuchsia](/get-started/build_fuchsia.md)。 + ## 附录 + ### 认证错误 {#authentication-error} + 如果您在引导脚本运行过程中看到了 `Invalid authentication credentials`(无效的认证凭据)错误信息,那么您的 `~/.gitcookies` 文件中可能含有来自 `googlesource.com` 中一些仓库的 cookie,引导脚本想要匿名检查。 + @@ -321,18 +334,20 @@ To resolve this error, do one of the following: * Delete the offending cookies from the `.gitcookies` file. --> -* 按照屏幕上的指示为指定仓库获取密码。 -* 删除 `.gitcookies` 文件中有问题的 cookie。 +* 按照屏幕上的指示为指定仓库获取密码。 +* 删除 `.gitcookies` 文件中有问题的 cookie。 -### 在不更新 PATH 变量的情况下准备 Fuchsia {#work-on-fuchsia-without-updating-your-path} +### 在不更新 PATH 变量的情况下准备 Fuchsia {#work-on-fuchsia-without-updating-your-path} + 下面的章节为[设置环境变量](#set-up-environment-variables)章节提供了替代方法: + -#### 把工具复制到二进制目录 {#copy-the-tool-to-your-binary-directory} +#### 把工具复制到二进制目录 {#copy-the-tool-to-your-binary-directory} + 但是,您必须在没有 `sudo` 的情况下对 `~/bin` 有写访问权限。否则,`jiri` 无法自动保持最新版本。 + #### 添加符号链接到二进制目录 {#add-a-symlink-to-your-binary-directory} + 注意:这一步对构建或者运行 Fuchsia 并不是必需的。但是推荐您进行该步骤,以确保 Fuchsia 模拟器实例能在 Linux 上流畅运行。 -(**仅限 Linux**) 如果您计划在 Linux 中运行 Fuchsia,那么建议您运行如下命令,在宿主机上允许 Fuchsia 特定流量: +(**仅限 Linux**)如果您计划在 Linux 中运行 Fuchsia,那么建议您运行如下命令,在宿主机上允许 Fuchsia 特定流量: ```posix-terminal fx setup-ufw From f53fb0b6e992c9ceb6d6c337890fe201ddec3fa5 Mon Sep 17 00:00:00 2001 From: y2-Whyto Date: Wed, 17 Aug 2022 16:19:33 +0800 Subject: [PATCH 125/154] =?UTF-8?q?=E7=BF=BB=E8=AF=91=20/development/hardw?= =?UTF-8?q?are/README.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- development/hardware/README.md | 43 ++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/development/hardware/README.md b/development/hardware/README.md index c8f52c71..6565f45b 100644 --- a/development/hardware/README.md +++ b/development/hardware/README.md @@ -1,34 +1,73 @@ + +# 在设备上安装 Fuchsia + +Fuchsia 平台能够安装在以下硬件设备上: + +- [Chromebook][install-fuchsia-on-chromebook] +- [Intel NUC 迷你电脑][install-fuchsia-on-nuc] +- [Khadas VIM3 开发板][install-fuchsia-on-vim3] + +## 架构支持 + +Fuchsia 支持两种指令集(Instruction Set Architecture,ISA): + +* `arm64`——Fuchsia 在受支持的微处理器上,对 `arm64`(也称为 AArch64)的支持没有限制。 + +* `x86-64`——Fuchsia 在受支持的微处理器上,对 `x86-64`(也称为 IA32e 或 AMD64)的支持有一定限制。 + +## CPU 支持 + +Fuchsia 对于 CPU 的支持: + +* Intel——对于 Intel CPU,只有 Broadwell 及更高版本是受到活跃支持的,并且会添加新的功能。另外,我们将接受补丁,以保持 Nehalem 及更高版本正常引导。 + +* AMD——AMD CPU 是**不**受活跃支持的(具体地,我们对其没有进行活跃测试),但是我们将接受补丁,以确保其正确引导。 + +## 目录 + +- [在 Chromebook 上安装 Fuchsia][install-fuchsia-on-chromebook] +- [在 NUC 迷你电脑上安装 Fuchsia][install-fuchsia-on-nuc] +- [在 NUC 迷你电脑上使用 Zedboot(旧版)安装 Fuchsia][install-fuchsia-on-nuc-legacy] From 1a4cdeffe92820b745e25478be4b1ee53d0a3d4a Mon Sep 17 00:00:00 2001 From: y2-Whyto Date: Wed, 17 Aug 2022 16:25:39 +0800 Subject: [PATCH 126/154] =?UTF-8?q?installer=EF=BC=8Clegacy?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://support.google.com/chrome/answer/95346?hl=zh-Hans&co=GENIE.Platform%3DDesktop#zippy=,windows,mac https://support.google.com/google-ads/answer/10514212?hl=zh-Hans --- glossary-translation.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/glossary-translation.md b/glossary-translation.md index a2feb9e9..9394f686 100644 --- a/glossary-translation.md +++ b/glossary-translation.md @@ -54,8 +54,10 @@ | in-tree | 树内 | G
此处指源码树 | | infrastructure | 基础架构 | G | | inspect | 审视 | Fuchsia 专有名词
i | +| installer | 安装程序 | G | | job | 作业 | G | | just-in-time (JIT) compilation | 即时(JIT)编译 | G | +| legacy | 旧版 | G | | moniker | 代称 | i | | mount | 装载 | G | | namespace | 命名空间 | G | From f2b0260d6672a3f2e308b9289c412bd480bb0d3e Mon Sep 17 00:00:00 2001 From: y2-Whyto Date: Wed, 17 Aug 2022 16:27:18 +0800 Subject: [PATCH 127/154] =?UTF-8?q?=E8=A1=A5=E5=85=85=E5=AE=8C=E6=95=B4?= =?UTF-8?q?=E7=BF=BB=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- development/hardware/README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/development/hardware/README.md b/development/hardware/README.md index 6565f45b..4e61cc7d 100644 --- a/development/hardware/README.md +++ b/development/hardware/README.md @@ -82,6 +82,13 @@ Fuchsia 对于 CPU 的支持: - [在 Chromebook 上安装 Fuchsia][install-fuchsia-on-chromebook] - [在 NUC 迷你电脑上安装 Fuchsia][install-fuchsia-on-nuc] - [在 NUC 迷你电脑上使用 Zedboot(旧版)安装 Fuchsia][install-fuchsia-on-nuc-legacy] +- [在 Khadas VIM3 开发板上安装 Fuchsia][install-fuchsia-on-vim3] +- 创建 Fuchsia 可引导镜像: + - [从 USB 闪存驱动器安装 Fuchsia][prepare-usb] + - [使用 Fuchsia 安装程序(旧版)][use-the-installer-legacy] +- 设置实验性硬件: + - [在 Acer Switch Alpha 12 上安装 Fuchsia][install-fuchsia-on-acer12] + - [在 Toulouse 上安装 Fuchsia][install-fuchsia-on-toulouse] From 7e82904d8e967d16776393f9158e7f9dab09f45d Mon Sep 17 00:00:00 2001 From: y2-Whyto Date: Wed, 17 Aug 2022 16:32:00 +0800 Subject: [PATCH 128/154] =?UTF-8?q?=E4=B8=AD=E6=96=87=E6=A0=87=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- get-started/explore_fuchsia.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/get-started/explore_fuchsia.md b/get-started/explore_fuchsia.md index 33f8f260..f3786636 100644 --- a/get-started/explore_fuchsia.md +++ b/get-started/explore_fuchsia.md @@ -9,10 +9,10 @@ check out the following resources: --> * [Run examples](#run-examples). * [Create Fuchsia components](#create-fuchsia-components). * [Contribute changes](#contribute-changes). --> -* [运行 ffx 命令](#run-ffx-commands). -* [运行示例](#run-examples). -* [创建 Fuchsia 组件](#create-fuchsia-components). -* [贡献更改](#contribute-changes). +* [运行 ffx 命令](#run-ffx-commands)。 +* [运行示例](#run-examples)。 +* [创建 Fuchsia 组件](#create-fuchsia-components)。 +* [贡献更改](#contribute-changes)。 ## 运行 ffx 命令 {#run-ffx-commands} From f11690711a26af7a867017fd5a8c02997db0a375 Mon Sep 17 00:00:00 2001 From: y2-Whyto Date: Wed, 17 Aug 2022 16:36:25 +0800 Subject: [PATCH 129/154] =?UTF-8?q?=E5=AF=B9=20PR=20=E6=8F=90=E4=BA=A4?= =?UTF-8?q?=E8=A6=81=E6=B1=82=E5=81=9A=E4=BA=86=E6=9B=B4=E5=8A=A0=E7=B2=BE?= =?UTF-8?q?=E7=A1=AE=E7=9A=84=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 2af2bd9d..8b10ddf1 100644 --- a/README.md +++ b/README.md @@ -46,7 +46,6 @@ ## PR 提交要求 1. 多个翻译请**分文件提交 PR**,即新建分支(branch),在每个分支中只更改一个文件并提交; - 1. PR 提交时请在**标题区域包含文件名**,以便进行记录; + 1. PR 提交时请在**标题区域包含文件的绝对路径**,以便进行查找、核对和记录; 1. PR 的标题和内容最好使用中文; - 1. 为避免做重复性工作,请在翻译时**先试译若干节**,并将 PR **[以草稿形式提交](https://docs.github.com/cn/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests#draft-pull-requests)**([创建草稿 PR](https://docs.github.com/cn/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request-from-a-fork) 或[提交 PR 后进入并在右侧选择转换为草稿](https://docs.github.com/cn/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/changing-the-stage-of-a-pull-request#converting-a-pull-request-to-a-draft)),以便校对人员提前开始校对,及时修正当前翻译中存在的可能会在下文中重复出现的格式或内容问题。 - + 1. 为避免做重复性工作,最好在翻译时**先试译若干节**,并将 PR **[以草稿形式提交](https://docs.github.com/cn/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests#draft-pull-requests)**([创建草稿 PR](https://docs.github.com/cn/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request-from-a-fork) 或[提交 PR 后进入并在右侧选择转换为草稿](https://docs.github.com/cn/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/changing-the-stage-of-a-pull-request#converting-a-pull-request-to-a-draft)),以便校对人员提前开始校对,及时修正当前翻译中存在的可能会在下文中重复出现的格式或内容问题。 From 50dd286f836adc0e9390e98a9aea9ab1d95ee7d4 Mon Sep 17 00:00:00 2001 From: tabidachinokaze Date: Thu, 18 Aug 2022 11:15:45 +0800 Subject: [PATCH 130/154] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=9C=80=E6=96=B0?= =?UTF-8?q?=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- get-started/set_up_femu.md | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/get-started/set_up_femu.md b/get-started/set_up_femu.md index 0ddf5502..057162bb 100644 --- a/get-started/set_up_femu.md +++ b/get-started/set_up_femu.md @@ -217,7 +217,8 @@ This section provides additional FEMU options. ### See all available flags -To see a full list of the emulator's supported flags: +To see a [full list][ffx-emu-reference] of the emulator's supported flags, run the +following command: ```posix-terminal ffx emu start --help @@ -234,12 +235,9 @@ ffx emu start --headless ### Specify GPU used by FEMU -By default, the FEMU launcher uses software rendering using -[SwiftShader][swiftshader]{: .external}. To force FEMU to use a specific -graphics emulation method, use the parameters `--gpu host` or -`--gpu guest` with the `ffx emu start` command. - -These are the valid commands and options: +By default, the FEMU launcher attempts to detect if the host has a GPU that can be used for +graphics rendering. If you need to explicitly set the rendering type, you can use +the `--gpu` flag with the following options: @@ -316,17 +314,18 @@ for FEMU on Linux machine using [TUN/TAP][tuntap]{: .external}. No additional IPv6 network setup is required for macOS. [User Networking (SLIRP)][slirp]{: .external} is the default network setup - for FEMU on macOS – while this setup does not support Fuchsia device + for FEMU on macOS – while this setup does not support Fuchsia device discovery, you can still use `fx` tools (for example,`fx ssh`) to interact with your FEMU instance. -[get-fuchsia-source]: /get-started/get_fuchsia_source.md -[build-fuchsia]: /get-started/build_fuchsia.md -[femu-overview]: /development/build/emulator.md +[get-fuchsia-source]: /docs/get-started/get_fuchsia_source.md +[build-fuchsia]: /docs/get-started/build_fuchsia.md +[femu-overview]: /docs/development/build/emulator.md +[ffx-emu-reference]: https://fuchsia.dev/reference/tools/sdk/ffx#emu [hypervisor-framework]: https://developer.apple.com/documentation/hypervisor -[explore-fuchsia]: /get-started/explore_fuchsia.md +[explore-fuchsia]: /docs/get-started/explore_fuchsia.md [swiftshader]: https://swiftshader.googlesource.com/SwiftShader/ [tuntap]: https://en.wikipedia.org/wiki/TUN/TAP [tap-networking]: https://wiki.qemu.org/Documentation/Networking#Tap From f66c97b31eade7a9de2adf78da93be4d8b3316a3 Mon Sep 17 00:00:00 2001 From: tabidachinokaze Date: Thu, 18 Aug 2022 11:34:18 +0800 Subject: [PATCH 131/154] =?UTF-8?q?=E7=BF=BB=E8=AF=91=20get-started/set=5F?= =?UTF-8?q?up=5Ffemu.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- get-started/set_up_femu.md | 268 ++++++++++++++++++++++++++++++++++++- 1 file changed, 267 insertions(+), 1 deletion(-) diff --git a/get-started/set_up_femu.md b/get-started/set_up_femu.md index 057162bb..f58a094c 100644 --- a/get-started/set_up_femu.md +++ b/get-started/set_up_femu.md @@ -1,134 +1,255 @@ + +# 启动 Fuchsia 模拟器 + +本指南提供关于如何安装和启动 Fuchsia 模拟器(FEMU)在您的设备上的说明。 + +步骤如下: + +1. [前提条件](#prerequisites)。 +1. [为 FEMU 构建 Fuchsia](#build-fuchsia-for-femu)。 +1. [启用 VM 加速(可选)](#enable-vm-acceleration)。 +1. [启动 FEMU](#start-femu)。 +1. [发现 FEMU](#discover-femu)。 + + +## 1. 前提条件 {#prerequisites} + +运行 FEMU 需要您完成以下向导: + + * [下载 Fuchsia 源代码][get-fuchsia-source] + * [配置和构建 Fuchsia][build-fuchsia] + +## 2. 为 FEMU 构建 Fuchsia {#build-fuchsia-for-femu} + +要运行 FEMU,您首先要构建一个支持模拟器环境的 Fuchsia 系统镜像。本指南使用 `qemu-x64` +板型和 `workstation_eng` 产品作为一个例子。 + +要构建一个 FEMU 的 Fuchsia 镜像,请执行以下操作: + +1. 设置 Fuchsia 构建配置: ```posix-terminal fx set workstation_eng.qemu-x64 --release ``` + +2. 构建 Fuchsia: ```posix-terminal fx build ``` + +要获取关于支持的板型和产品的更多信息,请参阅 [Fuchsia 模拟器(FEMU)][femu-overview] 概述页面。 + +## 3. 启用 VM 加速(可选) {#enable-vm-acceleration} + +(**仅限Linux**)大部分 Linux 设备支持通过 KVM 进行 VM 加速,大大提高了模拟器的性能和可用性。 + +如果您的设备可以使用 KVM,更新您的组权限来启用 KVM。 * {Linux} + + 要在您的设备上启用 KVM,执行以下操作: + + 注意:您只需要在每台设备上执行一次。 + + 1. 在您的设备上添加您自己到 `kvm` 组: ```posix-terminal sudo usermod -a -G kvm ${USER} ``` + + 1. 注销与您设备的所有桌面会话,然后重新登录。 + + 1. 要验证 KVM 是否配置正确,请运行以下命令: ```posix-terminal if [[ -r /dev/kvm ]] && grep '^flags' /proc/cpuinfo | grep -qE 'vmx|svm'; then echo 'KVM is working'; else echo 'KVM not working'; fi ``` + + 验证此命令是否打印以下行: ```none {:.devsite-disable-click-to-copy} KVM is working ``` + + 如果您看到 `KVM not working`,您可能要重启您的设备使权限修改生效。 * {macOS} + + macOS 无需额外的设置。 + + 在 macOS 上 Fuchsia 模拟器使用的是 [Hypervisor 框架][hypervisor-framework]{: .external},而不是 KVM。 + +## 4. 启动 FEMU {#start-femu} + +### 启动包服务 + +在启动模拟器之前,启动包服务。 + +要启动包服务,请运行以下命令: ```posix-terminal fx serve ``` + +注意:或者,您可以后台处理 `fx serve` 进程。 + +### 启动模拟器 + +要在您的 Linux 设备启动模拟器,请执行以下操作: * {Linux} + + 1. 通过运行以下命令配置 upscript: + + 注意:如果您的设备使用了防火墙,您可能需要应用一些额外的配置来允许模拟器访问网络。这通常通过运行“upscript”来完成,该脚本为当前进程设置接口和防火墙访问规则。如果您位于企业网络,请联系您的内部网络团队来查看他们是否有现行的 upscript 供您使用。 + + 如果您没有使用防火墙,仍然需要一些配置来启用 tun/tap 网络。upscript 示例 {{ '' }}FUCHSIA_ROOT{{ '' }}/scripts/start-unsecure-internet.sh 应该适用于大多数非企业网络。 ```posix-terminal ffx config set emu.upscript {{ '' }}FUCHSIA_ROOT{{ '' }}/scripts/start-unsecure-internet.sh ``` + + * `start-unsecure-internet.sh` 是一个 upscript 示例。 + * `FUCHSIA_ROOT` 是您的 Fuchsia 目录的路径。 + + 1. 启动 FEMU + + 1. 要启动可以访问外部网络的模拟器,请运行以下命令: ```posix-terminal ffx emu start --net tap @@ -136,58 +257,96 @@ To start the emulator on your Linux machine, do the following: * `--net` specifies the networking mode for the emulator. `--net tap` attaches to a Tun/Tap interface. + * `--net` 指定模拟器的网络模式。`--net tap` 附加到 Tun/Tap 接口。 + + 1. 要启动不需要访问外部网络的模拟器,请运行以下命令: ```posix-terminal ffx emu start --net none ``` + + 启动模拟器会打开一个标题为 **Fuchsia Emulator** 的新窗口,当模拟器完成启动后,您会返回到命令提示符,然后模拟器在后台运行。 * {macOS} + + 要在 macOS 上启动 FEMU,请执行以下操作: + + 1. 启动 FEMU: ```posix-terminal ffx emu start ``` + + 如果在您的 maxOS 上第一次启动 FEMU(包括重启之后),则会弹出一个窗口询问您是否要允许 `aemu` 进程在您的设备上运行。点击 **Allow**。 + + 该命令打开一个标题为 **Fuchsia Emulator** 的新窗口。当模拟器启动完成后,您会返回到命令提示符,然后模拟器在后台运行。 + + 2. (可选的)如果您需要明确指定已启动的 Fuchsia 模拟器,您可以运行 `fx set-device` 命令在同一终端。 ```posix-terminal fx set-device {{ '' }}NAME{{ '' }} ``` + + 替换以下内容: + + * `NAME`:使用 `ffx emu list` 或 `ffx target list` 命令输出的期望值。`fuchsia-emulator` 是默认值。 + + +## 5. 发现 FEMU {#discover-femu} + +要发现 Fuchsia 模拟器作为正在运行的 Fuchsia 设备,请运行以下命令: ```posix-terminal ffx target list ``` + +该命令的打印输出类似于以下内容: ```none {:.devsite-disable-click-to-copy} $ ffx target list @@ -195,50 +354,93 @@ NAME SERIAL TYPE STATE ADDRS/ fuchsia-emulator workstation_eng.qemu-x64 Product [fe80::866a:a5ea:cd9e:69f6%qemu] N ``` + +`fuchsia-emulator` 是 Fuchsia 模拟器的默认节点名称。 + +`ffx target list` 的输出受到以下 `--net` 选项的影响: + + * `--net none` 禁用网络,这导致设备在运行 `ffx target list` 时无法被发现。 + + * `--net tap` 和 `--net user` 允许设备在运行 `ffx target list` 时能被发现。 + +## 下一步 + +要学习更多关于 Fuchsia 设备命令和 Fuchsia 工作流,请参阅[探索 Fuchsia][explore-fuchsia]。 + +## 附录 + +本章节提供额外的 FEMU 选项。 + +### 查看所有可用的标记(flag) + +要查看模拟器所支持标记的完整列表,请运行以下命令: ```posix-terminal ffx emu start --help ``` + +### 在没有 GUI 支持下运行 FEMU + +如果您不需要图形界面或者在远程工作流下工作,您可以在无头模式(headless mode)下运行 FEMU: ```posix-terminal ffx emu start --headless ``` + +### 指定 FEMU 使用的 GPU + +默认情况下,FEMU 启动器尝试检测主机是否有可用于图形渲染的 GPU。如果您需要明确设置渲染类型,您可以使用带有以下选项的 `--gpu` 标记: + +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
GPU 仿真方式说明标记
硬件(主机 GPU)直接使用主机设备的 GPU 进行 GPU 处理。ffx emu start --gpu host
软件(主机 CPU)使用主机设备的 CPU 来模拟 GPU 处理。ffx emu start --gpu guest
SwiftShader使用 SwiftShader 库来模拟 GPU 处理。ffx emu start --gpu swiftshader_indirect
自动如果有可用的 GPU 硬件,则解析为 host,如果没有可用的 GPU 硬件,则解析为 swiftshader_indirectauto 是当前默认值。ffx emu start --gpu auto
+ +### 重启 FEMU {#reboot-femu} + +要重启 FEMU,请运行以下 `ffx` 命令: ```posix-terminal ffx target reboot ``` + +### 停止 FEMU {#stop-femu} + +要停止 FEMU,请运行以下 `ffx` 命令: ```posix-terminal ffx emu stop ``` + +### 配置 IPv6 网络 {#configure-ipv6-network} + +本节提供有关如何在 Linux 设备上使用 [TUN/TAP][tuntap]{: .external} 给 FEMU 配置 IPv6 网络的说明。 * {Linux} + + 注意:这必须在每台设备上完成一次。 + + 要在 FEMU 中使用 [网络分流][tap-networking]{: .external} 启用网络,请执行以下操作: + + 1. 设置 `tuntap`: ```posix-terminal sudo ip tuntap add dev qemu mode tap user $USER ``` + + 1. 为 `qemu` 启用网络: ```posix-terminal sudo ip link set qemu up @@ -311,12 +571,18 @@ for FEMU on Linux machine using [TUN/TAP][tuntap]{: .external}. * {macOS} + + macOS 不需要额外的 IPv6 网络设置。 + + [用户网络(SLIRP)][slirp]{: .external}是 macOS 上 FEMU 的默认网络设置——虽然此设置不支持 Fuchsia 设备发现,但您仍然可以使用 `fx` 工具(例如,`fx ssh`)与您的 FEMU 实例进行交互。 From 9b54da9b6debf48e02136bf769e0c42e6e98ecab Mon Sep 17 00:00:00 2001 From: y2-Whyto Date: Thu, 18 Aug 2022 11:34:48 +0800 Subject: [PATCH 132/154] =?UTF-8?q?=E6=B4=BB=E8=B7=83=20->=20=E4=B8=BB?= =?UTF-8?q?=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- development/hardware/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/development/hardware/README.md b/development/hardware/README.md index 4e61cc7d..b4f9ddac 100644 --- a/development/hardware/README.md +++ b/development/hardware/README.md @@ -54,13 +54,13 @@ Fuchsia 对于 CPU 的支持: have new features added for them. Additionally, we will accept patches to keep Nehalem and later booting. --> -* Intel——对于 Intel CPU,只有 Broadwell 及更高版本是受到活跃支持的,并且会添加新的功能。另外,我们将接受补丁,以保持 Nehalem 及更高版本正常引导。 +* Intel——对于 Intel CPU,只有 Broadwell 及更高版本是受到主动支持的,并且会添加新的功能。另外,我们将接受补丁,以保持 Nehalem 及更高版本正常引导。 -* AMD——AMD CPU 是**不**受活跃支持的(具体地,我们对其没有进行活跃测试),但是我们将接受补丁,以确保其正确引导。 +* AMD——AMD CPU 是**不**受主动支持的(具体地,我们对其没有进行主动测试),但是我们将接受补丁,以确保其正确引导。 * `--net` 指定模拟器的网络模式。`--net tap` 附加到 Tun/Tap 接口。 -如果您的设备可以使用 KVM,更新您的组权限来启用 KVM。 +如果您的设备可以使用 KVM,请更新您的组权限来启用 KVM。 * {Linux} - 要在您的设备上启用 KVM,执行以下操作: + 要在您的设备上启用 KVM,请执行以下操作: -注意:或者,您可以后台处理 `fx serve` 进程。 +注意:或者,您可以将 `fx serve` 进程置为后台。 - 如果在您的 maxOS 上第一次启动 FEMU(包括重启之后),则会弹出一个窗口询问您是否要允许 `aemu` 进程在您的设备上运行。点击 **Allow**。 + 如果在您的 maxOS 上第一次启动 FEMU(包括重启之后),则会弹出一个窗口询问您是否要允许 `aemu` 进程在您的设备上运行。请点击 **Allow**。 -[get-fuchsia-source]: /docs/get-started/get_fuchsia_source.md -[build-fuchsia]: /docs/get-started/build_fuchsia.md -[femu-overview]: /docs/development/build/emulator.md +[get-fuchsia-source]: /get-started/get_fuchsia_source.md +[build-fuchsia]: /get-started/build_fuchsia.md +[femu-overview]: /development/build/emulator.md [ffx-emu-reference]: https://fuchsia.dev/reference/tools/sdk/ffx#emu [hypervisor-framework]: https://developer.apple.com/documentation/hypervisor -[explore-fuchsia]: /docs/get-started/explore_fuchsia.md +[explore-fuchsia]: /get-started/explore_fuchsia.md [swiftshader]: https://swiftshader.googlesource.com/SwiftShader/ [tuntap]: https://en.wikipedia.org/wiki/TUN/TAP [tap-networking]: https://wiki.qemu.org/Documentation/Networking#Tap From 7636eca472743e793fa599ea0788ba89ccda2868 Mon Sep 17 00:00:00 2001 From: y2-Whyto Date: Sat, 20 Aug 2022 15:57:46 +0800 Subject: [PATCH 135/154] Revert "Merge branch '2022' into 6_explore" This reverts commit 767b33f1674574756a60711278672ea36c171859, reversing changes made to 7e82904d8e967d16776393f9158e7f9dab09f45d. --- README.md | 5 +- contribute/docs/documentation-standards.md | 269 ------------------ contribute/docs/documentation-style-guide.md | 197 +------------ .../governance/rfcs/0001_rfc_process.md | 12 +- .../rfcs/0007_remove_thread_killing.md | 232 ++++++--------- general-translation-guide.md | 11 +- .../_common/components/_debugging_intro.md | 3 - .../_common/components/_declaring_intro.md | 9 - .../components/_declaring_manifests.md | 41 +-- .../_common/components/_declaring_shards.md | 29 +- .../components/_organizing_identifying.md | 12 +- .../_common/components/_organizing_intro.md | 74 ----- .../components/_organizing_lifecycle.md | 30 +- .../_common/components/_product_driver.md | 12 - .../_common/components/_product_session.md | 12 +- .../_common/components/_tests_intro.md | 12 - get-started/_common/fidl/_connecting_intro.md | 30 +- get-started/_common/fidl/_fidl_intro.md | 24 -- get-started/_common/fidl/_overview.md | 12 - get-started/_common/fidl/_testing_intro.md | 3 - get-started/_common/intro/_architecture.md | 27 +- .../_common/intro/_components_intro.md | 24 +- get-started/_common/intro/_overview.md | 11 +- .../_common/intro/_sandboxing_intro.md | 3 - .../_common/intro/_sandboxing_namespaces.md | 42 +-- .../_common/intro/_sandboxing_sandboxing.md | 36 +-- get-started/_common/intro/_zircon_syscall.md | 46 +-- get-started/build_fuchsia.md | 196 ++++--------- get-started/explore_fuchsia.md | 75 +++-- get-started/get_fuchsia_source.md | 196 +------------ get-started/learn/intro/architecture.md | 3 +- get-started/learn/intro/sandboxing.md | 70 +---- glossary-translation.md | 24 +- 33 files changed, 261 insertions(+), 1521 deletions(-) delete mode 100644 contribute/docs/documentation-standards.md diff --git a/README.md b/README.md index 8b10ddf1..2af2bd9d 100644 --- a/README.md +++ b/README.md @@ -46,6 +46,7 @@ ## PR 提交要求 1. 多个翻译请**分文件提交 PR**,即新建分支(branch),在每个分支中只更改一个文件并提交; - 1. PR 提交时请在**标题区域包含文件的绝对路径**,以便进行查找、核对和记录; + 1. PR 提交时请在**标题区域包含文件名**,以便进行记录; 1. PR 的标题和内容最好使用中文; - 1. 为避免做重复性工作,最好在翻译时**先试译若干节**,并将 PR **[以草稿形式提交](https://docs.github.com/cn/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests#draft-pull-requests)**([创建草稿 PR](https://docs.github.com/cn/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request-from-a-fork) 或[提交 PR 后进入并在右侧选择转换为草稿](https://docs.github.com/cn/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/changing-the-stage-of-a-pull-request#converting-a-pull-request-to-a-draft)),以便校对人员提前开始校对,及时修正当前翻译中存在的可能会在下文中重复出现的格式或内容问题。 + 1. 为避免做重复性工作,请在翻译时**先试译若干节**,并将 PR **[以草稿形式提交](https://docs.github.com/cn/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests#draft-pull-requests)**([创建草稿 PR](https://docs.github.com/cn/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request-from-a-fork) 或[提交 PR 后进入并在右侧选择转换为草稿](https://docs.github.com/cn/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/changing-the-stage-of-a-pull-request#converting-a-pull-request-to-a-draft)),以便校对人员提前开始校对,及时修正当前翻译中存在的可能会在下文中重复出现的格式或内容问题。 + diff --git a/contribute/docs/documentation-standards.md b/contribute/docs/documentation-standards.md deleted file mode 100644 index fa9319c3..00000000 --- a/contribute/docs/documentation-standards.md +++ /dev/null @@ -1,269 +0,0 @@ - -# 文档标准概述 - - -本文档概述了 Fuchsia 文档的标准、结构、语言风格和最佳做法。 - - -## 文档定位 - - - * **为开发 Fuchsia 具体特性的专门文档:** - 针对开发者创建或维护 Fuchsia 代码库特定部分的文档,应当和源代码保存在同一目录下。这类文档通常以 `README.md` 文件的形式嵌入在 Fuchsia 代码库中。 - - * **面向 Fuchsia 开发者的总体文档:** Fuchsia 文档应当创建在 /HEAD/docs/ 中. - 在 `/docs/` 目录下,您应当在以下子目录之一内创建文档: - - * get-started: - - 有关下载、设置、开始 Fuchsia 开发的具体指南应当放进 `/get-started`。这类内容应当包含观点明确的、简短的教程,以帮助新用户入门 Fuchsia,并在 Fuchsia.dev 中链接至附加文档。 - * development: - - `/development/` 目录(在网站上显示为“指南”(Guides))中包含了针对Fuchsia开发者的说明和教程。该目录包含关于如何构建、运行和测试 Fuchsia 的文档。 - * concepts: - - `/concepts` 目录包含针对 Fuchsia 具体特性及其工作原理的深入解释,包括操作系统概述、框架、架构和软件包(package)。 - * reference: - - `/reference/` 目录包含自动生成的关于 Fuchsia 工具和 API 的参考文档,包括 FIDL 和内核的参考文档。 - * contribute: - - `/contribute/` 目录包含代码和文档的贡献进度以及最佳做法,包含文档准则和风格指南、代码策略以及管理体系。 - * `images` - - `/images/` 目录包含在文档中使用的图像。您应当将图像放在这一公共目录中。 - - -## 文档类型 - - -大多数文档可以分为以下几类: - - -- [程序性的](documentation-types.md#procedural-documentation) - - 入门 - 初始设置的文档 - - 指南 - 任务导向的文档 - - -- [概念性的](documentation-types.md#conceptual-documentation) - 多侧重于教授 Fuchsia、Fuchsia 架构和 Fuchsia 组件的基础性文档 - - -- [参考文档](documentation-types.md#reference-documentation) - 侧重于详细说明 Fuchsia API 和 工具的语法和参数的文档。这类文档通常自动生成。 - - -要获取更多信息,请参阅[文档类型](documentation-types.md)。 - - -## 文档和代码风格指南 - - -为确保由大量贡献者创建的文档都保持一致性,遵循文档风格指南很重要。要获取具体文档指导,请参阅[文档风格指南](documentation-style-guide.md);要获取代码样例指导,请参阅[代码样例风格指南](code-sample-style-guide.md)。 - - - -## 搜索的最佳做法 - -文档只有在用户能查到的时候才算有用。下面是一些关于可查性和搜索的最佳做法: - - - 将您的文档添加至目录:在 fuchsia.dev 的左侧导航中添加文档链接。要获取更多信息,请参阅[网站导航和目录文件](documentation-navigation-toc.md) - -- 交叉链接文档:添加指向文档主题的链接,以帮助读者更好地理解文档的内容。 例如,[Fuchsia 模拟器] (/development/build/emulator.md) 的概念文档链接到有关 Fuchsia 模拟器的相关指南和入门文档。 - -- 使用一致的术语:如果您在撰写有关 Fuchsia 中特定概念的文章,请确认您使用的是一致的术语。 使用[术语表](/glossary/README.md)来验证用语。 - - -## 文档的文件格式和文件名 - - -Fuchsia 的所有文档均使用 Markdown(`.md`)撰写,Fuchsia.dev 使用 [Hoedown Markdown Parser](https://github.com/hoedown/hoedown) 作为 Markdown 文档语法分析器。 - - -该网站的导航是由 `_toc.yaml` 文件配置的,该文件包含在每个文档目录中。请使用[网站导航和目录文件](documentation-navigation-toc.md)中的指导来更新这些文件。 - - -文件和目录名应当为小写,并使用短横线(hyphen)而非下划线(underscore)来分隔单词。在文件或目录名中请仅使用标准 ASCII 字母数字字符。如果文件名包含带有下划线的命令,那么您可以包含下划线。 - - -## 语言风格总体指导 - - -- **使用通俗易懂的美国英语撰写。** 使用清晰、直白的美国英语撰写,以使内容易于理解。请使用简单的词汇,保持简洁,并使用(常见)缩写,如 _it's_ 或 _don't_。 - -- **心怀敬意。** 请遵循[尊重性规范](/contribute/respectful_code.md)中规定的方针。 - -- **使用第二人称(“you”)撰写。** Fuchsia文档是写给用户(“you”)的。例如,“您(you)可以通过以下步骤安装 Fuchsia……”。不要使用第三人称称呼读者(“Fuchsia 用户可以通过……安装 Fuchsia”)或使用“we”(“我们(we)可以通过……安装 Fuchsia”)。 - -- **使用现在时态撰写。** 请在记录系统时始终立足眼下(it is),而非未来(it will be)。类似“will”之类的词语非常含糊。例如“您将看到”这种说法将引起如“我何时将会看到?”之类的问题。1分钟,还是20分钟呢?另外,若非必要,请不要提及未来的产品特性。提及可能取消的未来计划将导致维护上的困难。 - -- **保持语句简短具体。** 使用标点符号可以便于您的读者跟进说明、理解概念。而且,短句更易于翻译。 - -- **了解您的受众群体。** 在撰写文档之前,请确定好您的受众群体。了解受众群体使您能够明确他们应当熟悉的概念。当撰写面向更高级受众群体的文档时,请在文档前声明,让用户了解这一前提后,再进行阅读。 - -- **使用主动语态。** 请尽量使用主动语态写作,因为被动语态会使句子模棱两可且难以理解。 下面是一个例子: - - 主动语态:“操作系统运行一个进程。”(The operating system runs a process.)在这种情况下,主语执行动词表示的动作。 - - 被动语态:“一个进程正在被运行。”(A process is being run.)主语不再是“主动的”(_active_),而是被动词作用——它是“被动的”(_passive_)。 - 大多数情况下,如果您使用了“by”,那么您的句子可能仍然是被动语态。 - - -- **若使用首字母缩写词,请您在第一次书写时进行定义。** 例如,looks good to me(LGTM,我觉得看起来很好)。不要认为每个人都理解所有的首字母缩写词。您不需要定义工业标准首字母缩写词,如 TCP/IP。 - - -- **定义技术术语,回避行话。** Fuchsia 文档应当易于各个层次的开发者理解。请避免使用不常用或高度技术性词语而使得文章过于复杂。如果您使用了 Fuchsia 特定的术语,请在[术语表](/glossary/README.md)中对其进行定义。请回避自造词。 - - -- **回避口头表达或地区习语。** 请记住,许多 Fuchsia 用户并非英语母语者。请避免使用难于翻译的习语,例如“that's the way the cookie crumbles.”(生米已成熟饭/覆水难收)虽然对您而言能够理解,但是很难准确地翻译到其他语言中。 - - -- **避免引用专有信息。** 这里指的是任何可能是已注册商标的任何潜在词语或您公司的任何内部信息(API 密钥、机器名等)。 - - -- **使用性别中立代词。** 请不要使用 _he_,_him_,_his_,_she_ 或 _her_,也不要使用 _he/she_ 或 _(s)he_ 等其他类似的符号表达方式。取而代之,请使用单数的 _they_。 - - -- **使用一致的术语。** 确保术语在代码、用户界面和文档中是一致的。尽可能使用常见术语,并使用[术语表](/glossary/README.md)来验证用语。 diff --git a/contribute/docs/documentation-style-guide.md b/contribute/docs/documentation-style-guide.md index 5b750e55..4c182bb5 100644 --- a/contribute/docs/documentation-style-guide.md +++ b/contribute/docs/documentation-style-guide.md @@ -1,23 +1,13 @@ - -# 文档风格指南 - -本文档给出了针对 Fuchsia.dev 写作风格的指南。这些方针基于[Google 开发者风格指南][google-dev-doc-style-guide]中的通用指导。 - -注意:本指南重点介绍了为 Fuchsia 编写文档的一些最佳做法。其中的某些主题在以下文档的资源中可能会得到更为广泛的探讨: - -* 要获取关于通用文档标准的信息,包括文件类型、位置和整体语言风格,请参阅 [Fuchsia 文档标准][doc-standard]。 -* 要获取关于措辞、风格和结构的具体指导,请参阅 [Fuchsia 文档风格指南][style-guide]。 -* 要获取完整的 Markdown 参考指南,请参阅 [Markdown 参考指南][markdown-guide]。 - -## 文字和链接 - -### 遵循 80 字符限制 - -在 Fuchsia 项目中,代码的行最大长度为 100 字符,而文档的行最大长度为 80 字符。该规则一个值得注意的例外情况是网址(即链接),写在一行中,不换行。 - -代码常使用缩进(页面左侧的空格),而英文散文(文档)多形成文字段落。这种差异导致了不同的宽度规格。 - -### 标记外部链接 - -请使用 `{:.external}` 标记任何不属于 `fuchsia.dev`、 -`fuchsia.googlesource.com` 或 `fuchsia-review.googlesource.com` 的链接: - -```none -这是一个[外部](http://example.com){:.external}链接。 ``` - -注意外部链接标志:这是一个[外部][external-link-example]{:.external}链接。 - -### 使用参考风格的链接 - -一般来说,Fuchsia 建议在 Markdown 文件中使用参考风格(reference-style)的链接。 参考风格链接使用与链接相关联的参考标识符,接下来每当您在文档中使用该链接时,即可引用该标识符。这使得文档中的链接易于更新。 - -推荐:请在您需要链接的位置创建标识符。 - - -本例中,链接标识符称为 `fuchsia-home`: - -```none -欢迎来到 [Fuchsia 首页][fuchsia-home]。 ``` - - -接着在文档底部对其定义: -
[fuchsia-home]: https://fuchsia.dev/
- - -不推荐:编写如下的行内链接: - -```none -欢迎来到 [Fuchsia 首页](www.fuchsia.dev)。 -``` - -您可以在外部的 [Markdown 指南][markdown-reference-links]中阅读更多与参考风格链接有关的信息。 - -### 对不同的 Fuchsia 内容使用正确链接 - -在 Fuchsia 文档中您可以为三类内容添加链接: - -* `/docs/` - 链接至位于 Fuchsia 源树中 `/docs/` 目录内的文档。这些链接必须关联到具有 `.md` 扩展名的文件。例如,`/concepts/README.md`。 -* 源代码 - 链接至位于 Fuchsia 源树中的源代码文件。这些链接可以关联到任何文件扩展名,但这些文件必须存在于源树中。例如,`/src/sys/sysmgr/main.cc`。 -* 参考文档 - 链接至自动生成的 Fuchsia 参考文档。 - * 大多数 Fuchsia 参考文档不存在于源树内,但在 [fuchsia.dev][fuchsia-dev] 上发布了。这些链接必须使用完全限定的网址。例如,`https://fuchsia.dev/reference/fidl/fuchsia.io`。 - * 不过,一些 Fuchsia 参考文档存在于源树内。这些文档位于 `/reference/`,并在 `https://fuchsia.dev/fuchsia-src/reference/` 中发布。这些链接必须关联到具有 `.md` 扩展名的文件。例如,`/reference/syscalls/bti_create.md`。 - - -### 测试您的链接后再提交更改 - -一旦创建了有效的 markdown 文件,您应当运行 `doc-checker` 以确保您的文件使用了有效的链接。当您试图提交包含 `.md` 文件的更改时,Gerrit 会运行 `doc-checker`,并会在您的提交中含有损坏链接时进行阻止。 - -要在本地运行 `doc-checker`,请使用 `fx format-code` 工具: ```posix-terminal fx format-code ``` - -## 标题 - -### 为页面和章节标题使用句首字母大写格式 - -推荐:使用句首字母大写格式(sentence case): ```none # This title is an example of sentence case ``` - -不推荐:使用标题词首大写格式(title case): ```none # This Title is an Example of Title Case ``` - -### 为锚点使用连接号,不要使用下划线 - -默认情况下,`fuchsia.dev` 创建锚点时会在在空格处使用下划线(`_`)。不过,当引用一个页面中的章节时,请使用连接号(`-`,dash),使用 `{#section-title}` 创建自定义锚点。同样地,请在文件名中使用连接号。 - -推荐:为锚点使用连接号 - -```none - ## 这是一个章节标题 {#this-is-a-section-header} -``` - -## 代码样例 - -### 为 shell 命令样例使用 posix-terminal 格式化 - -推荐:为 shell 命令在 ``` 后添加 `posix-terminal` 能让读者更容易复制代码块中的内容。 -
 ```posix-terminal
@@ -283,127 +149,66 @@ fx ota
 ```
 
- -该代码块在渲染时,命令前会出现 `$`: ```posix-terminal fx ota ``` - -不推荐:请勿在命令里硬编码 `$` 字符。 ```sh $ fx ota ``` - -### 使用 none 以禁用复制功能 - -推荐:对于不需要读者复制内容的代码或输出样例,请在 ``` 后添加 `none {:.devsite-disable-click-to-copy}`。 - -
-```none {:.devsite-disable-click-to-copy}
-$ my_command
-不必复制和粘贴该代码块。
-```
 
- -该代码块在渲染时,右上角没有复制标志: - - ```none {:.devsite-disable-click-to-copy} -$ my_command -不必复制和粘贴该代码块。 ``` - -不推荐:为只需查看的内容启用复制功能。如果您在 ``` 之后不指定任何内容,那么复制功能默认是启用的。 - -
-```
-$ my_command
-不必复制和粘贴该代码块。
-```
 
- -该代码块渲染为如下形式: - -``` -$ my_command -不必复制和粘贴该代码块。 ``` - -### 引用源代码时使用路径,不要使用网址 - -推荐:任何引用源代码的链接应当仅使用路径引用。否则您将收到静态错误检查(static error check)。 - -
-更新[状态标头][sh]
-[sh]: /zircon/system/ulib/inspect/include/lib/inspect/cpp/vmo/state.h
 
@@ -415,4 +220,4 @@ Update the [state header][sh] [google-dev-doc-style-guide]: https://developers.google.com/style [markdown-reference-links]: /contribute/docs/markdown.md [external-link-example]: http://example.com -[fuchsia-dev]: https://fuchsia.dev +[fuchsia-dev]: https://fuchsia.dev \ No newline at end of file diff --git a/contribute/governance/rfcs/0001_rfc_process.md b/contribute/governance/rfcs/0001_rfc_process.md index 728cc74b..fc97df8f 100644 --- a/contribute/governance/rfcs/0001_rfc_process.md +++ b/contribute/governance/rfcs/0001_rfc_process.md @@ -27,7 +27,7 @@ establishing a consistent and transparent path for making project-wide, technical decisions, all the stakeholders can be confident about the technical direction of the project. --> -现在,Fuchsia 项目在项目级别的技术决定上并没有一个正式的工作流程。以我们目前的规模来说,这样的非正式性导致了不同的人在项目方向和如何组合系统上有着不同的看法。 通过建立这样一个一致且透明的项目标准, 所有的利益相关者都能够在项目的技术方向充满信心。 +现在,Fuchsia 项目在项目级别的技术决定上并没有一个正式的工作流程。以我们目前的规模来说,这样的非正式性导致了不同的人在项目方向和如何组合系统上有着不同的看法。 通过建立这样一个一致且透明的项目标准, 所有的利益相关者都能够在项目的技术方向充满信息。 @@ -72,7 +72,7 @@ The following kinds of changes must use the RFC process: changing the set of supported languages impacts everyone who needs to debug and understand the system, even if not everyone uses the new language. --> - * **制定项目政策。** 项目政策对系统有着广泛的影响,常常影响着项目贡献者。比如,修改支持的(编程)语言集,会影响需要调试和理解系统的人员,即使并不是所有的人都使用新语言。 + * **制订项目政策。** 项目政策对系统有着广泛的影响,常常影响着项目贡献者。比如,修改支持的(编程)语言集,会影响需要调试和理解系统的人员,即使并不是所有的人都使用新语言。 -#### 第二步:起草 {#draft} +### 步骤二:起草 {#draft} -在这个阶段不必担心您的 RFC 的序号。反之,请使用 `NNNN` 作为占位符。比如,一个文件的名字应该是 `NNNN_my_idea.md` 这种形式。RFC 文档会在合并之前不久获得一个序号。 +在这个阶段不必担心您的 RFC 的序号。反之,请使用 `NNNN` 做为占位符。比如,一个文件的名字应该是 `NNNN_my_idea.md` 这种形式。RFC 文档会在合并之前不久获得一个序号。 -> **建议:** 您可以在准备好接收反馈之前,先把包含 RFC 的 CL 标记为“进行中”。 +> **建议。** 您可以在准备好接收反馈之前,先把包含 RFC 的 CL 标记为“进行中”。 -利益相关者将代码审查标志设为 -1 或者 -2 并不一定会阻止项目接受该 RFC。要获取关于 RFC 接受决定流程的更多细节,请参阅下面的[“决定如何做出”章节](#how-decisions-are-made) 。 +利益相关者将代码审查标志设为 -1 或者 -2 并不一定会阻止项目接收该 RFC。要获取关于 RFC 接受决定流程的更多细节,请参阅下面的[“决定如何做出”章节](#how-decisions-are-made) 。 - - -## 概述 - - -过去,`zx_task_kill` 允许在用户态杀死单个线程。但是,杀死单个线程会为不良做法提供支持,并且很有可能使进程处于不良状态。出于这个原因,应该删除杀死单个线程的能力。 - - -## 动机与问题陈述 - - -对于用户态而言,杀死单个线程的做法没有合理用途。暴露此类能力会为不良做法提供支持。 - - -在 Fuchsia 上,和其他系统一样,杀死一个线程是异步完成的;对于正在运行的线程,没有实用的方法来确定可安全终止线程的确切位置。对于阻塞(等待)状态的线程,通常更安全且简单的解决方案是添加逻辑,以便在唤醒后线程自行退出。 - - -杀死线程的危险 - - -* 锁可以被保持获取,包括像控制堆这样的全局锁。 -* 内存可能会泄漏。至少线程堆栈可能泄漏,但通常还有许多其他部分的内存会泄漏。 -* 运行时处于不一致的状态。至少对于 C 和 Go 运行时来说是这样。 -* 以系统调用的方式杀死一个线程会使进程处于未知状态。这对内核没有影响,但该进程无法知道发生了什么以及没有发生什么。 -* 破坏 RAII 包装器和自动清理。事实上,它破坏了 Fuchsia 使用的高级语言的大多数保证机制。 - - -## 设计 - - -当将句柄被传递给线程时,以下系统调用将失败并返回`ZX_ERR_NOT_SUPPORTED`: - -``` -zx_status_t zx_task_kill(zx_handle_t handle); -``` - - -进程和作业仍然可以正常地被杀死。 - - -## 实现 - - -幸运的是,Fuchsia 中并没有太多使用到杀死线程。唯一的用例是在检查线程是否遇到特定异常的测试代码中。此代码将被更新,以便异常线程在异常被处理后自行退出。对于异常无法恢复的代码,可以在线程恢复前,将异常线程的指令指针直接设置为 zx_thread_exit 或运行时的线程退出函数。这些测试可能仍然会泄漏异常线程存储在堆上的内容,但运行时会处于一个更好的状态,并且会在测试的进程退出时收集泄漏的内容。 - - -## 性能 - -N/A - - -## 安全性考虑 - -N/A - - -## 隐私问题 - -N/A - - -## 测试 - - -Zircon 核心测试将被更新,以确保 zx_task_kill 系统调用按预期运行。可以进行一些静态分析来找到传递线程的 zx_task_kill 的调用点。 - - -将遵循完整的 Fuchsia 大型变更(Large Scale Change,LSC)流程,以确保这一变化被正确测试。 - - -## 文档 - - -[zx_task_kill](/reference/syscalls/task_kill.md) 的文档将被更新以反映线程不可杀死。 - - -## 缺点、替代方案和未知因素 - - -该提议的替代方案是当前的现状,即允许线程被杀死。在 Fuchsia 的整个历史中,线程都是可以被杀死的,但是没有任何可接受的用例表明程序依赖于这种行为。出于这个原因,我们相信可以安全地删除线程杀死功能。 - - -## 现有技术和参考文献 - - -* [Windows Vista 尝试移除 TerminateThread 方法](https://devblogs.microsoft.com/oldnewthing/20150814-00/?p=91811) +{% set rfcid = "RFC-0007" %} +{% include "docs/contribute/governance/rfcs/_common/_rfc_header.md" %} +# {{ rfc.name }}: {{ rfc.title }} + + +## Summary + +In the past, `zx_task_kill` allowed usermode to kill individual threads. However, +killing individual threads encourages bad practices and has a high chance of leaving +the process in a bad state. For this reason, the ability to kill individual threads +should be removed. + +## Motivation and problem statement + +There is no reasonable use for usermode to kill individual threads. Exposing such facility +encourages bad practices. + +On Fuchsia, like other systems, killing a thread is done asynchronously; for running threads there +is no practical way to determine the exact place where it is safe to terminate a thread. For a +blocked (waiting) thread, the safer and often simple solution is to add logic so upon wakeup the +thread exits by itself. + +Dangers killing a thread + +* Locks can be left acquired, including global locks like ones controlling the heap. +* Memory can be leaked. At the very least the thread stack, but often many other pieces. +* Runtime left in an inconsistent state. This is at least true for the C and Go runtime. +* Killing a thread in its way to a syscall leaves the process in an unknown state. Kernel is + fine but the process does not have a way to know what happened and what did not happen. +* Defeats RAII wrappers and automatic cleanup. In fact, it defeats most guarantees from the high + level languages Fuchsia uses. + +## Design + +The following syscall will fail with `ZX_ERR_NOT_SUPPORTED` when passed a handle to a thread: + +``` +zx_status_t zx_task_kill(zx_handle_t handle); +``` + +Processes and jobs will still be killable as normal. + +## Implementation + +Luckily, thread killing is not used very much in Fuchsia. The only use cases are in test code +that checks that a thread hits a specific exception. This code is going to be updated so that +the excepting thread exits itself after the exception is handled. For code where the exception +is unrecoverable, the excepting thread's instruction pointer can be set directly to +zx_thread_exit or the runtime's thread exit function before the thread resumes. These tests +may still leak what the excepting thread had stored on the heap, but the runtime is in +a better state, and the leaks will be collected when the test's process exits. + +## Performance + +N/A + +## Security considerations + +N/A + +## Privacy considerations + +N/A + +## Testing + +The zircon core-tests will be updated to ensure that the zx_task_kill syscall behaves as intended. +Some amount of static analysis can be done to find call sites of zx_task_kill that are passed +threads. + +The full Fuchsia Large Scale Change (LSC) process will be followed to ensure this change is +properly tested. + +## Documentation + +The documentation for [zx_task_kill](/reference/syscalls/task_kill.md) will be updated to +reflect that threads are not killable. + +## Drawbacks, Alternatives, and Unknowns + +The alternative to this proposal is the current status quo, which is to allow threads to be +killed. Threads have been killable for the entire history of Fuchsia, but there has not been +any acceptable use cases where programs have relied on this behavior. For this reason, +we believe that thread killing can be safely removed. + +## Prior art and references + +* [Windows Vista tries to remove +TerminateThread](https://devblogs.microsoft.com/oldnewthing/20150814-00/?p=91811) diff --git a/general-translation-guide.md b/general-translation-guide.md index f79451a3..5d52bbde 100644 --- a/general-translation-guide.md +++ b/general-translation-guide.md @@ -69,12 +69,8 @@ 1. 英文和中文非标点、数字和中文非标点间请用 1 个空格分割;英文或数字与中文标点间请不要空格。可以考虑使用[该软件](https://pypi.org/project/zhlint/)或类似程序进行自动化排版。 -1. **请不要参照英文写法在译文段落内添加单个换行**。单个换行会使得渲染后的文档内出现多余的空格。 - 1. 为提高校对时文本的可读性,请尽量分段翻译,避免一次性注释过多段落并进行大段翻译。 - - ### 翻译规范 1. 请至少在同一目录下保持措辞一致。 @@ -124,7 +120,7 @@ 1. 原文是内联代码格式的、具有可读性的非代码内容的。 1. 原文描述的是英文语境内容,强调了该处英文形式,且具有准确中文翻译的。 - 对于**所在位置不是标题中的**,请使用下面的方式标注: + 则请使用下面的方式标注: - 如果原文不涉及全称和简称问题,则请在译文对应位置后使用全角括号标注英文原文。另外,如果原文在代码区内,则请在代码区外标注。 - 如果原文同时具有全称和简称,或原文是未给出全称的专业术语简称,则请在译文对应位置后使用全角括号依次标注全称和简称,并在中间使用全角逗号分隔。另外,如果原文在代码区内,则请在代码区外标注。 @@ -153,11 +149,6 @@ 具体地,第一例中只包含全称,因此正常使用全角括号标注;第二例中包含了英文简称,故在全角括号中依次标注全称和简称,并使用全角逗号分隔;第三例在 [Google 公司的帮助文档](https://developer.android.com/guide/platform#:~:text=%E9%A2%84%E5%85%88%20(AOT)%20%E5%92%8C-,%E5%8D%B3%E6%97%B6%20(JIT)%20%E7%BC%96%E8%AF%91,-%E4%BC%98%E5%8C%96%E7%9A%84)中已有译例,因此按照固定方式翻译和标注。 - 对于**所在位置是标题中的**,请使用下面的方法标注: - - - 如果在正文中出现了该概念,则应当在正文进行标注,而不应在标题中进行标注。 - - 如果在正文中未出现该概念,则除非:(1)翻译具有较大歧义性,或(2)在其他文章中再次出现(即证明本身是重要概念),这些情况可以在标题中标注原文,否则不应在标题中标注原文(即不进行标注)。 - - **原文作正文,标注译文。** 如果满足下列条件之一: 1. 原文是未适配中文的输出内容的。 diff --git a/get-started/_common/components/_debugging_intro.md b/get-started/_common/components/_debugging_intro.md index 510739ec..7b37df46 100644 --- a/get-started/_common/components/_debugging_intro.md +++ b/get-started/_common/components/_debugging_intro.md @@ -1,7 +1,4 @@ - -开发软件意味着要处理程序崩溃和发现错误的根源。Fuchsia 有一套工具来帮助识别和诊断组件中的问题,从分析崩溃日志到在核心代码中进行完整的逐步调试。 diff --git a/get-started/_common/components/_declaring_intro.md b/get-started/_common/components/_declaring_intro.md index 8ee335b4..395e91b2 100644 --- a/get-started/_common/components/_declaring_intro.md +++ b/get-started/_common/components/_declaring_intro.md @@ -1,24 +1,15 @@ - -每个组件(component)都有一个声明,描述组件属性和功能。对于在软件包中分发的组件,其声明使用**组件清单(component manifest)文件**表示,并在**组件解析器**的帮助下加载。 - -![该图显示了如何使用“组件清单”来声明组件。该清单由开发者工具编译,并在运行时解析到设备上。](/get-started/images/components/component-manifest.png){: width="836"} - -请您使用组件清单语言(CML)文件声明组件。在构建时,组件清单编译器(`cmc`)工具会验证清单源并将其编译为二进制格式(`.cm`),并将其存储在组件的软件包中。在运行时,组件解析器将二进制清单文件加载到[组件管理器](/glossary/README.md#Component-Manager)的 [ComponentDecl](https://fuchsia.dev/reference/fidl/fuchsia.component.decl#Component) FIDL 结构中。 diff --git a/get-started/_common/components/_declaring_manifests.md b/get-started/_common/components/_declaring_manifests.md index 2cbfe72c..dab204a6 100644 --- a/get-started/_common/components/_declaring_manifests.md +++ b/get-started/_common/components/_declaring_manifests.md @@ -1,14 +1,9 @@ - -## 组件清单 +## Component manifests - -CML 文件是以 `.cml` 扩展名结尾的 [JSON5](https://json5.org/){: .external} 文件。如下 CML 清单文件示例,描述了一个运行 ELF 二进制文件的简单组件,该文件向系统日志打印一条“Hello, World”信息: - -```json5 -{ - // 有关要运行的程序的信息。 - program: { - // 使用内置的 ELF 运行器。 - runner: "elf", - // 为此组件运行的二进制文件。 - binary: "bin/hello", - // 程序参数 - args: [ - "Hello", - "World!", - ], - }, - - // 此组件使用的能力。 - use: [ - { protocol: "fuchsia.logger.LogSink" }, - ], -} ``` - -该文件声明了关于组件的两个主要部分的信息: - -注意:要获取组件清单(component manifest)的更多详细信息,请参阅[组件清单](/concepts/components/v2/component_manifests.md)。 - -* `program`:描述可执行信息,例如二进制文件、程序参数和相关联的运行时。在此示例中,二进制文件被编译为 ELF 可执行文件并使用内置的 [ELF 运行器](/concepts/components/v2/elf_runner.md)。 - -* `use`:声明此组件运行所需的功能。在此示例中,`fuchsia.logger.LogSink` 协议使该组件能够向系统日志(syslog)写入消息。 diff --git a/get-started/_common/components/_declaring_shards.md b/get-started/_common/components/_declaring_shards.md index e4b9db15..f752add6 100644 --- a/get-started/_common/components/_declaring_shards.md +++ b/get-started/_common/components/_declaring_shards.md @@ -1,23 +1,15 @@ - -## 清单碎片 +## Manifest shards - -一些能力集合代表了系统中许多组件所共有的用例需求,例如日志记录。为了简化将这些能力纳入组件的过程,本框架将其抽象为**清单碎片**(Manifest shard),可将其纳入 CML 源文件中。 - -下面是一个与前面的示例等效的 CML。在这种情况下,通过包含 `diagnostics/syslog/client.shard.cml` 文件,而不是显式地声明 `fuchsia.logger.LogSink` 来提供必要的日志记录功能: - -```json5 -{ - include: [ "syslog/client.shard.cml" ], - - // 有关要运行的程序的信息。 - program: { - // 使用内置的 ELF 运行器。 - runner: "elf", - // 为此组件运行的二进制文件。 - binary: "bin/hello-world", - // 程序参数 - args: [ - "Hello", - "World!", - ], - }, -} -``` diff --git a/get-started/_common/components/_organizing_identifying.md b/get-started/_common/components/_organizing_identifying.md index 55ce8032..1c3fd62e 100644 --- a/get-started/_common/components/_organizing_identifying.md +++ b/get-started/_common/components/_organizing_identifying.md @@ -1,31 +1,21 @@ - -## 组件的标记 +## Identifying components - -组件由 URL 标识。框架借助**组件解析器**将组件 URL 解析为组件声明。解析器本身就是能够处理特定 URL 格式并获取组件清单、程序和资源的组件。 - -大多数组件都发布在 Fuchsia 包内,因此组件 URL 是对该包内组件清单的引用。请查看下面的示例: ```none fuchsia-pkg://fuchsia.com/{{ '' }}foo-package{{ '' }}#meta/{{ '' }}foo-component.cm{{ '' }} ``` - -组件实例由称为 **绰号(moniker)** 的拓扑路径引用来标识。组件的绰号将其在组件实例树中的位置指示为绝对或相对路径。例如,绰号路径 `/core/system-updater` 指的是存在于 `core` 领域中的 `system-updater` 的实例。 diff --git a/get-started/_common/components/_organizing_intro.md b/get-started/_common/components/_organizing_intro.md index 8ef85e7c..50f7b8de 100644 --- a/get-started/_common/components/_organizing_intro.md +++ b/get-started/_common/components/_organizing_intro.md @@ -1,37 +1,24 @@ - -系统中的所有组件组成一个有根的**组件实例树**。树中的父组件负责将其他组件的实例声明为其子组件并为它们提供能力。同时,子组件可以向父组件公开能力。这些组件实例和能力关系构成了**组件拓扑**。 - -任何父组件及其所有子组件在树中形成一个称为**领域**的组。领域使父级能够控制那些能力流入和流出其组件的子树,从而创建能力边界。这种封装允许领域在内部进行重组,而不会影响依赖于其公开能力的外部组件。 - -![图表展示了组件实例被组织成一个树,父组件通过“能力路由”确定每个子组件可用的能力。](/get-started/images/components/component-topology.png){: width="616"} - -在上图中,`fuchsia.example.Foo` 协议能力通过组件实例树从提供者路由到客户端。组件使用 `use` 关键字声明它们**需要**的能力: - -```json5 -{ - // 程序运行的有关信息。 - program: { - // 使用内置的 ELF 运行程序来运行二进制文件。 - runner: "elf", - // 运行该组件的二进制文件。 - binary: "bin/client", - }, - - // 此组件所需的能力。 - use: [ - { protocol: "fuchsia.example.Foo" }, - ], -} ``` - -组件使用组件清单中的 `capabilities` 部分声明它们实现或**提供**的能力。这使得组件框架知道该能力和它的提供者。请查看下面的 `provider.cml` 示例: - -```json5 -{ - // 程序运行的有关信息。 - program: { - // 使用内置的 ELF 运行程序来运行二进制文件。 - runner: "elf", - // 运行该组件的二进制文件。 - binary: "bin/provider", - }, - // 此组件提供的能力。 - capabilities: [ - { protocol: "fuchsia.example.Foo" }, - ], - // 通过此组件路由的能力。 - expose: [ - { - protocol: "fuchsia.example.Foo", - from: "self", - }, - ], -} -``` - - -`expose` 关键字使这个组件的能力通过它的父组件向其他领域提供,这也可能包括这个组件的子组件提供的能力。在这种情况下,能力的来源是 `self`,因为这个组件是提供者。 - -父组件控制领域内的**能力路由**,创建从客户端组件到提供者的显式路径。请查看以下 `parent.cml` 清单示例: ```json5 { @@ -160,28 +96,18 @@ example `parent.cml` manifest: } ``` - - - -父组件在领域中声明一组子组件,并使用 `offer` 关键字将能力路由到它们。用这种方法,父组件就决定了每个子组件能力的范围和来源。这也使拓扑中的多个组件能够提供相同的能力,因为组件框架依赖于显式路由来确定如何解析来自每个客户端的请求。 - -注意:要获取关于组件组织的更多详细信息,请参阅[组件拓扑](/concepts/components/v2/topology.md)。 diff --git a/get-started/_common/components/_organizing_lifecycle.md b/get-started/_common/components/_organizing_lifecycle.md index 6e5a9e85..7ae52f80 100644 --- a/get-started/_common/components/_organizing_lifecycle.md +++ b/get-started/_common/components/_organizing_lifecycle.md @@ -1,65 +1,37 @@ - -## 组件生命周期 +## Component lifecycle - -在组件拓扑中添加和移除组件实例时,会创建和销毁组件实例。这可以通过以下两种方式之一发生: - -* **静态地**:该实例在组件清单中被声明为树中另一个组件的子组件。静态组件仅当一个更新改变了组件拓扑时才会创建和销毁。 - -* **动态地**:实例在运行时使用 `fuchsia.component.Realm` 协议在组件 `collection` 中添加或移除。动态组件在系统关闭时销毁。 - -一旦组件被销毁,框架就会移除它的持久状态(比如本地存储)。 - -当一个组件尝试打开到另一组件的通道时(这称为**绑定**(binding)),框架会启动后者的一个组件实例。当连接到由组件所暴露的能力时,绑定会**隐式**发生。对已经启动的组件进行绑定,会连接到其当前运行的实例。 - - - -组件可能会通过退出程序(由组件的 `runner` 定义)自行停止,或者可能由框架在系统关闭时停止。在被销毁之前,框架将组件移动到**关闭**状态以表示它不能再次启动。 - -![该图显示了组件如何具有两种不同的状态:实例和执行。这些状态描述了“组件生命周期”。](/get-started/images/components/component-lifecycle.png){: width="662"} - -注意:要获取关于组件状态和执行的更多详细信息,请参阅[组件生命周期](/concepts/components/v2/lifecycle.md)。 diff --git a/get-started/_common/components/_product_driver.md b/get-started/_common/components/_product_driver.md index 814fc730..e56a8b82 100644 --- a/get-started/_common/components/_product_driver.md +++ b/get-started/_common/components/_product_driver.md @@ -1,25 +1,13 @@ - -## 驱动框架 - -与会话类似,Fuchsia 驱动框架使开发人员能够将产品特定的设备驱动程序实现为组件。一些驱动程序组件代表硬件接口控制器,例如 PCI 或 USB,而其他驱动程序组件则与终端设备交互,例如以太网控制器或键盘。 - -当设备被发现或连接到系统时,`driver_manager` 平台组件启动必要的驱动程序组件,将它们绑定到硬件接口,并管理它们的生命周期。 - -注:要获取关于驱动框架的更多细节,请参阅 [Fuchsia 驱动框架](/development/drivers/concepts/fdf.md)。 diff --git a/get-started/_common/components/_product_session.md b/get-started/_common/components/_product_session.md index 74b6d30e..d776e8c1 100644 --- a/get-started/_common/components/_product_session.md +++ b/get-started/_common/components/_product_session.md @@ -4,16 +4,12 @@ Sessions are components that encapsulate a product’s user experience. The session framework serves as a boundary between the Fuchsia platform and the product-level user interaction. Each Fuchsia product defines a single session instance as the root of the product experience, which may or may not manage -additional child components. --> -会话是一系列封装了产品用户体验的组件。会话框架充当 Fuchsia 平台和产品级用户之间交流的边界。每个 Fuchsia 产品都将单个会话实例定义为产品体验的根,它可能管理,也可能不管理其他子组件。 - +additional child components. The `session_manager` platform component starts the session component on boot and offers it a fixed set of capabilities necessary to support the session framework APIs for elements such as window management, input event handling, or -accessibility. --> -`session_manager` 平台组件在启动时打开会话组件,并为其提供一组固定的功能,以支持诸如窗口管理、输入事件处理或无障碍功能等元素的会话框架 API。 +accessibility. - -注: 要获取关于会话框架的更多细节,请参阅[会话框架介绍](/concepts/session/introduction.md)。 +Note: For more details on the session framework, see +[Introduction to the session framework](/concepts/session/introduction.md). diff --git a/get-started/_common/components/_tests_intro.md b/get-started/_common/components/_tests_intro.md index 982d91d7..9b994c64 100644 --- a/get-started/_common/components/_tests_intro.md +++ b/get-started/_common/components/_tests_intro.md @@ -1,31 +1,19 @@ - -Fuchsia **测试运行器框架**(Test Runner Framework)使开发者能够使用各种语言和运行时为组件构建测试,并在目标设备上执行它们。该框架提供了实现 `fuchsia.test.Suite` 协议的**测试运行器**组件,并与通用的特定语言的测试框架(如 GoogleTest (C++))集成。 - -`test_manager` 组件负责在 Fuchsia 设备上运行测试。它检查实现测试套件协议的组件,并将它们作为子组件启动。这意味着 `test_manager` 也负责为每个测试套件提供能力,即创建通常所谓的**测试领域**。 - -![图中显示了测试运行器框架如何为开发者提供接口来公开测试套件,以及开发者工具如何在 Fuchsia 设备上执行测试。](/get-started/images/components/test-realm.png){: width="714"} - -`ffx test` 等开发者工具与设备上的 `test_manager` 进行通信,以执行测试套件并取回结果。 diff --git a/get-started/_common/fidl/_connecting_intro.md b/get-started/_common/fidl/_connecting_intro.md index d1eecf71..644a0b63 100644 --- a/get-started/_common/fidl/_connecting_intro.md +++ b/get-started/_common/fidl/_connecting_intro.md @@ -1,4 +1,3 @@ - -协议句柄是一个很常见的对象,它提供了一个 FIDL 协议的实现,FIDL 协议可以通过组件命名空间找到。组件框架使用能力促进了[组件](/glossary/README.md#component)之间的协议发现。能力路由描述了哪个组件应该作为任何给定客户端的提供者。一旦确定了适当的组件,[组件管理器](/glossary/README.md#component-manager)就会使用每个组件命名空间中的句柄来启动组件之间的连接。 - -请参考以下 `fuchsia.example.Foo` 协议的示例: - -![图中显示了如何连接组件,组件是能力路由和协议服务的结合。组件必须为它们提供给其他组件的协议的实现来提供服务。](/get-started/images/fidl/protocol-serving.png){: width="629"} - -该图强调了执行连接所涉及的主要元素: - -1. 提供者组件在清单的 `capabilities` 部分中静态地**声明**协议。这使组件框架能够执行能力路由。 - -2. 客户端组件在清单(manifest)的 `use` 部分静态地**请求**协议。如果能力路由成功,这将在客户端的命名空间中创建 `/svc/fuchsia.example.Foo` 协议项。 - -3. 提供者代码在运行时**发布**实现。这将在提供者传出目录中的 `/svc/fuchsia.example.Foo` 处创建一个协议项。 - -4. 客户端代码在运行时**连接**到协议句柄。这将与运行在提供者组件中的实现打开一个 FIDL 连接。 diff --git a/get-started/_common/fidl/_fidl_intro.md b/get-started/_common/fidl/_fidl_intro.md index 02609832..33d69954 100644 --- a/get-started/_common/fidl/_fidl_intro.md +++ b/get-started/_common/fidl/_fidl_intro.md @@ -1,17 +1,11 @@ - -Fuchsia 接口定义语言(FIDL)是用来描述 Fuchsia 程序使用的进程间通信(IPC)协议的语言。FIDL 为供应商提供了一种简化的声明语法,以便将接口定义为一种**协议**。支持的数据类型包括整数、浮点数、布尔运算、字符串和[句柄][glossary.handle]。这些可以被组织成更复杂的数组、向量、结构体、表格和联合体。 - -考虑以下用于 `Echo` 接口的 FIDL 协议的示例。 ```fidl library fuchsia.examples; @@ -21,45 +15,27 @@ library fuchsia.examples; {% includecode gerrit_repo="fuchsia/fuchsia" gerrit_path="examples/fidl/fuchsia.examples/echo.test.fidl" region_tag="echo" adjust_indentation="auto" %} ``` - -FIDL 协议描述了一组**方法**,在通过通道发送消息时被调用。通道消息本身是异步的,发送方和接收方彼此可以独立操作。FIDL 方法引入了更高层次的语义,使 FIDL 交易的客户端和服务器端的编程更加符合传统习惯。 - -FIDL 支持以下方法类型: - -* **双向方法**:一个典型的方法调用是,接受可选的参数,其返回类型定义在 `->` 操作符之后。双向方法会阻塞调用方直到收到响应。在 `Echo` 的例子中,`EchoString()` 方法是一个双向的方法。 - -* **单向方法**:异步方法调用,立即返回而不等待响应。没有声明返回类型的方法被认为是客户端的单向方法。在 `Echo` 的例子中,`SendString()` 方法是一个单向的方法。 - -* **事件**:必要时,服务器端可以向客户端发送非请求信息,这种消息称为事件。事件在 `->` 操作符的返回端声明其方法名称。在 `Echo` 的例子中,`OnString()` 方法是一个事件。 - -注意:要获取 FIDL 语言语法和支持的类型的更多细节,请参阅 [FIDL 语言规范](/reference/fidl/language/language.md)。 [glossary.handle]: /glossary/README.md#handle diff --git a/get-started/_common/fidl/_overview.md b/get-started/_common/fidl/_overview.md index 3e6be97e..1075fdb1 100644 --- a/get-started/_common/fidl/_overview.md +++ b/get-started/_common/fidl/_overview.md @@ -1,34 +1,22 @@ - -您已经在 **Fuchsia 简介**中了解到,Zircon 提供了内核对象类型来支持 Fuchsia 的进程间通信(IPC)。这些对象类型定义了进程用来交换数据的特定机制。在这个框架内,Zircon 通道提供了一个基于消息的异步传输能力,即支持同时传递数据和一组句柄来授予访问权。 - -Zircon 通道是 **Fuchsia 接口定义语言**(Fuchsia Interface Definition Language,FIDL)所描述的更高层次的交互的基础,FIDL 是用来描述 Fuchsia 程序所使用的 IPC 协议的语言。FIDL 允许不同的客户和服务器相互进行操作,通过强制执行一套语义行为和在通道上操作的持久性格式来实现相互操作。 - -程序通过 **FIDL 编译器**生成的特定语言的绑定(binding)和库与 FIDL 协议进行交互,该编译器是用于隐藏 Zircon IPC 复杂性的一个抽象层。这使得我们可以引入熟悉的编程习惯,如结构化类型和同步执行。编译器为每种支持的语言都生成了绑定,因此供应商不需要维护客户端库。 - -![图中显示了 Fuchsia 接口定义语言(FIDL)如何通过一个通用接口促进进程间通信(IPC);与何种编程语言无关。](/get-started/images/fidl/fuchsia-interface.png){: width="870"} diff --git a/get-started/_common/fidl/_testing_intro.md b/get-started/_common/fidl/_testing_intro.md index 20be291d..b1611972 100644 --- a/get-started/_common/fidl/_testing_intro.md +++ b/get-started/_common/fidl/_testing_intro.md @@ -1,4 +1,3 @@ - -[集成测试](https://en.wikipedia.org/wiki/Integration_testing){:.external} 侧重于验证组件的行为,因为它会与系统上其他组件进行交互。正因为如此,集成测试通常与主组件分开构建,并且可能将被测组件和其他依赖组件声明为子组件。根据测试的性质,依赖组件可以作为模拟(mock)或存根(stub)提供,以促进测试用例保持封闭性。 diff --git a/get-started/_common/intro/_architecture.md b/get-started/_common/intro/_architecture.md index 9455f7c9..522c93d6 100644 --- a/get-started/_common/intro/_architecture.md +++ b/get-started/_common/intro/_architecture.md @@ -1,54 +1,29 @@ - -![展示整个 Fuchsia 系统架构的高层图表的数据表,强调了核心组件和子系统] (/get-started/images/intro/fuchsia-architecture.png){: width="1080"} - +The following architectural principles guide Fuchsia's design and development: -以下架构性原则指导了 Fuchsia 的设计与开发: - -* [**简单:**][simple]Fuchsia 让创建、维护和集成软件与硬件在各种设备中都变得容易。 - -* [**安全:**][secure]Fuchsia 有着为现代计算设计的内核和软件模型。 - -* [**可升级:**][updatable]作为模块化操作系统,Fuchsia 允许内核、驱动和软件组件独立升级。 - -* [**高性能:**][performant]Fuchsia 为真实世界产品需求设计,并为性能优化。 - -系统的核心是 [Zircon][glossary.zircon],它是处理系统启动与引导的内核和一组库。其他所有系统组件都实现于用户空间并被隔离,再次强化了**最小特权原则**。这些组件包括: - -* 设备驱动 -* 文件系统 -* 网络栈 [glossary.zircon]: /glossary/README.md#zircon [simple]: /concepts/principles/simple.md diff --git a/get-started/_common/intro/_components_intro.md b/get-started/_common/intro/_components_intro.md index f4aef32b..fbdc8fe7 100644 --- a/get-started/_common/intro/_components_intro.md +++ b/get-started/_common/intro/_components_intro.md @@ -1,28 +1,20 @@ - -**组件**是 Fuchsia 中运行的软件的基石。每一个组件都是可以组合的沙盒模块,相互之间通过功能交互。这提高了系统安全性并在各个组件之间建立了清晰的接口,使它们更容易更新或替换。 +update or replace. - -Fuchsia 中**一切都是组件**(几乎)。回想一下之前对 Zircon 的讨论,内核有意设计得很小,大多数核心服务都是在用户空间中实现。这意味着在 Fuchsia 上运行的大多数软件都是采用组件框架实现的,包括: +including: - -* 面向用户的应用 -* 设备驱动 -* 文件系统 -* 媒体编解码器 -* 网络栈 +* Network stacks - -内核之外只有少数不使用组件框架的底层例外,如引导程序和 `userboot` 进程。 +Outside the kernel there are only a few low-level exceptions not using the +component framework, such as bootloaders and the `userboot` process. diff --git a/get-started/_common/intro/_overview.md b/get-started/_common/intro/_overview.md index fd7b58c0..14ce6cb7 100644 --- a/get-started/_common/intro/_overview.md +++ b/get-started/_common/intro/_overview.md @@ -1,9 +1,6 @@ - -Fuchsia 是谷歌从内核创建的一种新的开源操作系统,旨在满足当今不断增长的互联设备生态系统的需求。 - +Fuchsia is a new open source operating system created at Google from the kernel +up to meet the needs of today's growing ecosystem of connected devices. - -在本培训模块中,您将了解这一新操作系统背后的核心原理,并探索 Fuchsia 如何为开发人员在各种设备上创建经久耐用的产品和体验奠定基础。 +create long-lasting products and experiences across a broad range of devices. diff --git a/get-started/_common/intro/_sandboxing_intro.md b/get-started/_common/intro/_sandboxing_intro.md index e73de119..2e22ab62 100644 --- a/get-started/_common/intro/_sandboxing_intro.md +++ b/get-started/_common/intro/_sandboxing_intro.md @@ -1,6 +1,3 @@ - -在这一章中,您将学习 Zircon 内核对象如何使 Fuchsia 能够遵循**最少特权原则**,隔离进程并只授予他们需要的权限。 diff --git a/get-started/_common/intro/_sandboxing_namespaces.md b/get-started/_common/intro/_sandboxing_namespaces.md index add13543..7fd4a275 100644 --- a/get-started/_common/intro/_sandboxing_namespaces.md +++ b/get-started/_common/intro/_sandboxing_namespaces.md @@ -1,16 +1,11 @@ - -## 命名空间 - -进程的命名空间包含了进程对外界的私有视图,并且控制了进程能够对 Fuchsia 系统造成多少影响。 -这有效地定义了进程所在的沙箱的规则。 - -命名空间由各种资源对象填充,包括: - -* **文件**: 包含二进制数据的对象。 -* **目录**: 包含其他对象的对象。 -* **套接字**: 打开时建立连接的对象,如命名管道。 -* **协议和服务**: 打开时提供结构化服务的对象。 -* **设备**: 提供对硬件资源的访问的对象。 - -进程的创建者基于那些所请求的能力,来填充命名空间的内容。 -进程不能向自己的命名空间添加对象,因为这实际上相当于进程在授予自身访问那些对象的权限。 diff --git a/get-started/_common/intro/_sandboxing_sandboxing.md b/get-started/_common/intro/_sandboxing_sandboxing.md index 8c31049b..b6027567 100644 --- a/get-started/_common/intro/_sandboxing_sandboxing.md +++ b/get-started/_common/intro/_sandboxing_sandboxing.md @@ -1,17 +1,10 @@ - -## 沙盒 +## Sandboxing - -当一个新进程被创建时,它没有任何能力。 -进程完全依赖于其创建者通过传给它的那些[句柄][glossary.handle]来提供能力。 -我们也可以说,空进程没有**环境权限**(ambient authority)。 - -因此,进程被创建时通常被赋予一些初始资源和能力。 -`fuchsia.process.Launcher` 协议提供了从一个可执行文件和一组内核对象句柄来在系统上创建新进程的低级接口。 -大多数软件使用组件框架,它简化了创建一个有一组标准的初始能力的新进程来执行一些代码的工作。 -您将在稍后更详细地探索组件。 + - -

一些给予进程的初始句柄是被进程挂载到**命名空间**(namespace)中的目录。

[glossary.handle]: /glossary/README.md#handle \ No newline at end of file diff --git a/get-started/_common/intro/_zircon_syscall.md b/get-started/_common/intro/_zircon_syscall.md index 7d432a65..0cfc85f5 100644 --- a/get-started/_common/intro/_zircon_syscall.md +++ b/get-started/_common/intro/_zircon_syscall.md @@ -1,85 +1,47 @@ - -## 系统调用 +## System calls - -用户空间代码使用**系统调用**与内核空间对象交互。Zircon 有执行低层操作的系统调用,如: - -* 内存管理 -* 任务和进程管理 -* 进程间通信(IPC)与同步 -* 异常处理 -* 硬件支持服务(时钟、熵、设备 I/O) - - - -用户空间进程通过 `libzircon.so` 访问系统调用,这是一个 -[虚拟动态共享对象][glossary.virtual-dynamic-shared-object](virtual Dynamic Shared Object,vDSO)。 -Zircon vDSO 是 ELF 格式的共享库,它被内核映射到每个新进程的地址空间。 -这个库被称为“虚拟”,是因为它是直接由内核映像暴露,而非从文件加载的。 - -大多数系统调用直接操作一个或多个[句柄][glossary.handle]。 -句柄是进程内部对内核空间对象的引用,表示为32位整数(`zx_handle_t`)。 -每个句柄声明了持有者具有的对句柄自身或引用的对象执行操作的特权,即**权利**(right)。 diff --git a/get-started/build_fuchsia.md b/get-started/build_fuchsia.md index 42057111..7e66e119 100644 --- a/get-started/build_fuchsia.md +++ b/get-started/build_fuchsia.md @@ -1,267 +1,167 @@ - -# 配置和构建 Fuchsia {#configure-and-build-fuchsia} -这篇文档将引导您在主机上配置并构建 Fuchsia。 - -步骤如下: - -1. [前提条件](#prerequisites) -1. [设置构建配置](#set-your-build-configuration) -1. [提升构建速度(可选)](#speed-up-the-build) -1. [构建 Fuchsia](#build-fuchsia) - -## 1. 前提条件 {#prerequisites} - -在开始之前,请先检查是否满足如下要求: - -* [源代码设置](#source-code-setup) -* [硬件要求](#hardware-requirements) - -### 源代码设置 {#source-code-setup} - -根据文档[下载 Fuchsia 源代码](/get-started/get_fuchsia_source.md)指示下载 Fuchsia 的源代码,然后在您的计算机上设置开发环境。 - -### 硬件要求 {#hardware-requirements} - -您只能在具有下列主机架构之一的计算机上构建 Fuchsia: - -- x86-64 Linux (只支持基于 Debian 系列的发行版) -- x86-64 macOS - -注意:不支持 Windows 和 ARM64。 - -## 2. 设置构建配置 {#set-your-build-configuration} - -Fuchsia 的构建配置告诉构建系统进行构建的产品,以及构建面向的平台。 - -要设置您的 Fuchsia 构建配置,请运行 [`fx set`][fx-set-reference] 命令: + ```posix-terminal fx set {{ '' }}PRODUCT{{ '' }}.{{ '' }}BOARD{{ '' }} ``` - -请替换以下选项: - -* `PRODUCT`(产品):您想要构建的 Fuchsia 产品,比如:`core` 和 `workstation_eng`。 -* `BOARD`(板型):产品的可执行文件架构,比如:`x64` 和 `qemu-x64`。 - -下面的示例将一项构建配置设置为 `core.qemu-x64`: ```posix-terminal fx set core.qemu-x64 ``` - -在这个示例中: - - * `core` 是 Fuchsia 具备最小功能集的产品,包括常用的网络功能。 - * `qemu-x64` 是 Fuchsia 模拟器(FEMU)的 x64 架构这一板型,FEMU 基于开源模拟器 [QEMU][qemu]{:.external}。 - -另外,下面的例子将一项构建配置设置为 `workstation_eng.x64`,这常用于[在设备上安装 Fuchsia 工作站][build-workstation]: ```posix-terminal fx set workstation_eng.x64 ``` - -要获取关于构建配置的更多信息,请参阅[配置构建](/development/build/fx.md#configure-a-build)。 - -## 3. 提升构建速度(可选) {#speed-up-the-build} - -注意:这一步对于构建 Fuchsia 而言并不是必需的,但是可以在您构建 Fuchsia 时节省很多时间,因此建议您完成该步骤。 - -要提升 Fuchsia 构建速度,您可以使用下列服务之一: - -* [启用 Goma](#enable-goma) -* [安装 ccache](#install-ccache) - -### 启用 Goma {#enable-goma} - -[Goma](https://chromium.googlesource.com/infra/goma/server/){:.external} 是一个分布式编译器服务,适用于 Chrome、Android 和 Fuchsia 等开源项目。 - -如果您能访问 Goma, 请在您的计算机上 Goma 客户端: ```posix-terminal fx goma ``` - -### 安装 ccache {#install-ccache} - -如果您无法访问 Goma,但想在本地加速构建,则可以使用 [ccache](https://ccache.dev/){:.external} 缓存之前构建的产物。 * {Linux} - - 要在 Linux 上使用 `ccache`,请安装如下安装包: + ```posix-terminal sudo apt install ccache ``` * {macOS} - - 对于 macOS ,请参阅[在 Mac 上使用 CCache](https://chromium.googlesource.com/chromium/src.git/+/HEAD/docs/ccache_mac.md){:.external} 中的安装步骤。 - -如果您的 `CCACHE_DIR` 环境变量指向已有路径,那么 `ccache` 就会自动开启。 - -要覆盖此默认行为,请为 `fx set` 指定以下标志: - -* 即使其他的加速项可用,也要强制使用 `ccache`,则:
     fx set PRODUCT.BOARD --ccache
     
- -* 要禁用 `ccache`: +
     fx set PRODUCT.BOARD --no-ccache
     
- -## 4. 构建 Fuchsia {#build-fuchsia} - -[`fx build`][fx-build-reference] 命令可以把源代码构建打包,或者构建成其他的类型。 - -要构建 Fuchsia,请运行以下命令: - -注意:构建时间一般为 90 分钟。 ```posix-terminal fx build ``` - -当您修改源代码后,请再次运行命令 `fx build` 进行增量构建,或者运行 `fx -i build` 命令来开启一个监视进程,这个监视进程会在发现源代码更新时自动构建。 - -要获取关于构建 Fuchsia 的更多信息,请参阅[执行构建](/development/build/fx.md#execute-a-build)。 - -## 后续步骤 - -要在您的计算机上启动 Fuchsia 模拟器 (FEMU),请参阅[开启 Fuchsia 模拟器](/get-started/set_up_femu.md)。 - -不过,如果您想在硬件设备上运行 Fuchsia,请参阅[在设备上安装 Fuchsia](/development/hardware/README.md)。 - diff --git a/get-started/explore_fuchsia.md b/get-started/explore_fuchsia.md index 7079e48f..f3786636 100644 --- a/get-started/explore_fuchsia.md +++ b/get-started/explore_fuchsia.md @@ -1,9 +1,11 @@ -# Explore Fuchsia {#explore-fuchsia} + +# 探索 Fuchsia {#explore-fuchsia} -Once you have Fuchsia up and running on a device or emulator, -check out the following resources: + +在设备或模拟器上启动并运行 Fuchsia 后,请查看以下资源: -* [Run ffx commands](#run-ffx-commands). + @@ -12,75 +14,93 @@ check out the following resources: * [创建 Fuchsia 组件](#create-fuchsia-components)。 * [贡献更改](#contribute-changes)。 -## Run ffx commands {#run-ffx-commands} + +## 运行 ffx 命令 {#run-ffx-commands} -[`ffx`][ffx-overview] is a host tool for Fuchsia target workflows that + +[`ffx`][ffx-overview] 是 Fuchsia 目标工作流的主机工具,为所有 Fuchsia 环境和主机平台上提供一致的开发体验。 -The following are some of `ffx` command examples: + +以下是一些 `ffx` 命令示例: -* Display the list of devices: + +* 显示设备列表: ```posix-terminal ffx target list ``` -* Display the device information: + +* 显示设备信息: ```posix-terminal ffx target show ``` -* Print the device logs: + +* 输出设备日志: ```posix-terminal ffx log ``` -* Reboot the device: + +* 重启设备: ```posix-terminal ffx target reboot ``` -## Run examples {#run-examples} + +## 运行示例 -To try out Fuchsia's sample software, check out the guides below: + +要试用 Fuchsia 的样例程序,请参考如下指南: -* [Run an example component](/development/run/run-examples.md) + * [运行示例组件](/development/run/run-examples.md) * [运行测试组件](/development/run/run-test-component.md) * [运行端到端测试](/development/testing/run_an_end_to_end_test.md) -## Create Fuchsia components {#create-fuchsia-components} + +## 创建 Fuchsia 组件 {#create-fuchsia-components} -The basic executable units of software in Fuchsia are + -Fuchsia 中软件的最小可执行单元是[组件](/concepts/components/v2),这些组件通过 [FIDL](/concepts/fidl/overview.md)(Fuchsia 接口定义语言)协议彼此交互。 +Fuchsia 中软件的最小可执行单元是[组件](/concepts/components/v2),这些组件通过 +[FIDL](/concepts/fidl/overview.md)(Fuchsia 接口定义语言)协议彼此交互。 要想了解更多有关 Fuchsia 组件和 FIDL 的信息,请参考如下指南: -* [Build components](/development/components/build.md) + +* [构建组件](/development/components/build.md) +* [FIDL 概览](/development/languages/fidl/README.md) +* [FIDL 教程](/development/languages/fidl/tutorials/overview.md) -## Contribute changes {#contribute-changes} + +## 贡献更改 {#contribute-changes} -When you're ready to contribute to the Fuchsia project, -see [Contribute changes][contribute-changes]. + +当您准备好为 Fuchsia 项目做出贡献时,请参阅[贡献更改][contribute-changes]。 -## See also + +## 参阅 -For more information on Fuchsia's development workflows, -check out the following resources: + +要获取关于 Fuchsia 开发流程的更多信息,请参阅下列资源: -* [fx workflows](/development/build/fx.md) + [components]: /concepts/components/v2 diff --git a/get-started/get_fuchsia_source.md b/get-started/get_fuchsia_source.md index 5463aaf4..7bb6eafa 100644 --- a/get-started/get_fuchsia_source.md +++ b/get-started/get_fuchsia_source.md @@ -1,52 +1,30 @@ - -# 下载 Fuchsia 源代码 - -本指南说明了如何下载 Fuchsia 源代码以及在您的机器上部署开发环境。 - -步骤如下: - -1. [执行预检查](#perform-a-preflight-check)。 -2. [安装必备软件包](#install-prerequisite-packages)。 -3. [下载 Fuchsia 源代码](#download-the-fuchsia-source-code)。 -4. [设置环境变量](#set-up-environment-variables)。 -5. [配置防火墙规则(可选)](#configure-firewall-rules)。 - - -## 1. 执行预检查 {#perform-a-preflight-check} - -Fuchsia 提供了一个预检查工具([`ffx platform preflight`][ffx-platform-preflight]),这个工具可以测试您的机器,并会通知您在该机器上可能会影响从源代码构建 Fuchsia 的任何问题。 - -注意:这个预检查工具只支持 x64 架构。目前 Fuchsia 不保证在其他宿主架构上能构建成功,比如 Windows 和 ARM64。 - -运行如下命令: * {Linux} @@ -60,22 +38,14 @@ Run the following command: curl -sO https://storage.googleapis.com/fuchsia-ffx/ffx-macos-x64 && chmod +x ffx-macos-x64 && ./ffx-macos-x64 platform preflight ``` - -## 2. 安装必备软件包 {#install-prerequisite-packages} - -Fuchsia 要求 `curl`、 `file`、 `unzip` 以及 `git` 等工具是最新版。 `git` 版本需为 2.28 或以上。 * {Linux} - - 安装(或更新)以下软件包: ```posix-terminal sudo apt install curl file git unzip @@ -83,92 +53,56 @@ Fuchsia 要求 `curl`、 `file`、 `unzip` 以及 `git` 等工具是最新版。 * {macOS} - - 安装 Xcode 命令行工具: - - 注意:如果 `ffx platform preflight` 显示 Xcode 工具已经安装,则请跳过这一步。 ```posix-terminal xcode-select --install ``` - -## 3. 下载 Fuchsia 源代码 {#download-the-fuchsia-source-code} - -Fuchsia 提供了一个[引导脚本](/scripts/bootstrap),这个脚本会创建一个名为 `fuchsia` 的文件夹,并把 Fuchsia 源码下载到这里。 - -下载 Fuchsia 源码要求您机器上有大约 2 GB 的存储空间。根据您的构建配置,之后在构建 Fuchsia 时,您还额外需要 80 到 90 GB 的存储空间。另外,下载过程中也会使用大量的内存。建议您在此过程中关闭其他非必要的进程。 - -要下载 Fuchsia 源代码,请执行如下步骤: - -1. 选择一个 Fuchsia 源代码下载目录,例如: - - 注意:您可以在任何目录下设置 Fuchsia。本指南选择 `$HOME` 作为示例。 ```posix-terminal cd $HOME ``` - -1. 运行引导脚本: - - 注意:下载 Fuchsia 源代码可能需要 60 分钟。 ```posix-terminal curl -s "https://fuchsia.googlesource.com/fuchsia/+/HEAD/scripts/bootstrap?format=TEXT" | base64 --decode | bash ``` - - - 这个脚本会创建 `fuchsia` 目录,并且下载源代码。 - - 如果您在脚本运行期间看到了 `Invalid authentication credentials` 错误信息,请参考[认证错误](#authentication-error)章节寻求帮助。 - -## 4. 设置环境变量 {#set-up-environment-variables} - -Fuchsia 建议您按照如下操作更新 shell 配置文件: - -* 添加 `.jiri_root/bin` 目录到您的 `PATH` 环境变量 - - Fuchsia 源码中的 `.jiri_root/bin` 目录包含了 [`jiri`](https://fuchsia.googlesource.com/jiri) 和 [`fx`](/development/build/fx.md) 工具,这些是 Fuchsia 工作流中的必备工具。Fuchsia 使用 `jiri` 工具在 Fuchsia 的项目中管理仓库,而 `fx` 工具能够帮助配置、构建、运行以及调试 Fuchsia。Fuchsia 的工具链需要可以在您的 `PATH` 环境变量中找到 `jiri` 工具。 - -* 使用“source”命令导入 `scripts/fx-env.sh` 文件 - - 虽然这并不是必须的,但是使用“source”命令导入 [`fx-env.sh`](/scripts/fx-env.sh) 文件可以在您的终端中启用一系列有用的 shell 函数。比如,它会创建 `FUCHSIA_DIR` 环境变量,以及提供 `fd` 命令用来在目录中导航时提供自动补全 (要获取更多信息,请参阅 `fx-env.sh` 中的注释)。 - -注意:如果您不想更新您的 shell 配置,则请参阅[在不更新 PATH 变量的情况下准备 Fuchsia](#work-on-fuchsia-without-updating-your-path)。 - -要更新您的 shell 配置文件来设置 Fuchsia 的环境变量,请执行如下步骤: - -1. 使用文本编辑器打开您的 `~/.bash_profile` 文件(在以下示例中,我们使用 [Nano][nano]{:.external} 文本编辑器): - - 注意:本指南使用 `bash` 终端作为示例,如果您使用 `zsh`,请在后续步骤中请替换 `~/.bash_profile` 为 `~/.zprofile`: ```posix-terminal nano ~/.bash_profile ``` - -1. 在您的 `~/.bash_profile` 文件中添加如下配置: - - 注意:如果您的 Fuchsia 源码不在 `~/fuchsia` 目录下,则请替换 `~/fuchsia` 为您的 Fuchsia 目录。 ```sh export PATH=~/fuchsia/.jiri_root/bin:$PATH source ~/fuchsia/scripts/fx-env.sh ``` - -1. 保存文件并退出。 - -1. 要更新环境变量,请运行如下命令: ```posix-terminal source ~/.bash_profile ``` - -1. 验证您可以在您的 `fuchsia` 目录内运行如下命令且没有报错: ```posix-terminal jiri help @@ -269,151 +169,85 @@ do the following: fx help ``` - -## 5. 配置防火墙规则(可选) {#configure-firewall-rules} - -注意:这一步对构建或者运行 Fuchsia 并不是必需的。但是推荐您进行该步骤,以确保 Fuchsia 模拟器实例能在 Linux 上流畅运行。 - -(**仅限 Linux**)如果您计划在 Linux 中运行 Fuchsia,那么建议您运行如下命令,在宿主机上允许 Fuchsia 特定流量: ```posix-terminal fx setup-ufw ``` - -该脚本需要 `sudo` 权限(会要求您输入密码)来设置适当的防火墙规则。(要获取关于该脚本的更多信息,请参考 [`setup-ufw`][setup-ufw])。 - -## 后续步骤 - -要构建您第一个 Fuchsia 系统镜像,请参阅[配置和构建 Fuchsia](/get-started/build_fuchsia.md)。 - -## 附录 - -### 认证错误 {#authentication-error} - -如果您在引导脚本运行过程中看到了 `Invalid authentication credentials`(无效的认证凭据)错误信息,那么您的 `~/.gitcookies` 文件中可能含有来自 `googlesource.com` 中一些仓库的 cookie,引导脚本想要匿名检查。 - -要解决该错误,请使用以下方式之一: - -* 按照屏幕上的指示为指定仓库获取密码。 -* 删除 `.gitcookies` 文件中有问题的 cookie。 - - -### 在不更新 PATH 变量的情况下准备 Fuchsia {#work-on-fuchsia-without-updating-your-path} - -下面的章节为[设置环境变量](#set-up-environment-variables)章节提供了替代方法: - -* [把工具复制到二进制目录](#copy-the-tool-to-your-binary-directory) -* [添加符号链接到二进制目录](#add-a-symlink-to-your-binary-directory) - -#### 把工具复制到二进制目录 {#copy-the-tool-to-your-binary-directory} - -如果您不想更新您的环境变量,但是想在任何目录中使用 `jiri` 工具,那么请把 `jiri` 工具复制到 `~/bin` 目录中,比如: - -注意:如果您的 Fuchsia 源码不在 `~/fuchsia` 目录中,则请把 `~/fuchsia` 替换为您的 Fuchsia 目录。 ```posix-terminal cp ~/fuchsia/.jiri_root/bin/jiri ~/bin ``` - -但是,您必须在没有 `sudo` 的情况下对 `~/bin` 有写访问权限。否则,`jiri` 无法自动保持最新版本。 - -#### 添加符号链接到二进制目录 {#add-a-symlink-to-your-binary-directory} - -同样地,如果您想在不更新环境变量的情况下使用 `fx` 工具,则请在 `~/bin` 路径中添加您 `fx` 工具的链接文件,比如: - -注意:如果您的 Fuchsia 源码不在 `~/fuchsia` 目录中,则请把 `~/fuchsia` 替换为您的 Fuchsia 目录。 ```posix-terminal ln -s ~/fuchsia/scripts/fx ~/bin ``` - -或者,请直接使用 `fx` 工具的路径来运行,比如: ```posix-terminal ./scripts/fx help ``` - -无论哪种情况,您都需要 `jiri` 工具在您的 `PATH` 环境变量中。 + [ffx-platform-preflight]: https://fuchsia.dev/reference/tools/sdk/ffx#preflight diff --git a/get-started/learn/intro/architecture.md b/get-started/learn/intro/architecture.md index fb7f06da..aab7cae8 100644 --- a/get-started/learn/intro/architecture.md +++ b/get-started/learn/intro/architecture.md @@ -1,4 +1,3 @@ - -# Fuchsia 架构 +# Fuchsia architecture <<../../_common/intro/_architecture.md>> diff --git a/get-started/learn/intro/sandboxing.md b/get-started/learn/intro/sandboxing.md index 68191dac..426101cf 100644 --- a/get-started/learn/intro/sandboxing.md +++ b/get-started/learn/intro/sandboxing.md @@ -1,6 +1,5 @@ {% import 'docs/_common/_doc_widgets.md' as widgets %} - -# 软件隔离模型 +# Software isolation model <<../../_common/intro/_sandboxing_intro.md>> @@ -8,48 +7,30 @@ <<../../_common/intro/_sandboxing_namespaces.md>> - -## 练习:命名空间 +## Exercise: Namespaces - -在本练习中,您将使用命令行来更详细地探索组件的命名空间(namespace)的内容。 <<../_common/_start_femu.md>> - -### 在 hub 中找到一个组件 +### Find a component in the hub - -Fuchsia 提供了 [Hub](/concepts/components/v2/hub.md) 作为诊断接口, -用于获取系统中运行的组件实例的信息。 -您可以使用 hub 的目录结构来探索组件及其命名空间。 + - -连接到设备命令行并输入以下 `ls` 命令 -来列出 `/hub-v2/children/core/children` 下的 `core` 领域(realm)的组件: ```posix-terminal fx shell ls /hub-v2/children/core/children @@ -64,16 +45,10 @@ build-info ... ``` - -这是许多核心 Fuchsia 系统组件的一个列表。要查看更多关于特定组件的详细信息,可以列出它的目录内容。 - -对 `http-client` 组件试试这个: ```posix-terminal fx shell ls /hub-v2/children/core/children/network/children/http-client @@ -90,14 +65,10 @@ resolved url ``` - -### 探索命名空间和出口目录 +### Explore the namespace and outgoing directory - -您将在 hub 内部的 `exec/in` 路径下找到运行中组件的**命名空间**。 ```posix-terminal fx shell ls /hub-v2/children/core/children/network/children/http-client/exec/in @@ -109,27 +80,16 @@ pkg svc ``` - -对每个元素简单说明如下: +Here are some quick highlights of each element: - -* `config/`: 组件的配置数据 -* `pkg/`: 组件的包的内容 -* `svc/`: 可供组件使用的系统服务 - -列出 `svc/` 目录的内容。这个目录包含 -[服务节点](https://fuchsia.dev/reference/fidl/fuchsia.io#NodeInfo), -表示提供给这个组件的系统服务。 ```posix-terminal fx shell ls /hub-v2/children/core/children/network/children/http-client/exec/in/svc @@ -141,22 +101,13 @@ fuchsia.net.name.Lookup fuchsia.posix.socket.Provider ``` - -每个服务都通过一个公有协议访问,其由一个 - [Fuchsia 接口定义语言(Fuchsia Interface Definition Language,FIDL)][glossary.FIDL]接口定义。 -组件通过其**出口目录**(outgoing directory)来提供系统服务, -这个目录被映射到 hub 内部的 `exec/out` 路径。 - -列出 `svc/` 出口目录来查看这个组件提供的系统服务。 ```posix-terminal fx shell ls /hub-v2/children/core/children/network/children/http-client/exec/out/svc @@ -166,18 +117,11 @@ fx shell ls /hub-v2/children/core/children/network/children/http-client/exec/out fuchsia.net.http.Loader ``` - -我们将在以后更详细地探索 FIDL 协议及如何访问各种服务。 diff --git a/glossary-translation.md b/glossary-translation.md index 9394f686..8cf6039a 100644 --- a/glossary-translation.md +++ b/glossary-translation.md @@ -12,7 +12,6 @@ | 英文原文 | 中文翻译对应词 | 备注 | | ------------------------------ | ---------------------- | ----------------------------------------------------- | -| accessibility | 无障碍功能 | G | | application | 应用
应用程序 | | | ArchiveAccessor | 档案访问器 | i | | archivist | 归档器 | i | @@ -23,14 +22,9 @@ | automatic retry | 自动重试 | G | | backoff | 退避 | G | | best practice | 最佳做法 | G & i | -| board | 板型 | i | -| build | 构建 | G | -| capability | 能力 | i | | caveats | 注意事项 | G | | cleanup | 清理 | G | -| compile | 编译 | G | -| consume | 使用
消耗 | G
后者在结算系统中使用 | -| contribute changes | 贡献更改 | i | +| consume | 使用
消耗 | G
后者在结算系统中使用 | | control plane | 控制层面
控制平面 | G | | data plane | 数据平面
数据层面 | G | | deprecated | 已弃用(的) | G | @@ -41,9 +35,7 @@ | ergonomics | 工效学 | i & G | | escalate | 上报 | G | | execute-only memory | 只执行内存 | G | -| expose | 公开
显示 | G
具体选择取决于语境,亦有“公开显示”译法 | | fault injection | 故障注入 | G | -| fully qualified URL | 完全限定的网址 | G | | get stared | 使用入门
入门 | G
前者更常用 | | get started with | 开始使用
使用入门 | G
二者均常用 | | guidance | 指导 | | @@ -54,27 +46,16 @@ | in-tree | 树内 | G
此处指源码树 | | infrastructure | 基础架构 | G | | inspect | 审视 | Fuchsia 专有名词
i | -| installer | 安装程序 | G | -| job | 作业 | G | | just-in-time (JIT) compilation | 即时(JIT)编译 | G | -| legacy | 旧版 | G | -| moniker | 代称 | i | | mount | 装载 | G | | namespace | 命名空间 | G | | out-of-tree | 树外 | G
此处指源码树 | -| parse | 解析 | G | -| parser | 解析器 | G | | path | 路径 | G | | pave | 铺设 | i | | policy | 政策 | G | -| prerequisites | 前提条件 | G | -| product | 产品 | i & G | | proxy | 代理 | | -| realm | 领域 | i | | remote | 远程 | | | robust | 可靠的 | G | -| sandbox | 沙盒 | G | -| sandboxing | 沙盒 | G | | sanity check | 健全性检查 | G | | service | 服务 | | | service account | 服务帐号 | G | @@ -82,15 +63,12 @@ | set up / setup | 设置 | | | settings | 设置 | | | sidecar | Sidecar | 首字母大写,不译
G | -| source code | 源代码 | G | | span | Span
跨 | 作名词时首字母大写,不译
作动词时译为“跨”
G | | strategy | 策略 | G | | suite | 套件 | G | | traffic | 流量 | G | | unmount | 卸载 | G | -| URL | 网址 | G | | validate | 验证 | G | -| Next steps | 后续步骤 | G | ## 文档中未出现术语的翻译参考表 From 7e72662e217dee9a618ae48fcfc9573ecc1b765a Mon Sep 17 00:00:00 2001 From: y2-Whyto Date: Sat, 20 Aug 2022 15:58:23 +0800 Subject: [PATCH 136/154] Revert "Revert "Merge branch '2022' into 6_explore"" This reverts commit 7636eca472743e793fa599ea0788ba89ccda2868. --- README.md | 5 +- contribute/docs/documentation-standards.md | 269 ++++++++++++++++++ contribute/docs/documentation-style-guide.md | 197 ++++++++++++- .../governance/rfcs/0001_rfc_process.md | 12 +- .../rfcs/0007_remove_thread_killing.md | 232 +++++++++------ general-translation-guide.md | 11 +- .../_common/components/_debugging_intro.md | 3 + .../_common/components/_declaring_intro.md | 9 + .../components/_declaring_manifests.md | 41 ++- .../_common/components/_declaring_shards.md | 29 +- .../components/_organizing_identifying.md | 12 +- .../_common/components/_organizing_intro.md | 74 +++++ .../components/_organizing_lifecycle.md | 30 +- .../_common/components/_product_driver.md | 12 + .../_common/components/_product_session.md | 12 +- .../_common/components/_tests_intro.md | 12 + get-started/_common/fidl/_connecting_intro.md | 30 +- get-started/_common/fidl/_fidl_intro.md | 24 ++ get-started/_common/fidl/_overview.md | 12 + get-started/_common/fidl/_testing_intro.md | 3 + get-started/_common/intro/_architecture.md | 27 +- .../_common/intro/_components_intro.md | 24 +- get-started/_common/intro/_overview.md | 11 +- .../_common/intro/_sandboxing_intro.md | 3 + .../_common/intro/_sandboxing_namespaces.md | 42 ++- .../_common/intro/_sandboxing_sandboxing.md | 36 ++- get-started/_common/intro/_zircon_syscall.md | 46 ++- get-started/build_fuchsia.md | 196 +++++++++---- get-started/explore_fuchsia.md | 75 ++--- get-started/get_fuchsia_source.md | 196 ++++++++++++- get-started/learn/intro/architecture.md | 3 +- get-started/learn/intro/sandboxing.md | 70 ++++- glossary-translation.md | 24 +- 33 files changed, 1521 insertions(+), 261 deletions(-) create mode 100644 contribute/docs/documentation-standards.md diff --git a/README.md b/README.md index 2af2bd9d..8b10ddf1 100644 --- a/README.md +++ b/README.md @@ -46,7 +46,6 @@ ## PR 提交要求 1. 多个翻译请**分文件提交 PR**,即新建分支(branch),在每个分支中只更改一个文件并提交; - 1. PR 提交时请在**标题区域包含文件名**,以便进行记录; + 1. PR 提交时请在**标题区域包含文件的绝对路径**,以便进行查找、核对和记录; 1. PR 的标题和内容最好使用中文; - 1. 为避免做重复性工作,请在翻译时**先试译若干节**,并将 PR **[以草稿形式提交](https://docs.github.com/cn/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests#draft-pull-requests)**([创建草稿 PR](https://docs.github.com/cn/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request-from-a-fork) 或[提交 PR 后进入并在右侧选择转换为草稿](https://docs.github.com/cn/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/changing-the-stage-of-a-pull-request#converting-a-pull-request-to-a-draft)),以便校对人员提前开始校对,及时修正当前翻译中存在的可能会在下文中重复出现的格式或内容问题。 - + 1. 为避免做重复性工作,最好在翻译时**先试译若干节**,并将 PR **[以草稿形式提交](https://docs.github.com/cn/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests#draft-pull-requests)**([创建草稿 PR](https://docs.github.com/cn/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request-from-a-fork) 或[提交 PR 后进入并在右侧选择转换为草稿](https://docs.github.com/cn/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/changing-the-stage-of-a-pull-request#converting-a-pull-request-to-a-draft)),以便校对人员提前开始校对,及时修正当前翻译中存在的可能会在下文中重复出现的格式或内容问题。 diff --git a/contribute/docs/documentation-standards.md b/contribute/docs/documentation-standards.md new file mode 100644 index 00000000..fa9319c3 --- /dev/null +++ b/contribute/docs/documentation-standards.md @@ -0,0 +1,269 @@ + +# 文档标准概述 + + +本文档概述了 Fuchsia 文档的标准、结构、语言风格和最佳做法。 + + +## 文档定位 + + + * **为开发 Fuchsia 具体特性的专门文档:** + 针对开发者创建或维护 Fuchsia 代码库特定部分的文档,应当和源代码保存在同一目录下。这类文档通常以 `README.md` 文件的形式嵌入在 Fuchsia 代码库中。 + + * **面向 Fuchsia 开发者的总体文档:** Fuchsia 文档应当创建在 /HEAD/docs/ 中. + 在 `/docs/` 目录下,您应当在以下子目录之一内创建文档: + + * get-started: + + 有关下载、设置、开始 Fuchsia 开发的具体指南应当放进 `/get-started`。这类内容应当包含观点明确的、简短的教程,以帮助新用户入门 Fuchsia,并在 Fuchsia.dev 中链接至附加文档。 + * development: + + `/development/` 目录(在网站上显示为“指南”(Guides))中包含了针对Fuchsia开发者的说明和教程。该目录包含关于如何构建、运行和测试 Fuchsia 的文档。 + * concepts: + + `/concepts` 目录包含针对 Fuchsia 具体特性及其工作原理的深入解释,包括操作系统概述、框架、架构和软件包(package)。 + * reference: + + `/reference/` 目录包含自动生成的关于 Fuchsia 工具和 API 的参考文档,包括 FIDL 和内核的参考文档。 + * contribute: + + `/contribute/` 目录包含代码和文档的贡献进度以及最佳做法,包含文档准则和风格指南、代码策略以及管理体系。 + * `images` + + `/images/` 目录包含在文档中使用的图像。您应当将图像放在这一公共目录中。 + + +## 文档类型 + + +大多数文档可以分为以下几类: + + +- [程序性的](documentation-types.md#procedural-documentation) + - 入门 - 初始设置的文档 + - 指南 - 任务导向的文档 + + +- [概念性的](documentation-types.md#conceptual-documentation) - 多侧重于教授 Fuchsia、Fuchsia 架构和 Fuchsia 组件的基础性文档 + + +- [参考文档](documentation-types.md#reference-documentation) - 侧重于详细说明 Fuchsia API 和 工具的语法和参数的文档。这类文档通常自动生成。 + + +要获取更多信息,请参阅[文档类型](documentation-types.md)。 + + +## 文档和代码风格指南 + + +为确保由大量贡献者创建的文档都保持一致性,遵循文档风格指南很重要。要获取具体文档指导,请参阅[文档风格指南](documentation-style-guide.md);要获取代码样例指导,请参阅[代码样例风格指南](code-sample-style-guide.md)。 + + + +## 搜索的最佳做法 + +文档只有在用户能查到的时候才算有用。下面是一些关于可查性和搜索的最佳做法: + + - 将您的文档添加至目录:在 fuchsia.dev 的左侧导航中添加文档链接。要获取更多信息,请参阅[网站导航和目录文件](documentation-navigation-toc.md) + +- 交叉链接文档:添加指向文档主题的链接,以帮助读者更好地理解文档的内容。 例如,[Fuchsia 模拟器] (/development/build/emulator.md) 的概念文档链接到有关 Fuchsia 模拟器的相关指南和入门文档。 + +- 使用一致的术语:如果您在撰写有关 Fuchsia 中特定概念的文章,请确认您使用的是一致的术语。 使用[术语表](/glossary/README.md)来验证用语。 + + +## 文档的文件格式和文件名 + + +Fuchsia 的所有文档均使用 Markdown(`.md`)撰写,Fuchsia.dev 使用 [Hoedown Markdown Parser](https://github.com/hoedown/hoedown) 作为 Markdown 文档语法分析器。 + + +该网站的导航是由 `_toc.yaml` 文件配置的,该文件包含在每个文档目录中。请使用[网站导航和目录文件](documentation-navigation-toc.md)中的指导来更新这些文件。 + + +文件和目录名应当为小写,并使用短横线(hyphen)而非下划线(underscore)来分隔单词。在文件或目录名中请仅使用标准 ASCII 字母数字字符。如果文件名包含带有下划线的命令,那么您可以包含下划线。 + + +## 语言风格总体指导 + + +- **使用通俗易懂的美国英语撰写。** 使用清晰、直白的美国英语撰写,以使内容易于理解。请使用简单的词汇,保持简洁,并使用(常见)缩写,如 _it's_ 或 _don't_。 + +- **心怀敬意。** 请遵循[尊重性规范](/contribute/respectful_code.md)中规定的方针。 + +- **使用第二人称(“you”)撰写。** Fuchsia文档是写给用户(“you”)的。例如,“您(you)可以通过以下步骤安装 Fuchsia……”。不要使用第三人称称呼读者(“Fuchsia 用户可以通过……安装 Fuchsia”)或使用“we”(“我们(we)可以通过……安装 Fuchsia”)。 + +- **使用现在时态撰写。** 请在记录系统时始终立足眼下(it is),而非未来(it will be)。类似“will”之类的词语非常含糊。例如“您将看到”这种说法将引起如“我何时将会看到?”之类的问题。1分钟,还是20分钟呢?另外,若非必要,请不要提及未来的产品特性。提及可能取消的未来计划将导致维护上的困难。 + +- **保持语句简短具体。** 使用标点符号可以便于您的读者跟进说明、理解概念。而且,短句更易于翻译。 + +- **了解您的受众群体。** 在撰写文档之前,请确定好您的受众群体。了解受众群体使您能够明确他们应当熟悉的概念。当撰写面向更高级受众群体的文档时,请在文档前声明,让用户了解这一前提后,再进行阅读。 + +- **使用主动语态。** 请尽量使用主动语态写作,因为被动语态会使句子模棱两可且难以理解。 下面是一个例子: + - 主动语态:“操作系统运行一个进程。”(The operating system runs a process.)在这种情况下,主语执行动词表示的动作。 + - 被动语态:“一个进程正在被运行。”(A process is being run.)主语不再是“主动的”(_active_),而是被动词作用——它是“被动的”(_passive_)。 + 大多数情况下,如果您使用了“by”,那么您的句子可能仍然是被动语态。 + + +- **若使用首字母缩写词,请您在第一次书写时进行定义。** 例如,looks good to me(LGTM,我觉得看起来很好)。不要认为每个人都理解所有的首字母缩写词。您不需要定义工业标准首字母缩写词,如 TCP/IP。 + + +- **定义技术术语,回避行话。** Fuchsia 文档应当易于各个层次的开发者理解。请避免使用不常用或高度技术性词语而使得文章过于复杂。如果您使用了 Fuchsia 特定的术语,请在[术语表](/glossary/README.md)中对其进行定义。请回避自造词。 + + +- **回避口头表达或地区习语。** 请记住,许多 Fuchsia 用户并非英语母语者。请避免使用难于翻译的习语,例如“that's the way the cookie crumbles.”(生米已成熟饭/覆水难收)虽然对您而言能够理解,但是很难准确地翻译到其他语言中。 + + +- **避免引用专有信息。** 这里指的是任何可能是已注册商标的任何潜在词语或您公司的任何内部信息(API 密钥、机器名等)。 + + +- **使用性别中立代词。** 请不要使用 _he_,_him_,_his_,_she_ 或 _her_,也不要使用 _he/she_ 或 _(s)he_ 等其他类似的符号表达方式。取而代之,请使用单数的 _they_。 + + +- **使用一致的术语。** 确保术语在代码、用户界面和文档中是一致的。尽可能使用常见术语,并使用[术语表](/glossary/README.md)来验证用语。 diff --git a/contribute/docs/documentation-style-guide.md b/contribute/docs/documentation-style-guide.md index 4c182bb5..5b750e55 100644 --- a/contribute/docs/documentation-style-guide.md +++ b/contribute/docs/documentation-style-guide.md @@ -1,13 +1,23 @@ + +# 文档风格指南 + +本文档给出了针对 Fuchsia.dev 写作风格的指南。这些方针基于[Google 开发者风格指南][google-dev-doc-style-guide]中的通用指导。 + +注意:本指南重点介绍了为 Fuchsia 编写文档的一些最佳做法。其中的某些主题在以下文档的资源中可能会得到更为广泛的探讨: + +* 要获取关于通用文档标准的信息,包括文件类型、位置和整体语言风格,请参阅 [Fuchsia 文档标准][doc-standard]。 +* 要获取关于措辞、风格和结构的具体指导,请参阅 [Fuchsia 文档风格指南][style-guide]。 +* 要获取完整的 Markdown 参考指南,请参阅 [Markdown 参考指南][markdown-guide]。 + +## 文字和链接 + +### 遵循 80 字符限制 + +在 Fuchsia 项目中,代码的行最大长度为 100 字符,而文档的行最大长度为 80 字符。该规则一个值得注意的例外情况是网址(即链接),写在一行中,不换行。 + +代码常使用缩进(页面左侧的空格),而英文散文(文档)多形成文字段落。这种差异导致了不同的宽度规格。 + +### 标记外部链接 + +请使用 `{:.external}` 标记任何不属于 `fuchsia.dev`、 +`fuchsia.googlesource.com` 或 `fuchsia-review.googlesource.com` 的链接: + +```none +这是一个[外部](http://example.com){:.external}链接。 ``` + +注意外部链接标志:这是一个[外部][external-link-example]{:.external}链接。 + +### 使用参考风格的链接 + +一般来说,Fuchsia 建议在 Markdown 文件中使用参考风格(reference-style)的链接。 参考风格链接使用与链接相关联的参考标识符,接下来每当您在文档中使用该链接时,即可引用该标识符。这使得文档中的链接易于更新。 + +推荐:请在您需要链接的位置创建标识符。 + + +本例中,链接标识符称为 `fuchsia-home`: + +```none +欢迎来到 [Fuchsia 首页][fuchsia-home]。 ``` + + +接着在文档底部对其定义: +
[fuchsia-home]: https://fuchsia.dev/
+ + +不推荐:编写如下的行内链接: + +```none +欢迎来到 [Fuchsia 首页](www.fuchsia.dev)。 +``` + +您可以在外部的 [Markdown 指南][markdown-reference-links]中阅读更多与参考风格链接有关的信息。 + +### 对不同的 Fuchsia 内容使用正确链接 + +在 Fuchsia 文档中您可以为三类内容添加链接: + +* `/docs/` - 链接至位于 Fuchsia 源树中 `/docs/` 目录内的文档。这些链接必须关联到具有 `.md` 扩展名的文件。例如,`/concepts/README.md`。 +* 源代码 - 链接至位于 Fuchsia 源树中的源代码文件。这些链接可以关联到任何文件扩展名,但这些文件必须存在于源树中。例如,`/src/sys/sysmgr/main.cc`。 +* 参考文档 - 链接至自动生成的 Fuchsia 参考文档。 + * 大多数 Fuchsia 参考文档不存在于源树内,但在 [fuchsia.dev][fuchsia-dev] 上发布了。这些链接必须使用完全限定的网址。例如,`https://fuchsia.dev/reference/fidl/fuchsia.io`。 + * 不过,一些 Fuchsia 参考文档存在于源树内。这些文档位于 `/reference/`,并在 `https://fuchsia.dev/fuchsia-src/reference/` 中发布。这些链接必须关联到具有 `.md` 扩展名的文件。例如,`/reference/syscalls/bti_create.md`。 + + +### 测试您的链接后再提交更改 + +一旦创建了有效的 markdown 文件,您应当运行 `doc-checker` 以确保您的文件使用了有效的链接。当您试图提交包含 `.md` 文件的更改时,Gerrit 会运行 `doc-checker`,并会在您的提交中含有损坏链接时进行阻止。 + +要在本地运行 `doc-checker`,请使用 `fx format-code` 工具: ```posix-terminal fx format-code ``` + +## 标题 + +### 为页面和章节标题使用句首字母大写格式 + +推荐:使用句首字母大写格式(sentence case): ```none # This title is an example of sentence case ``` + +不推荐:使用标题词首大写格式(title case): ```none # This Title is an Example of Title Case ``` + +### 为锚点使用连接号,不要使用下划线 + +默认情况下,`fuchsia.dev` 创建锚点时会在在空格处使用下划线(`_`)。不过,当引用一个页面中的章节时,请使用连接号(`-`,dash),使用 `{#section-title}` 创建自定义锚点。同样地,请在文件名中使用连接号。 + +推荐:为锚点使用连接号 + +```none + ## 这是一个章节标题 {#this-is-a-section-header} +``` + +## 代码样例 + +### 为 shell 命令样例使用 posix-terminal 格式化 + +推荐:为 shell 命令在 ``` 后添加 `posix-terminal` 能让读者更容易复制代码块中的内容。 +
 ```posix-terminal
@@ -149,66 +283,127 @@ fx ota
 ```
 
+ +该代码块在渲染时,命令前会出现 `$`: ```posix-terminal fx ota ``` + +不推荐:请勿在命令里硬编码 `$` 字符。 ```sh $ fx ota ``` + +### 使用 none 以禁用复制功能 + +推荐:对于不需要读者复制内容的代码或输出样例,请在 ``` 后添加 `none {:.devsite-disable-click-to-copy}`。 + +
+```none {:.devsite-disable-click-to-copy}
+$ my_command
+不必复制和粘贴该代码块。
+```
 
+ +该代码块在渲染时,右上角没有复制标志: + + ```none {:.devsite-disable-click-to-copy} +$ my_command +不必复制和粘贴该代码块。 ``` + +不推荐:为只需查看的内容启用复制功能。如果您在 ``` 之后不指定任何内容,那么复制功能默认是启用的。 + +
+```
+$ my_command
+不必复制和粘贴该代码块。
+```
 
+ +该代码块渲染为如下形式: + +``` +$ my_command +不必复制和粘贴该代码块。 ``` + +### 引用源代码时使用路径,不要使用网址 + +推荐:任何引用源代码的链接应当仅使用路径引用。否则您将收到静态错误检查(static error check)。 + +
+更新[状态标头][sh]
+[sh]: /zircon/system/ulib/inspect/include/lib/inspect/cpp/vmo/state.h
 
@@ -220,4 +415,4 @@ Update the [state header][sh] [google-dev-doc-style-guide]: https://developers.google.com/style [markdown-reference-links]: /contribute/docs/markdown.md [external-link-example]: http://example.com -[fuchsia-dev]: https://fuchsia.dev \ No newline at end of file +[fuchsia-dev]: https://fuchsia.dev diff --git a/contribute/governance/rfcs/0001_rfc_process.md b/contribute/governance/rfcs/0001_rfc_process.md index fc97df8f..728cc74b 100644 --- a/contribute/governance/rfcs/0001_rfc_process.md +++ b/contribute/governance/rfcs/0001_rfc_process.md @@ -27,7 +27,7 @@ establishing a consistent and transparent path for making project-wide, technical decisions, all the stakeholders can be confident about the technical direction of the project. --> -现在,Fuchsia 项目在项目级别的技术决定上并没有一个正式的工作流程。以我们目前的规模来说,这样的非正式性导致了不同的人在项目方向和如何组合系统上有着不同的看法。 通过建立这样一个一致且透明的项目标准, 所有的利益相关者都能够在项目的技术方向充满信息。 +现在,Fuchsia 项目在项目级别的技术决定上并没有一个正式的工作流程。以我们目前的规模来说,这样的非正式性导致了不同的人在项目方向和如何组合系统上有着不同的看法。 通过建立这样一个一致且透明的项目标准, 所有的利益相关者都能够在项目的技术方向充满信心。 @@ -72,7 +72,7 @@ The following kinds of changes must use the RFC process: changing the set of supported languages impacts everyone who needs to debug and understand the system, even if not everyone uses the new language. --> - * **制订项目政策。** 项目政策对系统有着广泛的影响,常常影响着项目贡献者。比如,修改支持的(编程)语言集,会影响需要调试和理解系统的人员,即使并不是所有的人都使用新语言。 + * **制定项目政策。** 项目政策对系统有着广泛的影响,常常影响着项目贡献者。比如,修改支持的(编程)语言集,会影响需要调试和理解系统的人员,即使并不是所有的人都使用新语言。 -### 步骤二:起草 {#draft} +#### 第二步:起草 {#draft} -在这个阶段不必担心您的 RFC 的序号。反之,请使用 `NNNN` 做为占位符。比如,一个文件的名字应该是 `NNNN_my_idea.md` 这种形式。RFC 文档会在合并之前不久获得一个序号。 +在这个阶段不必担心您的 RFC 的序号。反之,请使用 `NNNN` 作为占位符。比如,一个文件的名字应该是 `NNNN_my_idea.md` 这种形式。RFC 文档会在合并之前不久获得一个序号。 -> **建议。** 您可以在准备好接收反馈之前,先把包含 RFC 的 CL 标记为“进行中”。 +> **建议:** 您可以在准备好接收反馈之前,先把包含 RFC 的 CL 标记为“进行中”。 -利益相关者将代码审查标志设为 -1 或者 -2 并不一定会阻止项目接收该 RFC。要获取关于 RFC 接受决定流程的更多细节,请参阅下面的[“决定如何做出”章节](#how-decisions-are-made) 。 +利益相关者将代码审查标志设为 -1 或者 -2 并不一定会阻止项目接受该 RFC。要获取关于 RFC 接受决定流程的更多细节,请参阅下面的[“决定如何做出”章节](#how-decisions-are-made) 。 - -## Summary - -In the past, `zx_task_kill` allowed usermode to kill individual threads. However, -killing individual threads encourages bad practices and has a high chance of leaving -the process in a bad state. For this reason, the ability to kill individual threads -should be removed. - -## Motivation and problem statement - -There is no reasonable use for usermode to kill individual threads. Exposing such facility -encourages bad practices. - -On Fuchsia, like other systems, killing a thread is done asynchronously; for running threads there -is no practical way to determine the exact place where it is safe to terminate a thread. For a -blocked (waiting) thread, the safer and often simple solution is to add logic so upon wakeup the -thread exits by itself. - -Dangers killing a thread - -* Locks can be left acquired, including global locks like ones controlling the heap. -* Memory can be leaked. At the very least the thread stack, but often many other pieces. -* Runtime left in an inconsistent state. This is at least true for the C and Go runtime. -* Killing a thread in its way to a syscall leaves the process in an unknown state. Kernel is - fine but the process does not have a way to know what happened and what did not happen. -* Defeats RAII wrappers and automatic cleanup. In fact, it defeats most guarantees from the high - level languages Fuchsia uses. - -## Design - -The following syscall will fail with `ZX_ERR_NOT_SUPPORTED` when passed a handle to a thread: - -``` -zx_status_t zx_task_kill(zx_handle_t handle); -``` - -Processes and jobs will still be killable as normal. - -## Implementation - -Luckily, thread killing is not used very much in Fuchsia. The only use cases are in test code -that checks that a thread hits a specific exception. This code is going to be updated so that -the excepting thread exits itself after the exception is handled. For code where the exception -is unrecoverable, the excepting thread's instruction pointer can be set directly to -zx_thread_exit or the runtime's thread exit function before the thread resumes. These tests -may still leak what the excepting thread had stored on the heap, but the runtime is in -a better state, and the leaks will be collected when the test's process exits. - -## Performance - -N/A - -## Security considerations - -N/A - -## Privacy considerations - -N/A - -## Testing - -The zircon core-tests will be updated to ensure that the zx_task_kill syscall behaves as intended. -Some amount of static analysis can be done to find call sites of zx_task_kill that are passed -threads. - -The full Fuchsia Large Scale Change (LSC) process will be followed to ensure this change is -properly tested. - -## Documentation - -The documentation for [zx_task_kill](/reference/syscalls/task_kill.md) will be updated to -reflect that threads are not killable. - -## Drawbacks, Alternatives, and Unknowns - -The alternative to this proposal is the current status quo, which is to allow threads to be -killed. Threads have been killable for the entire history of Fuchsia, but there has not been -any acceptable use cases where programs have relied on this behavior. For this reason, -we believe that thread killing can be safely removed. - -## Prior art and references - -* [Windows Vista tries to remove -TerminateThread](https://devblogs.microsoft.com/oldnewthing/20150814-00/?p=91811) +{% set rfcid = "RFC-0007" %} +{% include "docs/contribute/governance/rfcs/_common/_rfc_header.md" %} +# {{ rfc.name }}: {{ rfc.title }} + + + +## 概述 + + +过去,`zx_task_kill` 允许在用户态杀死单个线程。但是,杀死单个线程会为不良做法提供支持,并且很有可能使进程处于不良状态。出于这个原因,应该删除杀死单个线程的能力。 + + +## 动机与问题陈述 + + +对于用户态而言,杀死单个线程的做法没有合理用途。暴露此类能力会为不良做法提供支持。 + + +在 Fuchsia 上,和其他系统一样,杀死一个线程是异步完成的;对于正在运行的线程,没有实用的方法来确定可安全终止线程的确切位置。对于阻塞(等待)状态的线程,通常更安全且简单的解决方案是添加逻辑,以便在唤醒后线程自行退出。 + + +杀死线程的危险 + + +* 锁可以被保持获取,包括像控制堆这样的全局锁。 +* 内存可能会泄漏。至少线程堆栈可能泄漏,但通常还有许多其他部分的内存会泄漏。 +* 运行时处于不一致的状态。至少对于 C 和 Go 运行时来说是这样。 +* 以系统调用的方式杀死一个线程会使进程处于未知状态。这对内核没有影响,但该进程无法知道发生了什么以及没有发生什么。 +* 破坏 RAII 包装器和自动清理。事实上,它破坏了 Fuchsia 使用的高级语言的大多数保证机制。 + + +## 设计 + + +当将句柄被传递给线程时,以下系统调用将失败并返回`ZX_ERR_NOT_SUPPORTED`: + +``` +zx_status_t zx_task_kill(zx_handle_t handle); +``` + + +进程和作业仍然可以正常地被杀死。 + + +## 实现 + + +幸运的是,Fuchsia 中并没有太多使用到杀死线程。唯一的用例是在检查线程是否遇到特定异常的测试代码中。此代码将被更新,以便异常线程在异常被处理后自行退出。对于异常无法恢复的代码,可以在线程恢复前,将异常线程的指令指针直接设置为 zx_thread_exit 或运行时的线程退出函数。这些测试可能仍然会泄漏异常线程存储在堆上的内容,但运行时会处于一个更好的状态,并且会在测试的进程退出时收集泄漏的内容。 + + +## 性能 + +N/A + + +## 安全性考虑 + +N/A + + +## 隐私问题 + +N/A + + +## 测试 + + +Zircon 核心测试将被更新,以确保 zx_task_kill 系统调用按预期运行。可以进行一些静态分析来找到传递线程的 zx_task_kill 的调用点。 + + +将遵循完整的 Fuchsia 大型变更(Large Scale Change,LSC)流程,以确保这一变化被正确测试。 + + +## 文档 + + +[zx_task_kill](/reference/syscalls/task_kill.md) 的文档将被更新以反映线程不可杀死。 + + +## 缺点、替代方案和未知因素 + + +该提议的替代方案是当前的现状,即允许线程被杀死。在 Fuchsia 的整个历史中,线程都是可以被杀死的,但是没有任何可接受的用例表明程序依赖于这种行为。出于这个原因,我们相信可以安全地删除线程杀死功能。 + + +## 现有技术和参考文献 + + +* [Windows Vista 尝试移除 TerminateThread 方法](https://devblogs.microsoft.com/oldnewthing/20150814-00/?p=91811) diff --git a/general-translation-guide.md b/general-translation-guide.md index 5d52bbde..f79451a3 100644 --- a/general-translation-guide.md +++ b/general-translation-guide.md @@ -69,8 +69,12 @@ 1. 英文和中文非标点、数字和中文非标点间请用 1 个空格分割;英文或数字与中文标点间请不要空格。可以考虑使用[该软件](https://pypi.org/project/zhlint/)或类似程序进行自动化排版。 +1. **请不要参照英文写法在译文段落内添加单个换行**。单个换行会使得渲染后的文档内出现多余的空格。 + 1. 为提高校对时文本的可读性,请尽量分段翻译,避免一次性注释过多段落并进行大段翻译。 + + ### 翻译规范 1. 请至少在同一目录下保持措辞一致。 @@ -120,7 +124,7 @@ 1. 原文是内联代码格式的、具有可读性的非代码内容的。 1. 原文描述的是英文语境内容,强调了该处英文形式,且具有准确中文翻译的。 - 则请使用下面的方式标注: + 对于**所在位置不是标题中的**,请使用下面的方式标注: - 如果原文不涉及全称和简称问题,则请在译文对应位置后使用全角括号标注英文原文。另外,如果原文在代码区内,则请在代码区外标注。 - 如果原文同时具有全称和简称,或原文是未给出全称的专业术语简称,则请在译文对应位置后使用全角括号依次标注全称和简称,并在中间使用全角逗号分隔。另外,如果原文在代码区内,则请在代码区外标注。 @@ -149,6 +153,11 @@ 具体地,第一例中只包含全称,因此正常使用全角括号标注;第二例中包含了英文简称,故在全角括号中依次标注全称和简称,并使用全角逗号分隔;第三例在 [Google 公司的帮助文档](https://developer.android.com/guide/platform#:~:text=%E9%A2%84%E5%85%88%20(AOT)%20%E5%92%8C-,%E5%8D%B3%E6%97%B6%20(JIT)%20%E7%BC%96%E8%AF%91,-%E4%BC%98%E5%8C%96%E7%9A%84)中已有译例,因此按照固定方式翻译和标注。 + 对于**所在位置是标题中的**,请使用下面的方法标注: + + - 如果在正文中出现了该概念,则应当在正文进行标注,而不应在标题中进行标注。 + - 如果在正文中未出现该概念,则除非:(1)翻译具有较大歧义性,或(2)在其他文章中再次出现(即证明本身是重要概念),这些情况可以在标题中标注原文,否则不应在标题中标注原文(即不进行标注)。 + - **原文作正文,标注译文。** 如果满足下列条件之一: 1. 原文是未适配中文的输出内容的。 diff --git a/get-started/_common/components/_debugging_intro.md b/get-started/_common/components/_debugging_intro.md index 7b37df46..510739ec 100644 --- a/get-started/_common/components/_debugging_intro.md +++ b/get-started/_common/components/_debugging_intro.md @@ -1,4 +1,7 @@ + +开发软件意味着要处理程序崩溃和发现错误的根源。Fuchsia 有一套工具来帮助识别和诊断组件中的问题,从分析崩溃日志到在核心代码中进行完整的逐步调试。 diff --git a/get-started/_common/components/_declaring_intro.md b/get-started/_common/components/_declaring_intro.md index 395e91b2..8ee335b4 100644 --- a/get-started/_common/components/_declaring_intro.md +++ b/get-started/_common/components/_declaring_intro.md @@ -1,15 +1,24 @@ + +每个组件(component)都有一个声明,描述组件属性和功能。对于在软件包中分发的组件,其声明使用**组件清单(component manifest)文件**表示,并在**组件解析器**的帮助下加载。 + +![该图显示了如何使用“组件清单”来声明组件。该清单由开发者工具编译,并在运行时解析到设备上。](/get-started/images/components/component-manifest.png){: width="836"} + +请您使用组件清单语言(CML)文件声明组件。在构建时,组件清单编译器(`cmc`)工具会验证清单源并将其编译为二进制格式(`.cm`),并将其存储在组件的软件包中。在运行时,组件解析器将二进制清单文件加载到[组件管理器](/glossary/README.md#Component-Manager)的 [ComponentDecl](https://fuchsia.dev/reference/fidl/fuchsia.component.decl#Component) FIDL 结构中。 diff --git a/get-started/_common/components/_declaring_manifests.md b/get-started/_common/components/_declaring_manifests.md index dab204a6..2cbfe72c 100644 --- a/get-started/_common/components/_declaring_manifests.md +++ b/get-started/_common/components/_declaring_manifests.md @@ -1,9 +1,14 @@ -## Component manifests + +## 组件清单 + +CML 文件是以 `.cml` 扩展名结尾的 [JSON5](https://json5.org/){: .external} 文件。如下 CML 清单文件示例,描述了一个运行 ELF 二进制文件的简单组件,该文件向系统日志打印一条“Hello, World”信息: + +```json5 +{ + // 有关要运行的程序的信息。 + program: { + // 使用内置的 ELF 运行器。 + runner: "elf", + // 为此组件运行的二进制文件。 + binary: "bin/hello", + // 程序参数 + args: [ + "Hello", + "World!", + ], + }, + + // 此组件使用的能力。 + use: [ + { protocol: "fuchsia.logger.LogSink" }, + ], +} ``` + +该文件声明了关于组件的两个主要部分的信息: + +注意:要获取组件清单(component manifest)的更多详细信息,请参阅[组件清单](/concepts/components/v2/component_manifests.md)。 + +* `program`:描述可执行信息,例如二进制文件、程序参数和相关联的运行时。在此示例中,二进制文件被编译为 ELF 可执行文件并使用内置的 [ELF 运行器](/concepts/components/v2/elf_runner.md)。 + +* `use`:声明此组件运行所需的功能。在此示例中,`fuchsia.logger.LogSink` 协议使该组件能够向系统日志(syslog)写入消息。 diff --git a/get-started/_common/components/_declaring_shards.md b/get-started/_common/components/_declaring_shards.md index f752add6..e4b9db15 100644 --- a/get-started/_common/components/_declaring_shards.md +++ b/get-started/_common/components/_declaring_shards.md @@ -1,15 +1,23 @@ -## Manifest shards + +## 清单碎片 + +一些能力集合代表了系统中许多组件所共有的用例需求,例如日志记录。为了简化将这些能力纳入组件的过程,本框架将其抽象为**清单碎片**(Manifest shard),可将其纳入 CML 源文件中。 + +下面是一个与前面的示例等效的 CML。在这种情况下,通过包含 `diagnostics/syslog/client.shard.cml` 文件,而不是显式地声明 `fuchsia.logger.LogSink` 来提供必要的日志记录功能: + +```json5 +{ + include: [ "syslog/client.shard.cml" ], + + // 有关要运行的程序的信息。 + program: { + // 使用内置的 ELF 运行器。 + runner: "elf", + // 为此组件运行的二进制文件。 + binary: "bin/hello-world", + // 程序参数 + args: [ + "Hello", + "World!", + ], + }, +} +``` diff --git a/get-started/_common/components/_organizing_identifying.md b/get-started/_common/components/_organizing_identifying.md index 1c3fd62e..55ce8032 100644 --- a/get-started/_common/components/_organizing_identifying.md +++ b/get-started/_common/components/_organizing_identifying.md @@ -1,21 +1,31 @@ -## Identifying components + +## 组件的标记 + +组件由 URL 标识。框架借助**组件解析器**将组件 URL 解析为组件声明。解析器本身就是能够处理特定 URL 格式并获取组件清单、程序和资源的组件。 + +大多数组件都发布在 Fuchsia 包内,因此组件 URL 是对该包内组件清单的引用。请查看下面的示例: ```none fuchsia-pkg://fuchsia.com/{{ '' }}foo-package{{ '' }}#meta/{{ '' }}foo-component.cm{{ '' }} ``` + +组件实例由称为 **绰号(moniker)** 的拓扑路径引用来标识。组件的绰号将其在组件实例树中的位置指示为绝对或相对路径。例如,绰号路径 `/core/system-updater` 指的是存在于 `core` 领域中的 `system-updater` 的实例。 diff --git a/get-started/_common/components/_organizing_intro.md b/get-started/_common/components/_organizing_intro.md index 50f7b8de..8ef85e7c 100644 --- a/get-started/_common/components/_organizing_intro.md +++ b/get-started/_common/components/_organizing_intro.md @@ -1,24 +1,37 @@ + +系统中的所有组件组成一个有根的**组件实例树**。树中的父组件负责将其他组件的实例声明为其子组件并为它们提供能力。同时,子组件可以向父组件公开能力。这些组件实例和能力关系构成了**组件拓扑**。 + +任何父组件及其所有子组件在树中形成一个称为**领域**的组。领域使父级能够控制那些能力流入和流出其组件的子树,从而创建能力边界。这种封装允许领域在内部进行重组,而不会影响依赖于其公开能力的外部组件。 + +![图表展示了组件实例被组织成一个树,父组件通过“能力路由”确定每个子组件可用的能力。](/get-started/images/components/component-topology.png){: width="616"} + +在上图中,`fuchsia.example.Foo` 协议能力通过组件实例树从提供者路由到客户端。组件使用 `use` 关键字声明它们**需要**的能力: + +```json5 +{ + // 程序运行的有关信息。 + program: { + // 使用内置的 ELF 运行程序来运行二进制文件。 + runner: "elf", + // 运行该组件的二进制文件。 + binary: "bin/client", + }, + + // 此组件所需的能力。 + use: [ + { protocol: "fuchsia.example.Foo" }, + ], +} ``` + +组件使用组件清单中的 `capabilities` 部分声明它们实现或**提供**的能力。这使得组件框架知道该能力和它的提供者。请查看下面的 `provider.cml` 示例: + +```json5 +{ + // 程序运行的有关信息。 + program: { + // 使用内置的 ELF 运行程序来运行二进制文件。 + runner: "elf", + // 运行该组件的二进制文件。 + binary: "bin/provider", + }, + // 此组件提供的能力。 + capabilities: [ + { protocol: "fuchsia.example.Foo" }, + ], + // 通过此组件路由的能力。 + expose: [ + { + protocol: "fuchsia.example.Foo", + from: "self", + }, + ], +} +``` + + +`expose` 关键字使这个组件的能力通过它的父组件向其他领域提供,这也可能包括这个组件的子组件提供的能力。在这种情况下,能力的来源是 `self`,因为这个组件是提供者。 + +父组件控制领域内的**能力路由**,创建从客户端组件到提供者的显式路径。请查看以下 `parent.cml` 清单示例: ```json5 { @@ -96,18 +160,28 @@ example `parent.cml` manifest: } ``` + + + +父组件在领域中声明一组子组件,并使用 `offer` 关键字将能力路由到它们。用这种方法,父组件就决定了每个子组件能力的范围和来源。这也使拓扑中的多个组件能够提供相同的能力,因为组件框架依赖于显式路由来确定如何解析来自每个客户端的请求。 + +注意:要获取关于组件组织的更多详细信息,请参阅[组件拓扑](/concepts/components/v2/topology.md)。 diff --git a/get-started/_common/components/_organizing_lifecycle.md b/get-started/_common/components/_organizing_lifecycle.md index 7ae52f80..6e5a9e85 100644 --- a/get-started/_common/components/_organizing_lifecycle.md +++ b/get-started/_common/components/_organizing_lifecycle.md @@ -1,37 +1,65 @@ -## Component lifecycle + +## 组件生命周期 + +在组件拓扑中添加和移除组件实例时,会创建和销毁组件实例。这可以通过以下两种方式之一发生: + +* **静态地**:该实例在组件清单中被声明为树中另一个组件的子组件。静态组件仅当一个更新改变了组件拓扑时才会创建和销毁。 + +* **动态地**:实例在运行时使用 `fuchsia.component.Realm` 协议在组件 `collection` 中添加或移除。动态组件在系统关闭时销毁。 + +一旦组件被销毁,框架就会移除它的持久状态(比如本地存储)。 + +当一个组件尝试打开到另一组件的通道时(这称为**绑定**(binding)),框架会启动后者的一个组件实例。当连接到由组件所暴露的能力时,绑定会**隐式**发生。对已经启动的组件进行绑定,会连接到其当前运行的实例。 + + + +组件可能会通过退出程序(由组件的 `runner` 定义)自行停止,或者可能由框架在系统关闭时停止。在被销毁之前,框架将组件移动到**关闭**状态以表示它不能再次启动。 + +![该图显示了组件如何具有两种不同的状态:实例和执行。这些状态描述了“组件生命周期”。](/get-started/images/components/component-lifecycle.png){: width="662"} + +注意:要获取关于组件状态和执行的更多详细信息,请参阅[组件生命周期](/concepts/components/v2/lifecycle.md)。 diff --git a/get-started/_common/components/_product_driver.md b/get-started/_common/components/_product_driver.md index e56a8b82..814fc730 100644 --- a/get-started/_common/components/_product_driver.md +++ b/get-started/_common/components/_product_driver.md @@ -1,13 +1,25 @@ + +## 驱动框架 + +与会话类似,Fuchsia 驱动框架使开发人员能够将产品特定的设备驱动程序实现为组件。一些驱动程序组件代表硬件接口控制器,例如 PCI 或 USB,而其他驱动程序组件则与终端设备交互,例如以太网控制器或键盘。 + +当设备被发现或连接到系统时,`driver_manager` 平台组件启动必要的驱动程序组件,将它们绑定到硬件接口,并管理它们的生命周期。 + +注:要获取关于驱动框架的更多细节,请参阅 [Fuchsia 驱动框架](/development/drivers/concepts/fdf.md)。 diff --git a/get-started/_common/components/_product_session.md b/get-started/_common/components/_product_session.md index d776e8c1..74b6d30e 100644 --- a/get-started/_common/components/_product_session.md +++ b/get-started/_common/components/_product_session.md @@ -4,12 +4,16 @@ Sessions are components that encapsulate a product’s user experience. The session framework serves as a boundary between the Fuchsia platform and the product-level user interaction. Each Fuchsia product defines a single session instance as the root of the product experience, which may or may not manage -additional child components. +additional child components. --> +会话是一系列封装了产品用户体验的组件。会话框架充当 Fuchsia 平台和产品级用户之间交流的边界。每个 Fuchsia 产品都将单个会话实例定义为产品体验的根,它可能管理,也可能不管理其他子组件。 + The `session_manager` platform component starts the session component on boot and offers it a fixed set of capabilities necessary to support the session framework APIs for elements such as window management, input event handling, or -accessibility. +accessibility. --> +`session_manager` 平台组件在启动时打开会话组件,并为其提供一组固定的功能,以支持诸如窗口管理、输入事件处理或无障碍功能等元素的会话框架 API。 -Note: For more details on the session framework, see -[Introduction to the session framework](/concepts/session/introduction.md). + +注: 要获取关于会话框架的更多细节,请参阅[会话框架介绍](/concepts/session/introduction.md)。 diff --git a/get-started/_common/components/_tests_intro.md b/get-started/_common/components/_tests_intro.md index 9b994c64..982d91d7 100644 --- a/get-started/_common/components/_tests_intro.md +++ b/get-started/_common/components/_tests_intro.md @@ -1,19 +1,31 @@ + +Fuchsia **测试运行器框架**(Test Runner Framework)使开发者能够使用各种语言和运行时为组件构建测试,并在目标设备上执行它们。该框架提供了实现 `fuchsia.test.Suite` 协议的**测试运行器**组件,并与通用的特定语言的测试框架(如 GoogleTest (C++))集成。 + +`test_manager` 组件负责在 Fuchsia 设备上运行测试。它检查实现测试套件协议的组件,并将它们作为子组件启动。这意味着 `test_manager` 也负责为每个测试套件提供能力,即创建通常所谓的**测试领域**。 + +![图中显示了测试运行器框架如何为开发者提供接口来公开测试套件,以及开发者工具如何在 Fuchsia 设备上执行测试。](/get-started/images/components/test-realm.png){: width="714"} + +`ffx test` 等开发者工具与设备上的 `test_manager` 进行通信,以执行测试套件并取回结果。 diff --git a/get-started/_common/fidl/_connecting_intro.md b/get-started/_common/fidl/_connecting_intro.md index 644a0b63..d1eecf71 100644 --- a/get-started/_common/fidl/_connecting_intro.md +++ b/get-started/_common/fidl/_connecting_intro.md @@ -1,3 +1,4 @@ + +协议句柄是一个很常见的对象,它提供了一个 FIDL 协议的实现,FIDL 协议可以通过组件命名空间找到。组件框架使用能力促进了[组件](/glossary/README.md#component)之间的协议发现。能力路由描述了哪个组件应该作为任何给定客户端的提供者。一旦确定了适当的组件,[组件管理器](/glossary/README.md#component-manager)就会使用每个组件命名空间中的句柄来启动组件之间的连接。 + +请参考以下 `fuchsia.example.Foo` 协议的示例: + +![图中显示了如何连接组件,组件是能力路由和协议服务的结合。组件必须为它们提供给其他组件的协议的实现来提供服务。](/get-started/images/fidl/protocol-serving.png){: width="629"} + +该图强调了执行连接所涉及的主要元素: + +1. 提供者组件在清单的 `capabilities` 部分中静态地**声明**协议。这使组件框架能够执行能力路由。 + +2. 客户端组件在清单(manifest)的 `use` 部分静态地**请求**协议。如果能力路由成功,这将在客户端的命名空间中创建 `/svc/fuchsia.example.Foo` 协议项。 + +3. 提供者代码在运行时**发布**实现。这将在提供者传出目录中的 `/svc/fuchsia.example.Foo` 处创建一个协议项。 + +4. 客户端代码在运行时**连接**到协议句柄。这将与运行在提供者组件中的实现打开一个 FIDL 连接。 diff --git a/get-started/_common/fidl/_fidl_intro.md b/get-started/_common/fidl/_fidl_intro.md index 33d69954..02609832 100644 --- a/get-started/_common/fidl/_fidl_intro.md +++ b/get-started/_common/fidl/_fidl_intro.md @@ -1,11 +1,17 @@ + +Fuchsia 接口定义语言(FIDL)是用来描述 Fuchsia 程序使用的进程间通信(IPC)协议的语言。FIDL 为供应商提供了一种简化的声明语法,以便将接口定义为一种**协议**。支持的数据类型包括整数、浮点数、布尔运算、字符串和[句柄][glossary.handle]。这些可以被组织成更复杂的数组、向量、结构体、表格和联合体。 + +考虑以下用于 `Echo` 接口的 FIDL 协议的示例。 ```fidl library fuchsia.examples; @@ -15,27 +21,45 @@ library fuchsia.examples; {% includecode gerrit_repo="fuchsia/fuchsia" gerrit_path="examples/fidl/fuchsia.examples/echo.test.fidl" region_tag="echo" adjust_indentation="auto" %} ``` + +FIDL 协议描述了一组**方法**,在通过通道发送消息时被调用。通道消息本身是异步的,发送方和接收方彼此可以独立操作。FIDL 方法引入了更高层次的语义,使 FIDL 交易的客户端和服务器端的编程更加符合传统习惯。 + +FIDL 支持以下方法类型: + +* **双向方法**:一个典型的方法调用是,接受可选的参数,其返回类型定义在 `->` 操作符之后。双向方法会阻塞调用方直到收到响应。在 `Echo` 的例子中,`EchoString()` 方法是一个双向的方法。 + +* **单向方法**:异步方法调用,立即返回而不等待响应。没有声明返回类型的方法被认为是客户端的单向方法。在 `Echo` 的例子中,`SendString()` 方法是一个单向的方法。 + +* **事件**:必要时,服务器端可以向客户端发送非请求信息,这种消息称为事件。事件在 `->` 操作符的返回端声明其方法名称。在 `Echo` 的例子中,`OnString()` 方法是一个事件。 + +注意:要获取 FIDL 语言语法和支持的类型的更多细节,请参阅 [FIDL 语言规范](/reference/fidl/language/language.md)。 [glossary.handle]: /glossary/README.md#handle diff --git a/get-started/_common/fidl/_overview.md b/get-started/_common/fidl/_overview.md index 1075fdb1..3e6be97e 100644 --- a/get-started/_common/fidl/_overview.md +++ b/get-started/_common/fidl/_overview.md @@ -1,22 +1,34 @@ + +您已经在 **Fuchsia 简介**中了解到,Zircon 提供了内核对象类型来支持 Fuchsia 的进程间通信(IPC)。这些对象类型定义了进程用来交换数据的特定机制。在这个框架内,Zircon 通道提供了一个基于消息的异步传输能力,即支持同时传递数据和一组句柄来授予访问权。 + +Zircon 通道是 **Fuchsia 接口定义语言**(Fuchsia Interface Definition Language,FIDL)所描述的更高层次的交互的基础,FIDL 是用来描述 Fuchsia 程序所使用的 IPC 协议的语言。FIDL 允许不同的客户和服务器相互进行操作,通过强制执行一套语义行为和在通道上操作的持久性格式来实现相互操作。 + +程序通过 **FIDL 编译器**生成的特定语言的绑定(binding)和库与 FIDL 协议进行交互,该编译器是用于隐藏 Zircon IPC 复杂性的一个抽象层。这使得我们可以引入熟悉的编程习惯,如结构化类型和同步执行。编译器为每种支持的语言都生成了绑定,因此供应商不需要维护客户端库。 + +![图中显示了 Fuchsia 接口定义语言(FIDL)如何通过一个通用接口促进进程间通信(IPC);与何种编程语言无关。](/get-started/images/fidl/fuchsia-interface.png){: width="870"} diff --git a/get-started/_common/fidl/_testing_intro.md b/get-started/_common/fidl/_testing_intro.md index b1611972..20be291d 100644 --- a/get-started/_common/fidl/_testing_intro.md +++ b/get-started/_common/fidl/_testing_intro.md @@ -1,3 +1,4 @@ + +[集成测试](https://en.wikipedia.org/wiki/Integration_testing){:.external} 侧重于验证组件的行为,因为它会与系统上其他组件进行交互。正因为如此,集成测试通常与主组件分开构建,并且可能将被测组件和其他依赖组件声明为子组件。根据测试的性质,依赖组件可以作为模拟(mock)或存根(stub)提供,以促进测试用例保持封闭性。 diff --git a/get-started/_common/intro/_architecture.md b/get-started/_common/intro/_architecture.md index 522c93d6..9455f7c9 100644 --- a/get-started/_common/intro/_architecture.md +++ b/get-started/_common/intro/_architecture.md @@ -1,29 +1,54 @@ + +![展示整个 Fuchsia 系统架构的高层图表的数据表,强调了核心组件和子系统] (/get-started/images/intro/fuchsia-architecture.png){: width="1080"} -The following architectural principles guide Fuchsia's design and development: + +以下架构性原则指导了 Fuchsia 的设计与开发: + +* [**简单:**][simple]Fuchsia 让创建、维护和集成软件与硬件在各种设备中都变得容易。 + +* [**安全:**][secure]Fuchsia 有着为现代计算设计的内核和软件模型。 + +* [**可升级:**][updatable]作为模块化操作系统,Fuchsia 允许内核、驱动和软件组件独立升级。 + +* [**高性能:**][performant]Fuchsia 为真实世界产品需求设计,并为性能优化。 + +系统的核心是 [Zircon][glossary.zircon],它是处理系统启动与引导的内核和一组库。其他所有系统组件都实现于用户空间并被隔离,再次强化了**最小特权原则**。这些组件包括: + +* 设备驱动 +* 文件系统 +* 网络栈 [glossary.zircon]: /glossary/README.md#zircon [simple]: /concepts/principles/simple.md diff --git a/get-started/_common/intro/_components_intro.md b/get-started/_common/intro/_components_intro.md index fbdc8fe7..f4aef32b 100644 --- a/get-started/_common/intro/_components_intro.md +++ b/get-started/_common/intro/_components_intro.md @@ -1,20 +1,28 @@ -**Components** are the foundational building blocks of software running in + +**组件**是 Fuchsia 中运行的软件的基石。每一个组件都是可以组合的沙盒模块,相互之间通过功能交互。这提高了系统安全性并在各个组件之间建立了清晰的接口,使它们更容易更新或替换。 -In Fuchsia, **everything is a component** (almost). Recall from the previous + +Fuchsia 中**一切都是组件**(几乎)。回想一下之前对 Zircon 的讨论,内核有意设计得很小,大多数核心服务都是在用户空间中实现。这意味着在 Fuchsia 上运行的大多数软件都是采用组件框架实现的,包括: -* User-facing applications + +* 面向用户的应用 +* 设备驱动 +* 文件系统 +* 媒体编解码器 +* 网络栈 -Outside the kernel there are only a few low-level exceptions not using the -component framework, such as bootloaders and the `userboot` process. + +内核之外只有少数不使用组件框架的底层例外,如引导程序和 `userboot` 进程。 diff --git a/get-started/_common/intro/_overview.md b/get-started/_common/intro/_overview.md index 14ce6cb7..fd7b58c0 100644 --- a/get-started/_common/intro/_overview.md +++ b/get-started/_common/intro/_overview.md @@ -1,6 +1,9 @@ -Fuchsia is a new open source operating system created at Google from the kernel -up to meet the needs of today's growing ecosystem of connected devices. + +Fuchsia 是谷歌从内核创建的一种新的开源操作系统,旨在满足当今不断增长的互联设备生态系统的需求。 + -In this training module, you'll learn the core principles behind this new + +在本培训模块中,您将了解这一新操作系统背后的核心原理,并探索 Fuchsia 如何为开发人员在各种设备上创建经久耐用的产品和体验奠定基础。 diff --git a/get-started/_common/intro/_sandboxing_intro.md b/get-started/_common/intro/_sandboxing_intro.md index 2e22ab62..e73de119 100644 --- a/get-started/_common/intro/_sandboxing_intro.md +++ b/get-started/_common/intro/_sandboxing_intro.md @@ -1,3 +1,6 @@ + +在这一章中,您将学习 Zircon 内核对象如何使 Fuchsia 能够遵循**最少特权原则**,隔离进程并只授予他们需要的权限。 diff --git a/get-started/_common/intro/_sandboxing_namespaces.md b/get-started/_common/intro/_sandboxing_namespaces.md index 7fd4a275..add13543 100644 --- a/get-started/_common/intro/_sandboxing_namespaces.md +++ b/get-started/_common/intro/_sandboxing_namespaces.md @@ -1,11 +1,16 @@ -## Namespaces - + +## 命名空间 + +进程的命名空间包含了进程对外界的私有视图,并且控制了进程能够对 Fuchsia 系统造成多少影响。 +这有效地定义了进程所在的沙箱的规则。 -Namespaces are populated with various resource objects, including: - + +命名空间由各种资源对象填充,包括: + +* **文件**: 包含二进制数据的对象。 +* **目录**: 包含其他对象的对象。 +* **套接字**: 打开时建立连接的对象,如命名管道。 +* **协议和服务**: 打开时提供结构化服务的对象。 +* **设备**: 提供对硬件资源的访问的对象。 + +进程的创建者基于那些所请求的能力,来填充命名空间的内容。 +进程不能向自己的命名空间添加对象,因为这实际上相当于进程在授予自身访问那些对象的权限。 diff --git a/get-started/_common/intro/_sandboxing_sandboxing.md b/get-started/_common/intro/_sandboxing_sandboxing.md index b6027567..8c31049b 100644 --- a/get-started/_common/intro/_sandboxing_sandboxing.md +++ b/get-started/_common/intro/_sandboxing_sandboxing.md @@ -1,10 +1,17 @@ -## Sandboxing + +## 沙盒 + +当一个新进程被创建时,它没有任何能力。 +进程完全依赖于其创建者通过传给它的那些[句柄][glossary.handle]来提供能力。 +我们也可以说,空进程没有**环境权限**(ambient authority)。 + +因此,进程被创建时通常被赋予一些初始资源和能力。 +`fuchsia.process.Launcher` 协议提供了从一个可执行文件和一组内核对象句柄来在系统上创建新进程的低级接口。 +大多数软件使用组件框架,它简化了创建一个有一组标准的初始能力的新进程来执行一些代码的工作。 +您将在稍后更详细地探索组件。 - + +

一些给予进程的初始句柄是被进程挂载到**命名空间**(namespace)中的目录。

[glossary.handle]: /glossary/README.md#handle \ No newline at end of file diff --git a/get-started/_common/intro/_zircon_syscall.md b/get-started/_common/intro/_zircon_syscall.md index 0cfc85f5..7d432a65 100644 --- a/get-started/_common/intro/_zircon_syscall.md +++ b/get-started/_common/intro/_zircon_syscall.md @@ -1,47 +1,85 @@ -## System calls + +## 系统调用 + +用户空间代码使用**系统调用**与内核空间对象交互。Zircon 有执行低层操作的系统调用,如: + +* 内存管理 +* 任务和进程管理 +* 进程间通信(IPC)与同步 +* 异常处理 +* 硬件支持服务(时钟、熵、设备 I/O) + + + +用户空间进程通过 `libzircon.so` 访问系统调用,这是一个 +[虚拟动态共享对象][glossary.virtual-dynamic-shared-object](virtual Dynamic Shared Object,vDSO)。 +Zircon vDSO 是 ELF 格式的共享库,它被内核映射到每个新进程的地址空间。 +这个库被称为“虚拟”,是因为它是直接由内核映像暴露,而非从文件加载的。 + +大多数系统调用直接操作一个或多个[句柄][glossary.handle]。 +句柄是进程内部对内核空间对象的引用,表示为32位整数(`zx_handle_t`)。 +每个句柄声明了持有者具有的对句柄自身或引用的对象执行操作的特权,即**权利**(right)。 diff --git a/get-started/build_fuchsia.md b/get-started/build_fuchsia.md index 7e66e119..42057111 100644 --- a/get-started/build_fuchsia.md +++ b/get-started/build_fuchsia.md @@ -1,167 +1,267 @@ + +# 配置和构建 Fuchsia {#configure-and-build-fuchsia} +这篇文档将引导您在主机上配置并构建 Fuchsia。 + +步骤如下: + +1. [前提条件](#prerequisites) +1. [设置构建配置](#set-your-build-configuration) +1. [提升构建速度(可选)](#speed-up-the-build) +1. [构建 Fuchsia](#build-fuchsia) + +## 1. 前提条件 {#prerequisites} + +在开始之前,请先检查是否满足如下要求: + +* [源代码设置](#source-code-setup) +* [硬件要求](#hardware-requirements) + +### 源代码设置 {#source-code-setup} + +根据文档[下载 Fuchsia 源代码](/get-started/get_fuchsia_source.md)指示下载 Fuchsia 的源代码,然后在您的计算机上设置开发环境。 + +### 硬件要求 {#hardware-requirements} + +您只能在具有下列主机架构之一的计算机上构建 Fuchsia: + +- x86-64 Linux (只支持基于 Debian 系列的发行版) +- x86-64 macOS + +注意:不支持 Windows 和 ARM64。 + +## 2. 设置构建配置 {#set-your-build-configuration} + +Fuchsia 的构建配置告诉构建系统进行构建的产品,以及构建面向的平台。 + +要设置您的 Fuchsia 构建配置,请运行 [`fx set`][fx-set-reference] 命令: ```posix-terminal fx set {{ '' }}PRODUCT{{ '' }}.{{ '' }}BOARD{{ '' }} ``` - + +请替换以下选项: + +* `PRODUCT`(产品):您想要构建的 Fuchsia 产品,比如:`core` 和 `workstation_eng`。 +* `BOARD`(板型):产品的可执行文件架构,比如:`x64` 和 `qemu-x64`。 + +下面的示例将一项构建配置设置为 `core.qemu-x64`: ```posix-terminal fx set core.qemu-x64 ``` - + +在这个示例中: + + * `core` 是 Fuchsia 具备最小功能集的产品,包括常用的网络功能。 + * `qemu-x64` 是 Fuchsia 模拟器(FEMU)的 x64 架构这一板型,FEMU 基于开源模拟器 [QEMU][qemu]{:.external}。 + +另外,下面的例子将一项构建配置设置为 `workstation_eng.x64`,这常用于[在设备上安装 Fuchsia 工作站][build-workstation]: ```posix-terminal fx set workstation_eng.x64 ``` - + +要获取关于构建配置的更多信息,请参阅[配置构建](/development/build/fx.md#configure-a-build)。 + +## 3. 提升构建速度(可选) {#speed-up-the-build} + +注意:这一步对于构建 Fuchsia 而言并不是必需的,但是可以在您构建 Fuchsia 时节省很多时间,因此建议您完成该步骤。 + +要提升 Fuchsia 构建速度,您可以使用下列服务之一: + +* [启用 Goma](#enable-goma) +* [安装 ccache](#install-ccache) + +### 启用 Goma {#enable-goma} + +[Goma](https://chromium.googlesource.com/infra/goma/server/){:.external} 是一个分布式编译器服务,适用于 Chrome、Android 和 Fuchsia 等开源项目。 + +如果您能访问 Goma, 请在您的计算机上 Goma 客户端: ```posix-terminal fx goma ``` - + +### 安装 ccache {#install-ccache} + +如果您无法访问 Goma,但想在本地加速构建,则可以使用 [ccache](https://ccache.dev/){:.external} 缓存之前构建的产物。 * {Linux} - + + 要在 Linux 上使用 `ccache`,请安装如下安装包: ```posix-terminal sudo apt install ccache ``` * {macOS} - + + 对于 macOS ,请参阅[在 Mac 上使用 CCache](https://chromium.googlesource.com/chromium/src.git/+/HEAD/docs/ccache_mac.md){:.external} 中的安装步骤。 + +如果您的 `CCACHE_DIR` 环境变量指向已有路径,那么 `ccache` 就会自动开启。 + +要覆盖此默认行为,请为 `fx set` 指定以下标志: + +* 即使其他的加速项可用,也要强制使用 `ccache`,则:
     fx set PRODUCT.BOARD --ccache
     
- + +* 要禁用 `ccache`:
     fx set PRODUCT.BOARD --no-ccache
     
- + +## 4. 构建 Fuchsia {#build-fuchsia} + +[`fx build`][fx-build-reference] 命令可以把源代码构建打包,或者构建成其他的类型。 + +要构建 Fuchsia,请运行以下命令: + +注意:构建时间一般为 90 分钟。 ```posix-terminal fx build ``` - + +当您修改源代码后,请再次运行命令 `fx build` 进行增量构建,或者运行 `fx -i build` 命令来开启一个监视进程,这个监视进程会在发现源代码更新时自动构建。 + +要获取关于构建 Fuchsia 的更多信息,请参阅[执行构建](/development/build/fx.md#execute-a-build)。 + +## 后续步骤 + +要在您的计算机上启动 Fuchsia 模拟器 (FEMU),请参阅[开启 Fuchsia 模拟器](/get-started/set_up_femu.md)。 + +不过,如果您想在硬件设备上运行 Fuchsia,请参阅[在设备上安装 Fuchsia](/development/hardware/README.md)。 + diff --git a/get-started/explore_fuchsia.md b/get-started/explore_fuchsia.md index f3786636..7079e48f 100644 --- a/get-started/explore_fuchsia.md +++ b/get-started/explore_fuchsia.md @@ -1,11 +1,9 @@ - -# 探索 Fuchsia {#explore-fuchsia} +# Explore Fuchsia {#explore-fuchsia} - -在设备或模拟器上启动并运行 Fuchsia 后,请查看以下资源: +Once you have Fuchsia up and running on a device or emulator, +check out the following resources: - @@ -14,93 +12,75 @@ check out the following resources: --> * [创建 Fuchsia 组件](#create-fuchsia-components)。 * [贡献更改](#contribute-changes)。 - -## 运行 ffx 命令 {#run-ffx-commands} +## Run ffx commands {#run-ffx-commands} - -[`ffx`][ffx-overview] 是 Fuchsia 目标工作流的主机工具,为所有 Fuchsia 环境和主机平台上提供一致的开发体验。 +and host platforms. - -以下是一些 `ffx` 命令示例: +The following are some of `ffx` command examples: - -* 显示设备列表: +* Display the list of devices: ```posix-terminal ffx target list ``` - -* 显示设备信息: +* Display the device information: ```posix-terminal ffx target show ``` - -* 输出设备日志: +* Print the device logs: ```posix-terminal ffx log ``` - -* 重启设备: +* Reboot the device: ```posix-terminal ffx target reboot ``` - -## 运行示例 +## Run examples {#run-examples} - -要试用 Fuchsia 的样例程序,请参考如下指南: +To try out Fuchsia's sample software, check out the guides below: - * [运行示例组件](/development/run/run-examples.md) * [运行测试组件](/development/run/run-test-component.md) * [运行端到端测试](/development/testing/run_an_end_to_end_test.md) - -## 创建 Fuchsia 组件 {#create-fuchsia-components} +## Create Fuchsia components {#create-fuchsia-components} - -Fuchsia 中软件的最小可执行单元是[组件](/concepts/components/v2),这些组件通过 -[FIDL](/concepts/fidl/overview.md)(Fuchsia 接口定义语言)协议彼此交互。 +Fuchsia 中软件的最小可执行单元是[组件](/concepts/components/v2),这些组件通过 [FIDL](/concepts/fidl/overview.md)(Fuchsia 接口定义语言)协议彼此交互。 要想了解更多有关 Fuchsia 组件和 FIDL 的信息,请参考如下指南: - -* [构建组件](/development/components/build.md) -* [FIDL 概览](/development/languages/fidl/README.md) -* [FIDL 教程](/development/languages/fidl/tutorials/overview.md) +* [FIDL tutorials](/development/languages/fidl/tutorials/overview.md) - -## 贡献更改 {#contribute-changes} +## Contribute changes {#contribute-changes} - -当您准备好为 Fuchsia 项目做出贡献时,请参阅[贡献更改][contribute-changes]。 +When you're ready to contribute to the Fuchsia project, +see [Contribute changes][contribute-changes]. - -## 参阅 +## See also - -要获取关于 Fuchsia 开发流程的更多信息,请参阅下列资源: +For more information on Fuchsia's development workflows, +check out the following resources: - * [源代码布局](/development/source_code/layout.md) * [构建系统](/development/build/build_system/index.md) + [components]: /concepts/components/v2 diff --git a/get-started/get_fuchsia_source.md b/get-started/get_fuchsia_source.md index 7bb6eafa..5463aaf4 100644 --- a/get-started/get_fuchsia_source.md +++ b/get-started/get_fuchsia_source.md @@ -1,30 +1,52 @@ + +# 下载 Fuchsia 源代码 + +本指南说明了如何下载 Fuchsia 源代码以及在您的机器上部署开发环境。 + +步骤如下: + +1. [执行预检查](#perform-a-preflight-check)。 +2. [安装必备软件包](#install-prerequisite-packages)。 +3. [下载 Fuchsia 源代码](#download-the-fuchsia-source-code)。 +4. [设置环境变量](#set-up-environment-variables)。 +5. [配置防火墙规则(可选)](#configure-firewall-rules)。 + + +## 1. 执行预检查 {#perform-a-preflight-check} + +Fuchsia 提供了一个预检查工具([`ffx platform preflight`][ffx-platform-preflight]),这个工具可以测试您的机器,并会通知您在该机器上可能会影响从源代码构建 Fuchsia 的任何问题。 + +注意:这个预检查工具只支持 x64 架构。目前 Fuchsia 不保证在其他宿主架构上能构建成功,比如 Windows 和 ARM64。 + +运行如下命令: * {Linux} @@ -38,14 +60,22 @@ Run the following command: curl -sO https://storage.googleapis.com/fuchsia-ffx/ffx-macos-x64 && chmod +x ffx-macos-x64 && ./ffx-macos-x64 platform preflight ``` + +## 2. 安装必备软件包 {#install-prerequisite-packages} + +Fuchsia 要求 `curl`、 `file`、 `unzip` 以及 `git` 等工具是最新版。 `git` 版本需为 2.28 或以上。 * {Linux} + + 安装(或更新)以下软件包: ```posix-terminal sudo apt install curl file git unzip @@ -53,56 +83,92 @@ of `git` needs to be 2.28 or higher. * {macOS} + + 安装 Xcode 命令行工具: + + 注意:如果 `ffx platform preflight` 显示 Xcode 工具已经安装,则请跳过这一步。 ```posix-terminal xcode-select --install ``` + +## 3. 下载 Fuchsia 源代码 {#download-the-fuchsia-source-code} + +Fuchsia 提供了一个[引导脚本](/scripts/bootstrap),这个脚本会创建一个名为 `fuchsia` 的文件夹,并把 Fuchsia 源码下载到这里。 + +下载 Fuchsia 源码要求您机器上有大约 2 GB 的存储空间。根据您的构建配置,之后在构建 Fuchsia 时,您还额外需要 80 到 90 GB 的存储空间。另外,下载过程中也会使用大量的内存。建议您在此过程中关闭其他非必要的进程。 + +要下载 Fuchsia 源代码,请执行如下步骤: + +1. 选择一个 Fuchsia 源代码下载目录,例如: + + 注意:您可以在任何目录下设置 Fuchsia。本指南选择 `$HOME` 作为示例。 ```posix-terminal cd $HOME ``` + +1. 运行引导脚本: + + 注意:下载 Fuchsia 源代码可能需要 60 分钟。 ```posix-terminal curl -s "https://fuchsia.googlesource.com/fuchsia/+/HEAD/scripts/bootstrap?format=TEXT" | base64 --decode | bash ``` + + + 这个脚本会创建 `fuchsia` 目录,并且下载源代码。 + + 如果您在脚本运行期间看到了 `Invalid authentication credentials` 错误信息,请参考[认证错误](#authentication-error)章节寻求帮助。 + +## 4. 设置环境变量 {#set-up-environment-variables} + +Fuchsia 建议您按照如下操作更新 shell 配置文件: + +* 添加 `.jiri_root/bin` 目录到您的 `PATH` 环境变量 + + Fuchsia 源码中的 `.jiri_root/bin` 目录包含了 [`jiri`](https://fuchsia.googlesource.com/jiri) 和 [`fx`](/development/build/fx.md) 工具,这些是 Fuchsia 工作流中的必备工具。Fuchsia 使用 `jiri` 工具在 Fuchsia 的项目中管理仓库,而 `fx` 工具能够帮助配置、构建、运行以及调试 Fuchsia。Fuchsia 的工具链需要可以在您的 `PATH` 环境变量中找到 `jiri` 工具。 + +* 使用“source”命令导入 `scripts/fx-env.sh` 文件 + + 虽然这并不是必须的,但是使用“source”命令导入 [`fx-env.sh`](/scripts/fx-env.sh) 文件可以在您的终端中启用一系列有用的 shell 函数。比如,它会创建 `FUCHSIA_DIR` 环境变量,以及提供 `fd` 命令用来在目录中导航时提供自动补全 (要获取更多信息,请参阅 `fx-env.sh` 中的注释)。 + +注意:如果您不想更新您的 shell 配置,则请参阅[在不更新 PATH 变量的情况下准备 Fuchsia](#work-on-fuchsia-without-updating-your-path)。 + +要更新您的 shell 配置文件来设置 Fuchsia 的环境变量,请执行如下步骤: + +1. 使用文本编辑器打开您的 `~/.bash_profile` 文件(在以下示例中,我们使用 [Nano][nano]{:.external} 文本编辑器): + + 注意:本指南使用 `bash` 终端作为示例,如果您使用 `zsh`,请在后续步骤中请替换 `~/.bash_profile` 为 `~/.zprofile`: ```posix-terminal nano ~/.bash_profile ``` + +1. 在您的 `~/.bash_profile` 文件中添加如下配置: + + 注意:如果您的 Fuchsia 源码不在 `~/fuchsia` 目录下,则请替换 `~/fuchsia` 为您的 Fuchsia 目录。 ```sh export PATH=~/fuchsia/.jiri_root/bin:$PATH source ~/fuchsia/scripts/fx-env.sh ``` + +1. 保存文件并退出。 + +1. 要更新环境变量,请运行如下命令: ```posix-terminal source ~/.bash_profile ``` + +1. 验证您可以在您的 `fuchsia` 目录内运行如下命令且没有报错: ```posix-terminal jiri help @@ -169,85 +269,151 @@ do the following: fx help ``` + +## 5. 配置防火墙规则(可选) {#configure-firewall-rules} + +注意:这一步对构建或者运行 Fuchsia 并不是必需的。但是推荐您进行该步骤,以确保 Fuchsia 模拟器实例能在 Linux 上流畅运行。 + +(**仅限 Linux**)如果您计划在 Linux 中运行 Fuchsia,那么建议您运行如下命令,在宿主机上允许 Fuchsia 特定流量: ```posix-terminal fx setup-ufw ``` + +该脚本需要 `sudo` 权限(会要求您输入密码)来设置适当的防火墙规则。(要获取关于该脚本的更多信息,请参考 [`setup-ufw`][setup-ufw])。 + +## 后续步骤 + +要构建您第一个 Fuchsia 系统镜像,请参阅[配置和构建 Fuchsia](/get-started/build_fuchsia.md)。 + +## 附录 + +### 认证错误 {#authentication-error} + +如果您在引导脚本运行过程中看到了 `Invalid authentication credentials`(无效的认证凭据)错误信息,那么您的 `~/.gitcookies` 文件中可能含有来自 `googlesource.com` 中一些仓库的 cookie,引导脚本想要匿名检查。 + +要解决该错误,请使用以下方式之一: + +* 按照屏幕上的指示为指定仓库获取密码。 +* 删除 `.gitcookies` 文件中有问题的 cookie。 + + +### 在不更新 PATH 变量的情况下准备 Fuchsia {#work-on-fuchsia-without-updating-your-path} + +下面的章节为[设置环境变量](#set-up-environment-variables)章节提供了替代方法: + +* [把工具复制到二进制目录](#copy-the-tool-to-your-binary-directory) +* [添加符号链接到二进制目录](#add-a-symlink-to-your-binary-directory) + +#### 把工具复制到二进制目录 {#copy-the-tool-to-your-binary-directory} + +如果您不想更新您的环境变量,但是想在任何目录中使用 `jiri` 工具,那么请把 `jiri` 工具复制到 `~/bin` 目录中,比如: + +注意:如果您的 Fuchsia 源码不在 `~/fuchsia` 目录中,则请把 `~/fuchsia` 替换为您的 Fuchsia 目录。 ```posix-terminal cp ~/fuchsia/.jiri_root/bin/jiri ~/bin ``` + +但是,您必须在没有 `sudo` 的情况下对 `~/bin` 有写访问权限。否则,`jiri` 无法自动保持最新版本。 + +#### 添加符号链接到二进制目录 {#add-a-symlink-to-your-binary-directory} + +同样地,如果您想在不更新环境变量的情况下使用 `fx` 工具,则请在 `~/bin` 路径中添加您 `fx` 工具的链接文件,比如: + +注意:如果您的 Fuchsia 源码不在 `~/fuchsia` 目录中,则请把 `~/fuchsia` 替换为您的 Fuchsia 目录。 ```posix-terminal ln -s ~/fuchsia/scripts/fx ~/bin ``` - + +或者,请直接使用 `fx` 工具的路径来运行,比如: ```posix-terminal ./scripts/fx help ``` - + +无论哪种情况,您都需要 `jiri` 工具在您的 `PATH` 环境变量中。 [ffx-platform-preflight]: https://fuchsia.dev/reference/tools/sdk/ffx#preflight diff --git a/get-started/learn/intro/architecture.md b/get-started/learn/intro/architecture.md index aab7cae8..fb7f06da 100644 --- a/get-started/learn/intro/architecture.md +++ b/get-started/learn/intro/architecture.md @@ -1,3 +1,4 @@ -# Fuchsia architecture + +# Fuchsia 架构 <<../../_common/intro/_architecture.md>> diff --git a/get-started/learn/intro/sandboxing.md b/get-started/learn/intro/sandboxing.md index 426101cf..68191dac 100644 --- a/get-started/learn/intro/sandboxing.md +++ b/get-started/learn/intro/sandboxing.md @@ -1,5 +1,6 @@ {% import 'docs/_common/_doc_widgets.md' as widgets %} -# Software isolation model + +# 软件隔离模型 <<../../_common/intro/_sandboxing_intro.md>> @@ -7,30 +8,48 @@ <<../../_common/intro/_sandboxing_namespaces.md>> -## Exercise: Namespaces + +## 练习:命名空间 + +在本练习中,您将使用命令行来更详细地探索组件的命名空间(namespace)的内容。 <<../_common/_start_femu.md>> -### Find a component in the hub + +### 在 hub 中找到一个组件 + +Fuchsia 提供了 [Hub](/concepts/components/v2/hub.md) 作为诊断接口, +用于获取系统中运行的组件实例的信息。 +您可以使用 hub 的目录结构来探索组件及其命名空间。 + +连接到设备命令行并输入以下 `ls` 命令 +来列出 `/hub-v2/children/core/children` 下的 `core` 领域(realm)的组件: ```posix-terminal fx shell ls /hub-v2/children/core/children @@ -45,10 +64,16 @@ build-info ... ``` + +这是许多核心 Fuchsia 系统组件的一个列表。要查看更多关于特定组件的详细信息,可以列出它的目录内容。 + +对 `http-client` 组件试试这个: ```posix-terminal fx shell ls /hub-v2/children/core/children/network/children/http-client @@ -65,10 +90,14 @@ resolved url ``` -### Explore the namespace and outgoing directory + +### 探索命名空间和出口目录 + +您将在 hub 内部的 `exec/in` 路径下找到运行中组件的**命名空间**。 ```posix-terminal fx shell ls /hub-v2/children/core/children/network/children/http-client/exec/in @@ -80,16 +109,27 @@ pkg svc ``` -Here are some quick highlights of each element: + +对每个元素简单说明如下: + +* `config/`: 组件的配置数据 +* `pkg/`: 组件的包的内容 +* `svc/`: 可供组件使用的系统服务 + +列出 `svc/` 目录的内容。这个目录包含 +[服务节点](https://fuchsia.dev/reference/fidl/fuchsia.io#NodeInfo), +表示提供给这个组件的系统服务。 ```posix-terminal fx shell ls /hub-v2/children/core/children/network/children/http-client/exec/in/svc @@ -101,13 +141,22 @@ fuchsia.net.name.Lookup fuchsia.posix.socket.Provider ``` + +每个服务都通过一个公有协议访问,其由一个 + [Fuchsia 接口定义语言(Fuchsia Interface Definition Language,FIDL)][glossary.FIDL]接口定义。 +组件通过其**出口目录**(outgoing directory)来提供系统服务, +这个目录被映射到 hub 内部的 `exec/out` 路径。 + +列出 `svc/` 出口目录来查看这个组件提供的系统服务。 ```posix-terminal fx shell ls /hub-v2/children/core/children/network/children/http-client/exec/out/svc @@ -117,11 +166,18 @@ fx shell ls /hub-v2/children/core/children/network/children/http-client/exec/out fuchsia.net.http.Loader ``` + +我们将在以后更详细地探索 FIDL 协议及如何访问各种服务。 diff --git a/glossary-translation.md b/glossary-translation.md index 8cf6039a..9394f686 100644 --- a/glossary-translation.md +++ b/glossary-translation.md @@ -12,6 +12,7 @@ | 英文原文 | 中文翻译对应词 | 备注 | | ------------------------------ | ---------------------- | ----------------------------------------------------- | +| accessibility | 无障碍功能 | G | | application | 应用
应用程序 | | | ArchiveAccessor | 档案访问器 | i | | archivist | 归档器 | i | @@ -22,9 +23,14 @@ | automatic retry | 自动重试 | G | | backoff | 退避 | G | | best practice | 最佳做法 | G & i | +| board | 板型 | i | +| build | 构建 | G | +| capability | 能力 | i | | caveats | 注意事项 | G | | cleanup | 清理 | G | -| consume | 使用
消耗 | G
后者在结算系统中使用 | +| compile | 编译 | G | +| consume | 使用
消耗 | G
后者在结算系统中使用 | +| contribute changes | 贡献更改 | i | | control plane | 控制层面
控制平面 | G | | data plane | 数据平面
数据层面 | G | | deprecated | 已弃用(的) | G | @@ -35,7 +41,9 @@ | ergonomics | 工效学 | i & G | | escalate | 上报 | G | | execute-only memory | 只执行内存 | G | +| expose | 公开
显示 | G
具体选择取决于语境,亦有“公开显示”译法 | | fault injection | 故障注入 | G | +| fully qualified URL | 完全限定的网址 | G | | get stared | 使用入门
入门 | G
前者更常用 | | get started with | 开始使用
使用入门 | G
二者均常用 | | guidance | 指导 | | @@ -46,16 +54,27 @@ | in-tree | 树内 | G
此处指源码树 | | infrastructure | 基础架构 | G | | inspect | 审视 | Fuchsia 专有名词
i | +| installer | 安装程序 | G | +| job | 作业 | G | | just-in-time (JIT) compilation | 即时(JIT)编译 | G | +| legacy | 旧版 | G | +| moniker | 代称 | i | | mount | 装载 | G | | namespace | 命名空间 | G | | out-of-tree | 树外 | G
此处指源码树 | +| parse | 解析 | G | +| parser | 解析器 | G | | path | 路径 | G | | pave | 铺设 | i | | policy | 政策 | G | +| prerequisites | 前提条件 | G | +| product | 产品 | i & G | | proxy | 代理 | | +| realm | 领域 | i | | remote | 远程 | | | robust | 可靠的 | G | +| sandbox | 沙盒 | G | +| sandboxing | 沙盒 | G | | sanity check | 健全性检查 | G | | service | 服务 | | | service account | 服务帐号 | G | @@ -63,12 +82,15 @@ | set up / setup | 设置 | | | settings | 设置 | | | sidecar | Sidecar | 首字母大写,不译
G | +| source code | 源代码 | G | | span | Span
跨 | 作名词时首字母大写,不译
作动词时译为“跨”
G | | strategy | 策略 | G | | suite | 套件 | G | | traffic | 流量 | G | | unmount | 卸载 | G | +| URL | 网址 | G | | validate | 验证 | G | +| Next steps | 后续步骤 | G | ## 文档中未出现术语的翻译参考表 From e1672f50548e38c6190b06802422209a0b4b1d56 Mon Sep 17 00:00:00 2001 From: y2-Whyto Date: Sat, 20 Aug 2022 16:11:11 +0800 Subject: [PATCH 137/154] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=BF=BB=E8=AF=91?= =?UTF-8?q?=E4=B8=A2=E5=A4=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- get-started/explore_fuchsia.md | 72 ++++++++++++++++++++++------------ 1 file changed, 46 insertions(+), 26 deletions(-) diff --git a/get-started/explore_fuchsia.md b/get-started/explore_fuchsia.md index 7079e48f..8d148400 100644 --- a/get-started/explore_fuchsia.md +++ b/get-started/explore_fuchsia.md @@ -1,9 +1,11 @@ -# Explore Fuchsia {#explore-fuchsia} + +# 探索 Fuchsia {#explore-fuchsia} -Once you have Fuchsia up and running on a device or emulator, -check out the following resources: + +在设备或模拟器上启动并运行 Fuchsia 后,请参阅以下资源: -* [Run ffx commands](#run-ffx-commands). + @@ -12,51 +14,62 @@ check out the following resources: * [创建 Fuchsia 组件](#create-fuchsia-components)。 * [贡献更改](#contribute-changes)。 -## Run ffx commands {#run-ffx-commands} + +## 运行 ffx 命令 {#run-ffx-commands} -[`ffx`][ffx-overview] is a host tool for Fuchsia target workflows that + +[`ffx`][ffx-overview] 是 Fuchsia 目标工作流的主机工具,为所有 Fuchsia 环境和主机平台上提供一致的开发体验。 -The following are some of `ffx` command examples: + +以下是一些 `ffx` 命令示例: -* Display the list of devices: + +* 显示设备列表: ```posix-terminal ffx target list ``` -* Display the device information: + +* 显示设备信息: ```posix-terminal ffx target show ``` -* Print the device logs: + +* 输出设备日志: ```posix-terminal ffx log ``` -* Reboot the device: + +* 重启设备: ```posix-terminal ffx target reboot ``` -## Run examples {#run-examples} + +## 运行示例 -To try out Fuchsia's sample software, check out the guides below: + +要试用 Fuchsia 的样例程序,请参阅如下指南: -* [Run an example component](/development/run/run-examples.md) + * [运行示例组件](/development/run/run-examples.md) * [运行测试组件](/development/run/run-test-component.md) * [运行端到端测试](/development/testing/run_an_end_to_end_test.md) -## Create Fuchsia components {#create-fuchsia-components} + +## 创建 Fuchsia 组件 {#create-fuchsia-components} + -要想了解更多有关 Fuchsia 组件和 FIDL 的信息,请参考如下指南: +要想了解更多有关 Fuchsia 组件和 FIDL 的信息,请参阅如下指南: -* [Build components](/development/components/build.md) + +* [构建组件](/development/components/build.md) +* [FIDL 概览](/development/languages/fidl/README.md) +* [FIDL 教程](/development/languages/fidl/tutorials/overview.md) -## Contribute changes {#contribute-changes} + +## 贡献更改 {#contribute-changes} -When you're ready to contribute to the Fuchsia project, -see [Contribute changes][contribute-changes]. + +当您准备好为 Fuchsia 项目做出贡献时,请参阅[贡献更改][contribute-changes]。 -## See also + +## 参阅 -For more information on Fuchsia's development workflows, -check out the following resources: + +要获取关于 Fuchsia 开发流程的更多信息,请参阅下列资源: -* [fx workflows](/development/build/fx.md) + +# 宏碁 Switch Alpha 12 + +警告:这些说明是用于配置本机器并在其上启动一个实验性、开发中的操作系统。 + +## 打开机器电源 + +开机方法:您必须按住电源按钮(左侧,音量摇杆上方)几秒钟,然后松开。电源按钮本身上的微小蓝光亮起时(是的,当您按住电源按钮时很难看到这一点),或者当显示屏背光打开时,您可以放心地松开。如果您保持太久,它可能会再次关闭电源。 + +## 关闭机器电源 + +如果您启动到了 Windows 10,或者某些东西挂起或崩溃了并且您需要关闭电源,请按住电源按钮直到显示屏关闭。请确定,总共保持大约 10 秒钟。 + +## 进入 BIOS + +在机器关闭的情况下,按住音量上键并保持住,同时按住电源按钮并保持住。当显示屏背光打开时松开电源按钮。还有一种方法是,在打开机器电源时按住连接的键盘上的 F2 键。 + +## 启用 Zircon 引导 + +1. 启动机器并进入 BIOS(基本输入输出系统) + +2. 从左侧的选项卡中选择“Security(安全)” + +3. 点击“Supervisor Password Is(超级用户密码是)”下的“[clean]”灰色条 + +4. 输入超级用户密码,并再次输入,然后按OK + +5. 从左侧的选项卡中选择“Boot(启动)” + +6. 点击“Secure Boot(安全启动)”下的“[Enabled]”灰色栏(如果没有灰色栏,则您尚未设置超级用户密码,请返回并立即执行设置) + +7. 从菜单中选择“Disabled(已禁用)” + +8. 可以在每项右侧使用向上/向下箭头调整“Boot priority order(启动优先级顺序)”列表 + +9. 按如下形式调整列表顺序: - USB HDD - USB FDD - USB CDROM @@ -29,36 +83,108 @@ With the machine off, Press and hold Volume Up, then continue to hold while pres - Network Boot-IPV4 - Network Boot-IPV6 - Windows Boot Manager + +10. 选择左侧的“Main(主菜单)”选项卡,分别按“[SetTime]”和“[SetDate]”按钮设置时间​​和日期。这是想要正常使用网络所必需的操作。 + +11. (可选)返回“Security(安全)”选项卡并将超级用户密码设置为空。否则每次使用 BIOS 时都需要输入密码。修改安全启动设置时需要密码,在没有密码时会持续显示“disabled(已禁用)”。 + +12. 从左侧的选项卡中选择“Exit(退出)” + +13. 选择“Exit Saving Changes(退出保存更改)” + +14. 继续[使用 USB 闪存驱动器进行设置](usb_setup.md) + +## 如果您最终进入 Windows 10 设置怎么办? + +如果您没有进入 BIOS 并且没有安装其他操作系统,您最终会出现蓝色背景的“Hi there”屏幕,要求您选择国家、语言等。 + +1. 请按住电源约 10 秒(屏幕将在 2-3 秒后关闭)。 + +2. 然后按上所述引导进入 BIOS。 + +## 如果您卡在 Windows 10 恢复中怎么办? + +有可能最终出现这样的情况:机器真的想帮助您恢复失败的启动进入到Windows 10,并将您跳入一个恢复屏幕--蓝色背景,"Recovery"显示在屏幕左上方,还有一些文字说 "It looks like Windows didn’t load correctly"。 + +1. 选择“See advanced repair options(查看高级修复选项)” + +2. 选择“Troubleshoot(疑难解答)”(螺丝刀和扳手图标) + +3. 选择“Advanced options(高级选项)”(复选标记和线条图标) + +4. 选择“UEFI Firmware Settings(UEFI固件设置)”(集成电路和齿轮图标) + +5. 当提示“Restart to change UEFI firmware settings(重新启动以更改 UEFI 固件设置)”时,选择“Restart(重新启动)” + +6. 机器现在应该重新启动进入 BIOS + +7. 检查“Windows Boot Manager(Windows 启动管理器)”不要移到启动顺序的顶部,如果在顶部,请修改掉 + +## 奇怪之处 + +据观察,USB 初始化在冷启动时很活跃。因此,如果您从冷启动开始并尝试启动到 USB,您可能会发现您启动的是磁盘。 + +缓解措施: + +- 这是一个很有用的技巧,使用 `cmdline` 文件设置 `zircon.nodename=foo` 以在启动屏幕期间了解您是从 USB 启动还是从磁盘启动。 + +- 如果宏碁从磁盘启动但您想从 USB 启动,请移除并重新插入 USB 驱动器,然后使用 `ctrl-alt-del`(不是电源按钮)重新启动。 + +- 您可以从 bios 中判断 USB 是否已初始化,因为它会命名 USB 设备。 From d949a6e6b87577f5f0f6c3133a1f1958dc012686 Mon Sep 17 00:00:00 2001 From: tabidachinokaze Date: Sun, 21 Aug 2022 19:02:13 +0800 Subject: [PATCH 140/154] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E5=BB=BA=E8=AE=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- get-started/set_up_femu.md | 65 +++++++++++++++++++------------------- 1 file changed, 32 insertions(+), 33 deletions(-) diff --git a/get-started/set_up_femu.md b/get-started/set_up_femu.md index c0971ec1..81b7fc42 100644 --- a/get-started/set_up_femu.md +++ b/get-started/set_up_femu.md @@ -7,7 +7,7 @@ This guide provides instructions on how to set up and launch the Fuchsia emulator (FEMU) on your machine. --> -本指南提供关于如何安装和启动 Fuchsia 模拟器(FEMU)在您的设备上的说明。 +本指南提供关于在您的设备上安装和启动 Fuchsia 模拟器(FEMU)的方法说明。 -运行 FEMU 需要您完成以下向导: +运行 FEMU 需要您完成以下指南: -要运行 FEMU,您首先要构建一个支持模拟器环境的 Fuchsia 系统镜像。本指南使用 `qemu-x64` -板型和 `workstation_eng` 产品作为一个例子。 +要运行 FEMU,您首先要构建一个支持模拟器环境的 Fuchsia 系统镜像。本指南使用 `qemu-x64` 板型和 `workstation_eng` 产品作为示例。 -要构建一个 FEMU 的 Fuchsia 镜像,请执行以下操作: +要构建 FEMU 的 Fuchsia 镜像,请执行以下操作: -要获取关于支持的板型和产品的更多信息,请参阅 [Fuchsia 模拟器(FEMU)][femu-overview] 概述页面。 +要获取关于支持的板型和产品的更多信息,请参阅 [Fuchsia 模拟器(FEMU)][femu-overview]概述页面。 -(**仅限Linux**)大部分 Linux 设备支持通过 KVM 进行 VM 加速,大大提高了模拟器的性能和可用性。 +(**仅限Linux**)大部分 Linux 设备支持通过 KVM 进行 VM 加速,这大大提高了模拟器的性能和可用性。 - 1. 要验证 KVM 是否配置正确,请运行以下命令: + 1. 要验证 KVM 配置正确,请运行以下命令: ```posix-terminal if [[ -r /dev/kvm ]] && grep '^flags' /proc/cpuinfo | grep -qE 'vmx|svm'; then echo 'KVM is working'; else echo 'KVM not working'; fi @@ -141,7 +140,7 @@ enable KVM. - 验证此命令是否打印以下行: + 验证此命令输出以下行: ```none {:.devsite-disable-click-to-copy} KVM is working @@ -151,7 +150,7 @@ enable KVM. If you see `KVM not working`, you may need to reboot your machine for the permission change to take effect. --> - 如果您看到 `KVM not working`,您可能要重启您的设备使权限修改生效。 + 如果您看到 `KVM not working`,那么您可能需要重启您的设备,以使权限修改生效。 * {macOS} @@ -175,17 +174,17 @@ enable KVM. -### 启动包服务 +### 启动包服务器 -在启动模拟器之前,启动包服务。 +在启动模拟器之前,请启动包服务器。 -要启动包服务,请运行以下命令: +要启动包服务器,请运行以下命令: ```posix-terminal fx serve @@ -193,7 +192,7 @@ To start the the package server, run the following command: -注意:或者,您可以将 `fx serve` 进程置为后台。 +注意:或者,您可以将 `fx serve` 进程置于后台。 - 如果您没有使用防火墙,仍然需要一些配置来启用 tun/tap 网络。upscript 示例 {{ '' }}FUCHSIA_ROOT{{ '' }}/scripts/start-unsecure-internet.sh 应该适用于大多数非企业网络。 + 如果您没有使用防火墙,那么还需要进行一些配置才能启用 tun/tap 网络。位于 {{ '' }}FUCHSIA_ROOT{{ '' }}/scripts/start-unsecure-internet.sh 的 upscript 示例应该适用于大多数非企业网络。 ```posix-terminal @@ -238,7 +237,7 @@ To start the emulator on your Linux machine, do the following: * `FUCHSIA_ROOT` is the path to your Fuchsia directory. --> * `start-unsecure-internet.sh` 是一个 upscript 示例。 - * `FUCHSIA_ROOT` 是您的 Fuchsia 目录的路径。 + * `FUCHSIA_ROOT` 是您 Fuchsia 目录的路径。 - 1. 要启动不需要访问外部网络的模拟器,请运行以下命令: + 1. 要启动不可访问外部网络的模拟器,请运行以下命令: ```posix-terminal ffx emu start --net none @@ -276,7 +275,7 @@ To start the emulator on your Linux machine, do the following: title **Fuchsia Emulator**. When the emulator is finished booting, you are returned to the command prompt, and the emulator runs in the background. --> - 启动模拟器会打开一个标题为 **Fuchsia Emulator** 的新窗口,当模拟器完成启动后,您会返回到命令提示符,然后模拟器在后台运行。 + 启动模拟器会打开一个标题为 **Fuchsia Emulator** 的新窗口,当模拟器完成启动后,您会返回到命令提示符,模拟器会在后台运行。 * {macOS} @@ -299,20 +298,20 @@ To start the emulator on your Linux machine, do the following: a window pops up asking if you want to allow the process `aemu` to run on your machine. Click **Allow**. --> - 如果在您的 maxOS 上第一次启动 FEMU(包括重启之后),则会弹出一个窗口询问您是否要允许 `aemu` 进程在您的设备上运行。请点击 **Allow**。 + 如果您在 macOS 上第一次(包括在重启后的第一次)启动 FEMU,则会有窗口弹出,询问您是否要允许 `aemu` 进程在您的设备上运行。请点击 **允许**(Allow)。 - 该命令打开一个标题为 **Fuchsia Emulator** 的新窗口。当模拟器启动完成后,您会返回到命令提示符,然后模拟器在后台运行。 + 该命令打开一个标题为 **Fuchsia Emulator** 的新窗口。当模拟器启动完成后,您会返回到命令提示符,模拟器会在后台运行。 - 2. (可选的)如果您需要明确指定已启动的 Fuchsia 模拟器,您可以运行 `fx set-device` 命令在同一终端。 + 2. (可选)如果您需要指定已启动的 Fuchsia 模拟器,您可以在同一终端运行 `fx set-device` 命令。 ```posix-terminal fx set-device {{ '' }}NAME{{ '' }} @@ -321,13 +320,13 @@ To start the emulator on your Linux machine, do the following: - 替换以下内容: + 请替换以下内容: - * `NAME`:使用 `ffx emu list` 或 `ffx target list` 命令输出的期望值。`fuchsia-emulator` 是默认值。 + * `NAME`:请从 `ffx emu list` 或 `ffx target list` 命令的输出中选择希望使用的值。`fuchsia-emulator` 为默认值。 -要发现 Fuchsia 模拟器作为正在运行的 Fuchsia 设备,请运行以下命令: +要将 Fuchsia 模拟器发现为正在运行的 Fuchsia 设备,请运行以下命令: ```posix-terminal ffx target list @@ -348,7 +347,7 @@ ffx target list -该命令的打印输出类似于以下内容: +该命令的输出类似于以下内容: ```none {:.devsite-disable-click-to-copy} $ ffx target list @@ -365,7 +364,7 @@ fuchsia-emulator workstation_eng.qemu-x64 Product [fe80::8 The output of `ffx target list` is influenced by the `--net` option in the following ways: --> -`ffx target list` 的输出受到以下 `--net` 选项的影响: +`ffx target list` 的输出受 `--net` 选项影响,具体如下: -## 下一步 +## 后续步骤 -要学习更多关于 Fuchsia 设备命令和 Fuchsia 工作流,请参阅[探索 Fuchsia][explore-fuchsia]。 +要了解关于 Fuchsia 设备命令和 Fuchsia 工作流的更多内容,请参阅[探索 Fuchsia][explore-fuchsia]。 -要查看模拟器所支持标记的完整列表,请运行以下命令: +要查看模拟器所支持标记的[完整列表][ffx-emu-reference],请运行以下命令: ```posix-terminal ffx emu start --help @@ -418,7 +417,7 @@ ffx emu start --help -### 在没有 GUI 支持下运行 FEMU +### 在没有 GUI 支持的情况下运行 FEMU -默认情况下,FEMU 启动器尝试检测主机是否有可用于图形渲染的 GPU。如果您需要明确设置渲染类型,您可以使用带有以下选项的 `--gpu` 标记: +默认情况下,FEMU 启动器尝试检测主机是否有可用于图形渲染的 GPU。如果需要显式设置渲染类型,那么您可以使用带有以下选项的 `--gpu` 标记: -本节提供有关如何在 Linux 设备上使用 [TUN/TAP][tuntap]{: .external} 给 FEMU 配置 IPv6 网络的说明。 +本节提供关于在 Linux 设备上使用 [TUN/TAP][tuntap]{: .external} 为 FEMU 配置 IPv6 网络的方法说明。 * {Linux} @@ -551,7 +550,7 @@ for FEMU on Linux machine using [TUN/TAP][tuntap]{: .external}. To enable networking in FEMU using [tap networking][tap-networking]{: .external}, do the following: --> - 要在 FEMU 中使用 [网络分流][tap-networking]{: .external} 启用网络,请执行以下操作: + 要使用 [TAP 网络][tap-networking]{: .external} 在 FEMU 中启用网络,请执行以下操作: +# 在 Chromebook 上安装 Fuchsia + + +## 支持的 Chromebook + +这些 Chromebook 开发者经常使用,应当是稳定支持的。 + +* Google Pixelbook Go(_atlas_) + +### 以前支持的 Chromebook + +这些 Chromebook 受到“尽力而为”的支持,并且不会受到定期测试。 + +* Google Pixelbook(_eve_) + +### 其他 ChromeOS 设备 + +其他基于 x86 的 ChromeOS 设备可能工作,也可能不会工作。基于 ARM 的 ChromeOS 设备无法开箱即用。 + +## 前提条件 + + +请确保您为 Fuchsia 进行了 `chromebook-x64` 构建。 + +1. 完成[下载 Fuchsia 源代码][get-fuchsia-source]指南。 +2. 请在[配置和构建 Fuchsia][build-fuchsia]中设置您的构建配置,以使用如下的 Chromebook 产品: ```posix-terminal fx set workstation_eng.chromebook-x64 --release ``` - + +## 更新 ChromeOS + +如果您的 Chromebook 从未启动过,请您最好将其启动,以检查重要的更新,步骤如下: + +1. 正常启动 Chromebook。通常,打开盖子会启动设备。如果没有启动,请使用位于设备左侧、靠近腕托位置的电源按钮。 + +2. 点按“开始使用”(Let's go)按钮。 + +3. 连接到有线或无线网络。 + +4. 接受条款,以进入更新检查步骤。 + +5. 设备应当检查并安装找到的更新。 + + +6. 更新重启之后,点按左下角的“以访客身份浏览”(Browse as Guest)。 + + +7. 通过浏览器用户界面,前往“设置->关于 Chrome OS”(Settings->About Chrome OS)或“帮助->关于 Chrome OS”(Help->About Chrome +OS),确认新安装的版本。 + +## 为您的设备开启开发者模式 + +注意:这将会擦除保存在您 Chromebook 本地的任何状态。 + +1. 关闭 Chromebook 电源。 + +2. 进入恢复模式。同时按住 Esc+Refresh(键盘顶行的第一和第三个按钮)。接着按下电源按钮(设备的左下方)。 + +3. 按下 Ctrl+D,以在禁用 OS 验证的情况下启动。您应当看到“要关闭 OS 验证,请按下 ENTER。”(To turn OS verification OFF, press ENTER) + +4. 当您的设备重启时,您将收到 OS 验证已经关闭的确认信息。再次按下 Ctrl+D 进入开发者模式(Developer Mode)。 + +5. 等待设备自行完成重新配置,可能需要几分钟时间。设备最初可能看起来没有任何反应。请允许设备静置一到两分钟。在此过程的前期,您可能听到两次响亮的“哔”声。该过程在您再次听到两次响亮的“哔”声时完成。 + +6. 当开发者模式转换完成时,设备应当自行重启。现在您可以跳至“从 USB 启动”一节的步骤 #2 了。 + +## 从 USB 启动 + +1. 启动至 ChromeOS。 + +2. 您应当看到显示“OS 验证已关闭”(OS verification is OFF)的画面,在大约 30 秒后,启动会继续。请等待欢迎或登录界面加载。请**忽略**任何用于“启用调试功能”(Enable debugging features)的链接。 + +3. 按下 Ctrl+Alt+Refresh/F3 进入命令行界面。如果该组合键无效,请尝试再次重启 Chromebook。 + +4. 进入“chronos”用户,密码留空。 + +5. 运行 `sudo crossystem dev_boot_usb=1`,启用 USB 启动。 + +6. (**可选**)运行 `sudo crossystem dev_default_boot=usb`,将 USB 启动设为默认。 + +7. 将 USB 驱动器插入 Chromebook。 + +8. 键入 `sudo reboot` 进行重启。 + +9. 在“OS 验证已关闭”画面,按下 Ctrl+U 跳过超时等待并立即从 USB 启动。(要获取其他短路选项,请参阅[提示和技巧](#tips-and-tricks)) + +仅当您想要重新铺设(re-pave)或另行从网络启动设备时,才需要 USB 驱动器进行引导。 + +如果您未将 USB 启动设为默认(步骤 #6),那么在开机时,您将需要在灰色的“警告 OS 未验证”(warning OS-not verified)画面按下 Ctrl+U,以从 USB 启动。 + +如果设备试图从 USB 启动(可能是因为您将其设为了默认,或按下了 Ctrl+U)失败,那么您将听到一次相当响亮的“哔”声。 + +注意,已经观察到启动过程中 ChromeOS 引导加载程序 USB 枚举速度很慢。如果您在从 USB 启动时遇到问题,那么在设备通过引导加载程序前,移除其他 USB 设备可能会有所帮助;另外,也请避免使用 USB 集线器。 + +## 提示和技巧 {#tips-and-tricks} + +默认情况下,ChromeOS 引导加载程序的超时等待时间很长,以便您能够按下按键。要跳过此过程,您可以在警告 OS 无法验证的灰色画面中按下 Ctrl+D 或 Ctrl+U。Ctrl+D 将使设备跳过超时等待,并从其默认源启动。Ctrl+U将跳过超时等待,并从 USB 启动设备。 + +### 配置 Fuchsia 引导源 + +Fuchsia 具有称为 `cros_nvtool` 的 `crossystem` 等价物。您可以运行 `cros_nvtool set dev_boot_default ` 将系统的默认引导源分别修改为 USB 或硬盘。 + +### 返回 ChromeOS + +要返回 ChromeOS,您必须修改 Fuchsia 内核分区的优先级低于两个 ChromeOS 内核分区中的至少一个。 + +1. 如果您未处于虚拟控制台中,请按下 Alt+Esc 进入其中 +1. 按下 Alt+Fullscreen 进入 Fuchsia 中的终端模拟器 +1. 使用 `lsblk` 命令查找含有 KERN-A、KERN-B 和 KERN-C 分区的硬盘。下例中为设备 000,请注意,内核分区的设备路径是其设备本身路径的扩展。 $ lsblk ID SIZE TYPE LABEL FLAGS DEVICE @@ -129,7 +286,10 @@ kernel partitions is an extension of that device. 005 4G cros rootfs ROOT-B /dev/sys/platform/pci/00:1e.4/pci-sdhci/sdhci/sdmmc/block/part-004/block 006 64M cros kernel KERN-C /dev/sys/platform/pci/00:1e.4/pci-sdhci/sdhci/sdmmc/block/part-005/block 007 4G cros rootfs ROOT-C /dev/sys/platform/pci/00:1e.4/pci-sdhci/sdhci/sdmmc/block/part-006/block + +4. 使用 `gpt` 命令查看设备(例,000)的分区表。 $ gpt dump /dev/class/block/000 blocksize=0x200 blocks=488554496 @@ -170,25 +330,40 @@ kernel partitions is an extension of that device. id: 769444A7-6E13-D74D-B583-C3A9CF0DE307 type: 3CB8E202-3B7E-47DD-8A3C-7FF2A13CFCEC flags: 0x0000000000000000 + +5. 注意,KERN-A 和 KERN-B 通常具有 ChromeOS 内核。Zircon 内核在上例中显示为 KERN-C,或者在某些设置中为 ZIRCON-A。 + + 要进入 ChromeOS,请通过引用**硬盘**上**分区**的索引,来降低 KERN-C(或 ZIRCON-A)的优先级。例如: $ gpt edit_cros 5 -P 0 /dev/class/block/000 + +6. 重启。 + +7. 当 ChromeOS 引导加载程序出现时,请按下空格键重新启用 OS 验证。您的设备将会重启。这一次,消息会显示“您的系统正在进行自我修复。请稍候。”(Your system is repairing itself. Please wait.)该操作将大约需要 5 分钟,之后 Chromebook 将最后重启一次。设备将重启至初始设置界面。 + +要返回 Fuchsia 内核,请重新铺设设备。 [get-fuchsia-source]: /get-started/get_fuchsia_source.md [build-fuchsia]: /get-started/build_fuchsia.md From 3dc79d82817d92e40f79ae68198cb366e503310e Mon Sep 17 00:00:00 2001 From: y2-Whyto Date: Tue, 23 Aug 2022 19:07:18 +0800 Subject: [PATCH 144/154] Update chromebook.md --- development/hardware/chromebook.md | 1 + 1 file changed, 1 insertion(+) diff --git a/development/hardware/chromebook.md b/development/hardware/chromebook.md index 20b659b9..c77ae54f 100644 --- a/development/hardware/chromebook.md +++ b/development/hardware/chromebook.md @@ -67,6 +67,7 @@ Ensure that you have a `chromebook-x64` build for Fuchsia. fx set workstation_eng.chromebook-x64 --release ``` + From 45911d10baba75e206aa2b131b32f784fadee78c Mon Sep 17 00:00:00 2001 From: wy Date: Thu, 25 Aug 2022 20:29:18 +0800 Subject: [PATCH 145/154] learn-fuchsia.md review --- get-started/learn-fuchsia.md | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/get-started/learn-fuchsia.md b/get-started/learn-fuchsia.md index 7ccd4074..fa5890b7 100644 --- a/get-started/learn-fuchsia.md +++ b/get-started/learn-fuchsia.md @@ -1,7 +1,7 @@ -# 开始步骤 +# 使用入门 -Fuchsia 是一个现代化开源操作系统,它简单、安全、可更新以及运行效率高。同时提供了操作系统的核心功能,比如系统资源管理、驱动框架以及软件抽象。Fuchsia 是一个支持常见设备的操作系统,被设计于助力软硬件多样的生态系统。 +Fuchsia 是一个现代化开源操作系统,它简单、安全、可更新以及运行效率高。同时提供了操作系统的核心功能,比如系统资源管理、驱动框架以及软件抽象。Fuchsia 是一种通用操作系统,旨在助力多样化的硬件和软件生态系统。 -## SDK 还是源代码? +## SDK 还是源代码树? -Fuchsia 是 Google 积极开发的一个开源项目。现在有两种方式来参与 Fuchsia:可以使用 Fuchsia 的 SDK 来为 Fuchsia 开发产品和软件,或者为 Fuchsia 平台的源代码贡献一份力。 +Fuchsia 是 Google 积极开发的一个开源项目。参与 Fuchsia 的方式有两种:您可以使用 Fuchsia 的 SDK 来为 Fuchsia 构建产品和软件,或者向源代码树贡献代码以构建 Fuchsia 平台。 -## SDK - 为 Fuchsia 开发软件 +## SDK——为 Fuchsia 构建软件 -Fuchsia 的 SDK 配套有一些工具可以帮助您为 Fuchsia 开发软件。在您开始开发软件之前,建议您学习一些 Fuchsia SDK 的基本使用方法。 +Fuchsia 的 SDK 配套有一些工具帮助您开始开发运行在 Fuchsia 上的软件。在您开始开发软件之前,建议您了解 Fuchsia SDK 的基础知识。 + SDK 基础 + href="/get-started/sdk/learn">SDK 基础知识 -## 源代码 - 为 Fuchsia 贡献 +## 源代码树——向 Fuchsia 贡献代码 -Fuchsia 作为一个开源项目,您当然可以为它的源代码做贡献。在您开始编写源码之前,建议您学习一些 Fuchsia 的基础以更好的理解它的运行原理。 +由于 Fuchsia 是一个开源项目,因而您可以为 Fuchsia 源代码树贡献代码。在您开始贡献代码之前,建议您了解关于 Fuchsia 平台的基础知识,以便理解 Fuchsia 的工作原理。 + 贡献人员基础知识 + href="/get-started/learn">针对贡献人员的基础知识 From c7a485e07771634b45b04b5bed8984f72e3547c3 Mon Sep 17 00:00:00 2001 From: Xyct <87l46110@gmail.com> Date: Fri, 26 Aug 2022 18:51:56 +0800 Subject: [PATCH 146/154] translate get-started/learn/intro/packages.md --- get-started/learn/intro/packages.md | 85 ++++++++++++++++++++++++++++- 1 file changed, 82 insertions(+), 3 deletions(-) diff --git a/get-started/learn/intro/packages.md b/get-started/learn/intro/packages.md index d675445f..fb39ce46 100644 --- a/get-started/learn/intro/packages.md +++ b/get-started/learn/intro/packages.md @@ -1,4 +1,5 @@ -# Software delivery + +# 软件交付 <<../../_common/intro/_packages_intro.md>> @@ -6,26 +7,40 @@ <<../../_common/intro/_packages_storing.md>> + +## 练习:包 + +在之前的本系列代码练习中,虽然您可能没有意识到,但您已经体验过到设备的软件按需交付。在本练习中,您将进一步揭开它的神秘面纱,了解到包被交付和存储到 Fuchsia 设备中的过程的具体细节。 <<../_common/_restart_femu.md>> + +### 启动本地包服务器 + +运行如下命令,以启动包服务器并允许模拟器加载软件包: ```posix-terminal fx serve-updates ``` - + +该命令打印的输出类似如下所示。它表示服务器正在运行,并已成功将模拟器注册为目标设备: ```none {:.devsite-disable-click-to-copy} [serve-updates] Discovery... @@ -37,22 +52,40 @@ running and has successfully registered the emulator as a target device: [pm auto] client count: 1 ``` + +### 检查包服务器 + +`fx serve-updates` 命令会启动用于将包交付到目标设备的 **本地包服务器**。该服务器默认在 8083 端口上运行。 + +在浏览器中访问 `http://localhost:8083`,会加载出一个当前包仓库中可用的包的列表的网页。列表中的每一项都是可被交付到设备的包。 + +### 监视包加载 + +包由 Fuchsia 设备按需解析并加载。让我们在 `spinning-square` 示例包上进行操作来稍作展示。 + +在设备命令行中,您可以确定某个已知的包目前是否在设备上。 ```posix-terminal fx shell pkgctl pkg-status fuchsia-pkg://fuchsia.com/spinning-square-rs @@ -63,22 +96,34 @@ Package in registered TUF repo: yes (merkle=ef65e2ed...) Package on disk: no ``` + +打开新终端,开始流式传输 `pkg-resolver` 的设备日志。 ```posix-terminal ffx log --filter pkg-resolver ``` + +这里展示了从包服务器加载的包的所有实例。 + +在设备命令行中,尝试解析包: ```posix-terminal fx shell pkgctl resolve fuchsia-pkg://fuchsia.com/spinning-square-rs ``` + +注意 `pkg-resolver` 的输出中增加的新行: ```none {:.devsite-disable-click-to-copy} [pkg-resolver][pkg-resolver][I] Fetching blobs for fuchsia-pkg://devhost/spinning-square-rs: [ @@ -88,7 +133,10 @@ Notice the new lines added to the log output for `pkg-resolver`: [pkg-resolver][pkg-resolver][I] resolved fuchsia-pkg://fuchsia.com/spinning-square-rs as fuchsia-pkg://devhost/spinning-square-rs to 21967ecc643257800b8ca14420c7f023c1ede7a76068da5faedf328f9d9d3649 with TUF ``` + +在设备命令行中,再次在设备上查看包状态: ```posix-terminal fx shell pkgctl pkg-status fuchsia-pkg://fuchsia.com/spinning-square-rs @@ -99,30 +147,48 @@ Package in registered TUF repo: yes (merkle=ef65e2ed...) Package on disk: yes (path=/pkgfs/versions/ef65e2ed...) ``` + +Fuchsia 解析了包并按需从本地 TUF 仓库中将其加载了! + +### 探索包的元数据 + +现在 `spinning-square` 包已经成功解析,接下来可以探索包内容。在解析之后,包就可以在目标设备上用它的内容地址引用。 + +在设备命令行中,可以使用 `pkgctl get-hash` 命令来确认 `spinning-square` 的包摘要。 ```posix-terminal fx shell pkgctl get-hash fuchsia-pkg://fuchsia.com/spinning-square-rs ``` + +该命令会返回如下的唯一包摘要: ```none {:.devsite-disable-click-to-copy} ef65e2ed... ``` + +使用 `pkgctl open` 命令并提供完整的包摘要,来查看包内容。 ```posix-terminal fx shell pkgctl open {{ '' }}ef65e2ed...{{ '' }} @@ -154,17 +220,30 @@ package contents: /data/vulkan/explicit_layer.d/VkLayer_khronos_validation.json ``` + +这个命令列出了包的元数据和包中的每个内容 BLOB(Binary Large OBject,二进制大型对象)。其中的 `bin/` 项目对应可执行文件,`lib/` +项目对应共享库依赖,还有后面的额外元数据和资源。 + +## 接下来是? + +祝贺!您现在对 Fuchsia 的独特性和这样一个新平台的设计目标都有了更好的理解。 + +在下一个模块中,您将了解到有关 Fuchsia 这个开源项目和用于构建与自定义系统的工具的更多知识: Building Fuchsia + href="/get-started/learn/build">构建 Fuchsia From cad860d9208e512a115238941bedf08458cbb744 Mon Sep 17 00:00:00 2001 From: wwvm <51313548+wwvm@users.noreply.github.com> Date: Fri, 26 Aug 2022 19:08:37 +0800 Subject: [PATCH 147/154] =?UTF-8?q?=E9=87=8D=E6=96=B0=E6=8F=90=E4=BA=A4?= =?UTF-8?q?=E7=BF=BB=E8=AF=91=20get-started/=5Fcommon/intro/=5Fcomponents?= =?UTF-8?q?=5Forganization.md=20(#192)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * translate components overview * translate components overview * modify session translate * translate explore fuchsia * first version * first version of components organization * first version of components manager * 组件管理器翻译 * 翻译包简介 * 修改驱动框架翻译,合并原先PR提交中的反馈 * 回退无关文件到原始版本 * 回退无关文件到最新合并版本 * 合并原先PR审核意见 * 分拆翻译文件到单独分支 * 分拆翻译文件到单独分支,合并原PR中的审核信息 * 分拆翻译文件到单独分支,合并原PR中的审核信息 * 分拆翻译文件到单独分支,合并原PR中的审核信息 * 分拆到单独分支 * 分拆到单独分支 * 分拆到单独分支,合并原PR中修改意见 * Update get-started/_common/intro/_components_organization.md Co-authored-by: y2-Whyto * Update get-started/_common/intro/_components_organization.md Co-authored-by: y2-Whyto * Update get-started/_common/intro/_components_organization.md Co-authored-by: y2-Whyto * Update get-started/_common/intro/_components_organization.md Co-authored-by: y2-Whyto * Update get-started/_common/intro/_components_organization.md Co-authored-by: y2-Whyto * Update get-started/_common/intro/_components_organization.md Co-authored-by: y2-Whyto * Update get-started/_common/intro/_components_organization.md Co-authored-by: y2-Whyto * Update get-started/_common/intro/_components_organization.md Co-authored-by: y2-Whyto * Update get-started/_common/intro/_components_organization.md Co-authored-by: y2-Whyto * Update get-started/_common/intro/_components_organization.md Co-authored-by: y2-Whyto Co-authored-by: Eric X Co-authored-by: y2-Whyto --- .../_common/intro/_components_intro.md | 24 ++++------ .../_common/intro/_components_organization.md | 48 ++++++++++++------- 2 files changed, 38 insertions(+), 34 deletions(-) diff --git a/get-started/_common/intro/_components_intro.md b/get-started/_common/intro/_components_intro.md index f4aef32b..fbdc8fe7 100644 --- a/get-started/_common/intro/_components_intro.md +++ b/get-started/_common/intro/_components_intro.md @@ -1,28 +1,20 @@ - -**组件**是 Fuchsia 中运行的软件的基石。每一个组件都是可以组合的沙盒模块,相互之间通过功能交互。这提高了系统安全性并在各个组件之间建立了清晰的接口,使它们更容易更新或替换。 +update or replace. - -Fuchsia 中**一切都是组件**(几乎)。回想一下之前对 Zircon 的讨论,内核有意设计得很小,大多数核心服务都是在用户空间中实现。这意味着在 Fuchsia 上运行的大多数软件都是采用组件框架实现的,包括: +including: - -* 面向用户的应用 -* 设备驱动 -* 文件系统 -* 媒体编解码器 -* 网络栈 +* Network stacks - -内核之外只有少数不使用组件框架的底层例外,如引导程序和 `userboot` 进程。 +Outside the kernel there are only a few low-level exceptions not using the +component framework, such as bootloaders and the `userboot` process. diff --git a/get-started/_common/intro/_components_organization.md b/get-started/_common/intro/_components_organization.md index a088092f..57feaa9a 100644 --- a/get-started/_common/intro/_components_organization.md +++ b/get-started/_common/intro/_components_organization.md @@ -1,28 +1,36 @@ -## Component organization + +## 组件组织 -All components in the system are composed into a single rooted + +系统中所有组件组成一棵单根**组件实例树**。这棵树结构控制着组件行为的几个重要方面。 -![Tree diagram illustrating how component instances are organized. These parent + +![树图展示了组件实例是如何组织的。这种父子关系控制组件行为的几个方面。] (/get-started/images/intro/component-organization.png){: width="712"} -Parent components in the tree are responsible for creating instances of + +树中的父组件负责将其他组件的实例创建为其子组件,并向其提供必要能力。与此同时,子组件向父组件公开能力。子组件可通过如下方式之一创建: -* **Statically**: The parent declares the existence of the child in its own + +* **静态创建**:父组件在自身组件声明中声明子组件的存在。 +* **动态创建**:父组件在运行时通过 `fuchsia.component.Realm` 协议将子组件添加到组件集中。 -Any parent component and all its children form a group within the tree called + +任何一个父组件及其所有子组件在树中形成一个称为**领域**(realm)的组,领域使父组件可以控制哪些能力可以流入和流出组件子树,从而建立一个能力边界。组件使用 `expose` 关键字来决定是否将能力导出到领域外: ```json5 expose: [ @@ -33,8 +41,9 @@ expose: [ ], ``` -Once a capability is exposed to the realm, the parent can share it with other -components within the same realm. This is done using the `offer` keyword: + +一旦将能力公开至领域,父组件就可以将其分享给领域内的其它组件。这可以通过使用 `offer` 关键字达成: ```json5 offer: [ @@ -45,21 +54,24 @@ offer: [ ], ``` -[Component manager][glossary.component-manager] is responsible for resolving + +[组件管理器][glossary.component-manager]负责解析通过提供对应能力(如目录或协议)的组件访问该能力的请求。这就是**能力路由**。组件管理器只能解析在同一领域内**公开**和**提供**的能力。 -![Diagram showing how components share capabilities through + +![组件如何通过“能力路由”共享能力的图示,描述了资源如何在特定领域内变得可用。] (/get-started/images/intro/capability-routing.png){: width="614"} [glossary.component-manager]: /glossary/README.md#component-manager From 20e045f4f6ab46d32466755438017de379747623 Mon Sep 17 00:00:00 2001 From: wwvm <51313548+wwvm@users.noreply.github.com> Date: Fri, 26 Aug 2022 19:20:53 +0800 Subject: [PATCH 148/154] =?UTF-8?q?=E9=87=8D=E6=96=B0=E6=8F=90=E4=BA=A4?= =?UTF-8?q?=E7=BF=BB=E8=AF=91=20get-started/=5Fcommon/intro/=5Fcomponents?= =?UTF-8?q?=5Fmanager.md=20(#191)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * translate components overview * translate components overview * modify session translate * translate explore fuchsia * first version * first version of components organization * first version of components manager * 组件管理器翻译 * 翻译包简介 * 修改驱动框架翻译,合并原先PR提交中的反馈 * 回退无关文件到原始版本 * 回退无关文件到最新合并版本 * 合并原先PR审核意见 * 分拆翻译文件到单独分支 * 分拆翻译文件到单独分支,合并原PR中的审核信息 * 分拆翻译文件到单独分支,合并原PR中的审核信息 * 分拆翻译文件到单独分支,合并原PR中的审核信息 * 分拆到单独分支 * 分拆到单独分支 * Update get-started/_common/intro/_components_manager.md Co-authored-by: y2-Whyto * Update get-started/_common/intro/_components_manager.md Co-authored-by: y2-Whyto * Update get-started/_common/intro/_components_manager.md Co-authored-by: y2-Whyto * Update get-started/_common/intro/_components_manager.md Co-authored-by: y2-Whyto * Update get-started/_common/intro/_components_manager.md Co-authored-by: y2-Whyto * Update get-started/_common/intro/_components_manager.md Co-authored-by: y2-Whyto * Update get-started/_common/intro/_components_manager.md Co-authored-by: y2-Whyto Co-authored-by: Eric X Co-authored-by: y2-Whyto --- .../_common/intro/_components_manager.md | 48 +++++++++++-------- 1 file changed, 29 insertions(+), 19 deletions(-) diff --git a/get-started/_common/intro/_components_manager.md b/get-started/_common/intro/_components_manager.md index 6bc5c22f..142e3f75 100644 --- a/get-started/_common/intro/_components_manager.md +++ b/get-started/_common/intro/_components_manager.md @@ -1,39 +1,47 @@ -## Component manager + +## 组件管理器 -The heart of the component framework is the **component manager**. It is + +组件框架的核心是**组件管理器**。它负责协调所有组件实例的执行,提供相应的功能,连接各个组件。 -Components can be launched explicitly (from a URL, for example) or implicitly + +组件可以显式地启动(例如,通过网址调用)或者隐式地通过响应特定功能的请求而启动。组件管理器采取必要的步骤以决定是启动一个新组件还是将请求路由到现有实例。为实现这种路由功能,每个组件必须先声明它能**提供**给系统和它需要**使用**的功能。 -Component manager parses each component's **declaration** to determine how to + +组件管理器解析每个组件的**声明**以确定如何运行组件并提供必要的能力。组件通常通过组件的包中所包含的**组件清单**文件向系统进行声明。 -Below is a simple example of a component manifest that describes an ELF -executable with some additional command arguments: + +以下是一个组件清单的简单例子,它描述了一个包含一些附加命令参数的 ELF 可执行程序: ```json5 program: { @@ -43,6 +51,8 @@ program: { }, ``` -Notice the runtime declaration telling the component manager that this + +请注意这个运行时声明,它告诉组件管理器这个组件需要[ELF 运行器](/concepts/components/v2/elf_runner.md)。 +**这是一个功能示例!** From 2220eb113cbd1c3de6b2f94f52d1672250f58b78 Mon Sep 17 00:00:00 2001 From: wwvm <51313548+wwvm@users.noreply.github.com> Date: Fri, 26 Aug 2022 19:43:06 +0800 Subject: [PATCH 149/154] =?UTF-8?q?=E9=87=8D=E6=96=B0=E6=8F=90=E4=BA=A4?= =?UTF-8?q?=E7=BF=BB=E8=AF=91=20get-started/=5Fcommon/intro/=5Fcomponents?= =?UTF-8?q?=5Fcapabilities.md=20(#193)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * translate components overview * translate components overview * modify session translate * translate explore fuchsia * first version * first version of components organization * first version of components manager * 组件管理器翻译 * 翻译包简介 * 修改驱动框架翻译,合并原先PR提交中的反馈 * 回退无关文件到原始版本 * 回退无关文件到最新合并版本 * 合并原先PR审核意见 * 分拆翻译文件到单独分支 * 分拆翻译文件到单独分支,合并原PR中的审核信息 * 分拆翻译文件到单独分支,合并原PR中的审核信息 * 分拆翻译文件到单独分支,合并原PR中的审核信息 * 分拆到单独分支 * 分拆到单独分支 * 分拆到单独分支,合并原PR中修改意见 * 分拆到单独分支 * Update get-started/_common/intro/_components_capabilities.md Co-authored-by: y2-Whyto * Update get-started/_common/intro/_components_capabilities.md Co-authored-by: y2-Whyto * Update get-started/_common/intro/_components_capabilities.md Co-authored-by: y2-Whyto * Update get-started/_common/intro/_components_capabilities.md Co-authored-by: y2-Whyto * Update get-started/_common/intro/_components_capabilities.md Co-authored-by: y2-Whyto Co-authored-by: Eric X Co-authored-by: y2-Whyto --- .../_common/intro/_components_capabilities.md | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/get-started/_common/intro/_components_capabilities.md b/get-started/_common/intro/_components_capabilities.md index c917b833..ec55afb2 100644 --- a/get-started/_common/intro/_components_capabilities.md +++ b/get-started/_common/intro/_components_capabilities.md @@ -1,19 +1,23 @@ -## Component capabilities + +## 组件能力 -Components obtain privileges to access various parts of the wider system + +组件通过**能力**(capability)获得访问更广泛系统的各个部分的权限。每个组件都可以声明其提供给系统的新能力,以及其运行所需的由其他组件(或框架)提供的能力。 -As you just saw, `runner` is an example of a capability declaring the runtime + +如您所见,`runner` 是一个声明组件运行时所需能力的例子。其它常见能力类型的例子是访问文件系统资源的 `directory` 和与其它组件通信的 `protocol`。 -Developers declare the capability types required by the component using the + +开发者在组件清单声明组件所需要的能力类型。以下是请求两个能力的组件清单示例:对 `example-data` 目录的读权限和以 FIDL 协议 `fuchsia.example.Foo` 描述的服务。 ```json5 use: [ @@ -28,6 +32,7 @@ use: [ ] ``` -Component manager uses the capability declarations to populate each component's + +组件管理器依据能力声明将必需的目录句柄填入各个组件的命名空间。对于本例而言,组件将在其命名空间中接收到 `/example/data` 和 `/svc/fuchsia.example.Foo`。 From 3cfd407fc94a72eb0e341f8bc8dd5147a5ab6c2f Mon Sep 17 00:00:00 2001 From: Cwolf9 <2717232422@qq.com> Date: Sun, 28 Aug 2022 14:02:18 +0800 Subject: [PATCH 150/154] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=BF=BB=E8=AF=91?= =?UTF-8?q?=E7=BB=86=E8=8A=82=20development/hardware/acer12.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- development/hardware/acer12.md | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/development/hardware/acer12.md b/development/hardware/acer12.md index da4073c1..4005cfb6 100644 --- a/development/hardware/acer12.md +++ b/development/hardware/acer12.md @@ -15,7 +15,7 @@ WARNING: These are directions to configure the machine and boot an experimental -开机方法:您必须按住电源按钮(左侧,音量摇杆上方)几秒钟,然后松开。电源按钮本身上的微小蓝光亮起时(是的,当您按住电源按钮时很难看到这一点),或者当显示屏背光打开时,您可以放心地松开。如果您保持太久,它可能会再次关闭电源。 +您必须按住电源按钮(左侧,音量摇杆上方)几秒钟,然后松开,从而启动。电源按钮本身上的微小蓝灯亮起时(是的,当您按住电源按钮时很难看到这个灯),或者当显示屏背光亮起时,您可以放心地松开。如果您按得太久,它可能会再次关闭电源。 -如果您启动到了 Windows 10,或者某些东西挂起或崩溃了并且您需要关闭电源,请按住电源按钮直到显示屏关闭。请确定,总共保持大约 10 秒钟。 +如果您启动到了 Windows 10,或者某些东西挂起或崩溃了并且您需要关闭电源,请按住电源按钮直到显示屏关闭。请确保总共按住大约 10 秒钟。 -在机器关闭的情况下,按住音量上键并保持住,同时按住电源按钮并保持住。当显示屏背光打开时松开电源按钮。还有一种方法是,在打开机器电源时按住连接的键盘上的 F2 键。 +在机器关闭的情况下,按住音量增加键并保持住,同时按住电源按钮并保持住。当显示屏背光打开时松开电源按钮。另一种方法是,在打开机器电源时按住外接键盘上的 F2 键。 -3. 点击“Supervisor Password Is(超级用户密码是)”下的“[clean]”灰色条 +3. 点击“Supervisor Password Is(管理员密码是)”下的“[clean]”灰色条 -4. 输入超级用户密码,并再次输入,然后按OK +4. 输入管理员密码,并再次输入,然后按OK @@ -63,7 +63,7 @@ With the machine off, Press and hold Volume Up, then continue to hold while pres 6. Tap the “[Enabled]” gray bar under “Secure Boot”    (if there’s no gray bar, you have not set a supervisor password, go back and do that now) --> -6. 点击“Secure Boot(安全启动)”下的“[Enabled]”灰色栏(如果没有灰色栏,则您尚未设置超级用户密码,请返回并立即执行设置) +6. 点击“Secure Boot(安全启动)”下的“[Enabled]”灰色条(如果没有灰色条,则表示您尚未设置管理员密码,请返回并立即设置) @@ -75,7 +75,7 @@ With the machine off, Press and hold Volume Up, then continue to hold while pres -9. 按如下形式调整列表顺序: +9. 排列该列表成如下: - USB HDD - USB FDD - USB CDROM @@ -92,7 +92,7 @@ With the machine off, Press and hold Volume Up, then continue to hold while pres Otherwise you’ll need to enter the password every time you use the BIOS. A password is required to modify the secure boot setting, but “disabled” will persist without one. --> -11. (可选)返回“Security(安全)”选项卡并将超级用户密码设置为空。否则每次使用 BIOS 时都需要输入密码。修改安全启动设置时需要密码,在没有密码时会持续显示“disabled(已禁用)”。 +11. (可选)返回“Security(安全)”选项卡并将管理员密码设置为空。否则每次使用 BIOS 时都需要输入密码。修改安全启动设置时需要密码,在没有密码时会持续显示“disabled(已禁用)”。 @@ -100,7 +100,7 @@ A password is required to modify the secure boot setting, but “disabled” wil -13. 选择“Exit Saving Changes(退出保存更改)” +13. 选择“Exit Saving Changes(退出并保存更改)” @@ -160,16 +160,16 @@ It’s possible to end up in a situation where the machine *really* wants to hel -7. 检查“Windows Boot Manager(Windows 启动管理器)”不要移到启动顺序的顶部,如果在顶部,请修改掉 +7. 检查“Windows Boot Manager(Windows 启动管理器)”没有被移到启动顺序的顶部,如果在顶部,请修改掉 -## 奇怪之处 +## 怪症 -据观察,USB 初始化在冷启动时很活跃。因此,如果您从冷启动开始并尝试启动到 USB,您可能会发现您启动的是磁盘。 +据观察,USB 初始化在冷启动时很竞争。因此,如果您从冷启动开始并尝试启动到 USB,您可能会发现您启动的是磁盘。 -- 这是一个很有用的技巧,使用 `cmdline` 文件设置 `zircon.nodename=foo` 以在启动屏幕期间了解您是从 USB 启动还是从磁盘启动。 +- 一个很有用的技巧,使用 `cmdline` 文件设置 `zircon.nodename=foo` 以在启动屏幕期间了解您是从 USB 启动还是从磁盘启动。 From 9bc3d32cb67e1dcf8d0ab77bb370fa83a48ef8ab Mon Sep 17 00:00:00 2001 From: tabidachinokaze Date: Fri, 2 Sep 2022 20:27:58 +0800 Subject: [PATCH 151/154] Update the VIM3 setup guide --- development/hardware/khadas-vim3.md | 455 +++++++++++++++++++--------- 1 file changed, 309 insertions(+), 146 deletions(-) diff --git a/development/hardware/khadas-vim3.md b/development/hardware/khadas-vim3.md index 758ff5a7..2e4a5219 100644 --- a/development/hardware/khadas-vim3.md +++ b/development/hardware/khadas-vim3.md @@ -1,214 +1,377 @@ # Install Fuchsia on a Khadas VIM3 board -This document describes running Fuchsia on a Khadas VIM3 board. +This guide shows you how to install Fuchsia on a +[Khadas VIM3](https://www.khadas.com/vim3). The installation +process will probably take between 1 to 3 hours. -The Khadas VIM3 board is the successor to the VIM2. For more information, -check out the [Khadas Docs](http://docs.khadas.com/){:.external} site. +Running Fuchsia on VIM3 is useful if you want to explore how Fuchsia works on +relatively low-cost real hardware that supports many kinds of peripheral devices. +See [Appendix: Feature support](#features) for details on which VIM3 features +Fuchsia supports. -## Feature support +If you just want to explore Fuchsia with the lowest friction possible, check out +[Get started with the Fuchsia SDK](/docs/get-started/sdk/index.md) instead. -Fuchsia currently supports these features of the VIM3: +See [Appendix: Support](#support) if you have any trouble completing +this guide. -* UART Serial Debugger -* Paving over ethernet and USB -* Storage (eMMC) -* HDMI Display and Framebuffer -* GPU (Mali) and Vulkan graphics -* Ethernet -* SDIO -* I2C -* GPIO -* Temperature Sensors and DVFS -* RTC -* Clock -* Fan -* NNA -* USB C in peripheral mode +## Audience {#audience} -These features are under development and may not be supported: +If you've never tinkered with electronics you might find this +guide difficult to complete. For example, this guide assumes that you know +how to hook up serial cable wires to GPIOs to read logs and send commands +over a serial communication program like `minicom`. -* Video decoder -* SPI -* Audio +This guide also assumes that you're comfortable +with CLI workflows such as building Fuchsia from source. -The following features are not supported, but might be added by future -contributions: +## Prerequisites {#prerequisites} -* SPI Flash -* USB C in host mode -* USB A -* Power management and PMIC -* Wake on LAN -* UART BT +You'll need all of the following hardware and software to complete this guide: -These features are not supported and are unlikely to be added: +* A [Khadas VIM3](https://www.khadas.com/vim3) single-board computer. -* Video encoding (due to non-public firmware) -* Trusted Execution Environment / secure boot + Caution: It's unknown whether Fuchsia will run on the Basic model VIM3. + This guide was validated with the Pro model VIM3. + +* A desktop or laptop computer that's running Linux and has 2 USB ports + available. + + Key Term: This desktop or laptop is called the **host** + throughout the rest of this guide. + + Caution: A macOS host may work but these instructions have not been validated + with macOS. Building Fuchsia on a remote Linux computer and then attempting to flash + Fuchsia onto the VIM3 with a local macOS host is known to not work. + + + + Note: This guide assumes that your Linux distribution has Debian commands + like `apt`. + +* A power supply of at least 24W to your host. The VIM3 can draw that much power when + [DVFS](https://en.wikipedia.org/wiki/Dynamic_frequency_scaling) is enabled. + +* A working Fuchsia development environment on your host. In other words you + should be able to build Fuchsia from its source code on your host. See + [Build Fuchsia](#build). + +* A [USB to TTL serial cable](https://www.adafruit.com/product/954). + +* A USB-C to USB-\* cable that supports both data and power delivery. + The USB-C side is for the VIM3. The other side can be whatever USB + type your host supports. + +The following is optional: + +* A [heatsink](https://www.khadas.com/product-page/new-vim-heatsink). + This enables running 2 CPU cores on the VIM3 at full speed without + reaching 80°C, the critical temperature beyond which cores are throttled + down. + +See the [VIM3 collection](https://www.khadas.com/shop?Collection=VIM3&sort=price_descending) +in the Khadas shop for examples of compatible accessories. + +Note: All the links in this section are only for your convenience. You +don't need to buy from these exact stores or these exact parts. + +## Build Fuchsia {#build} + +If you don't already have an [in-tree][glossary.in-tree] environment +set up, you should start the process now because it can take a while to +complete: + +1. [Download the Fuchsia source code](/docs/get-started/get_fuchsia_source.md). + +1. [Configure and build Fuchsia](/docs/get-started/build_fuchsia.md). + + * When building Fuchsia, use `fx set core.vim3` instead. + +Note: The rest of this guide assumes that your Fuchsia source code directory +is located at `~/fuchsia`. + +You'll use the Fuchsia development environment to build the Fuchsia image +for VIM3 and run an in-tree CLI tool for flashing the Fuchsia image onto +the VIM3. + +## Set up the hardware {#hardware} + +Set up the VIM3 to communicate with your host: + +1. Connect the VIM3 and your host to each other with the USB-C to USB-\* cable. + The white LED on the VIM3 should turn on. + + Caution: Don't put a [USB hub](https://en.wikipedia.org/wiki/USB_hub) + between the VIM3 and your host. The hub may make it harder for your + VIM3 and host to detect and communicate with each other. + + This connection is used to power and flash the VIM3 with + [`fastboot`](https://en.wikipedia.org/wiki/Fastboot). + +1. Connect the serial cable wires to the VIM3's GPIOs: -When setting up your board, make sure you have at least a 24W power supply, as the VIM3 -can draw that much power when DVFS is enabled. + * GND to pin 17. -## Board orientation + * RX (in to VIM3) to pin 18. -When describing the location of buttons, pins and other items on the board, -we will refer to the side with the USB, ethernet and HDMI connectors as the **front** of the board -and the opposite side the **back** of the board, as illustrated by this photo. + * TX (out from VIM3) to pin 19. -![VIM3 board photo](images/VIM3-photo.jpg "A photo of a VIM3 board demonstrating the front and back orientation.") + * Don't connect the power wire of your serial cable to any VIM3 GPIO. + The VIM3 is getting power through the USB cable. -## Heat Sink + Tip: Pins 1, 20, 21, and 40 are labeled on the circuit board. -A heat sink is strongly recommended. A passive chip heat sink will allow you -to run 2 cores out of 8 at full speed before reaching 80C, the critical -temperature at which cores have to be throttled down. + Caution: In general the colors for TX and RX wires are not standardized. + For example your RX wire may be blue or green. -## Setup + See [Serial Debugging Tool](https://docs.khadas.com/linux/vim3/SetupSerialTool.html) + for an example image of how your serial wires should be connected to the VIM3. -- USB C port: Connect to host. Provides power and `fastboot`. -- Ethernet: Connect cable directly to board (do not use a USB ethernet adapter). -- HDMI: Optional. Connects to display. -- Serial Console: Required for flashing the device. See next section. +### Verify the serial connection {#serial} -## Serial Console +Make sure that you can view the logs being sent over the serial cable: -The debug UART for the serial console is exposed on the 40 pin header at the back of the board. -You may use a 3.3v USB to serial cable to access the serial console. Depending on your cable, -the colors will vary, so be sure you have a reference for which color maps to which pin. +1. Open a terminal in your host and run `ls /dev/ttyUSB*` before connecting the + serial cable to a USB port on your host. -The relevant pins on the front row of the header are: +1. Connect the serial cable to your host and run `ls /dev/ttyUSB*` again. + There should be 1 more result than the first time you ran the command, + such as `/dev/ttyUSB0`. That is the USB connection between your VIM3 + and your host. You'll provide this result for the `Serial Device` + value in the next step. -- 2nd from left, pin 19: TX out from VIM3 -- 3rd from left, pin 18: RX in to VIM3 -- 4th from left, pin 17: Ground + If you see no difference when running `ls /dev/ttyUSB*` before and after + connecting the serial cable, try `ls /dev/tty*` or `ls /dev/*` instead. -Connect the TX out from your cable to the RX in on the VIM3, and the RX in on your cable -to the TX out from the VIM3. If your cable has a VCC pin, you do not need to connect it, -but you do need the ground connection. +1. Install, set up, and launch `minicom` on your host as explained in [Set Up Serial Communication + Program](https://docs.khadas.com/linux/vim3/SetupSerialTool.html#Setup-Serial-Communication-Program). -You can see these pins on the "GPIO Pinout" tab of [this page](https://docs.khadas.com/linux/vim3/Hardware.html#VIM3-Hardware-Info). + Key Term: In the rest of this guide the terminal window running `minicom` is called + the **serial console**. -When connecting to the serial port, use (115200,8,N,1) as the settings. + Note: This guide assumes that you're using `minicom` for your serial communication + program but you can use whatever program you prefer. -## Buttons +1. Press the reset button on the VIM3. The reset button is the one with the **R** + printed next to it on the circuit board. + See [VIM3/3L Hardware](https://docs.khadas.com/linux/vim3/Hardware.html) for + a diagram. In your serial console you should see human-readable logs. -When viewed from the front, the VIM3 has 3 buttons on the left side of the board. On the board schematic, SW1 (switch closest to the USB plug) is the reset switch. SW3 (farthest away from the USB plug on the schematic) can be used for entering flashing mode. If SW3 is held down while the board is reset or power cycled , the bootloader will enter flashing mode instead of booting the kernel normally. +## Erase the eMMC {#emmc} -## VIM3 Bootloader +In later sections of this guide you'll update the bootloader and +OS on the VIM3. These updates don't work unless you +completely erase the eMMC first: -Booting Fuchsia on the VIM3 requires a custom bootloader found at -`//prebuilt/third_party/firmware/vim3`. It can also be built from source at -https://third-party-mirror.googlesource.com/u-boot/, in the `vim3` branch. +1. Press the reset button on your VIM3. -To find out what version of the bootloader you have, grep for "zircon-bootloader" -in the kernel boot log. You should see something like: "cmdline: zircon-bootloader=0.12" +1. Right after you press the reset button, start repeatedly pressing the + Space key as your VIM3 boots up. Make sure that your cursor + is focused on your serial console. The bootloader process should pause + and your serial console should show a `kvim3#` prompt. Your serial + console is now providing you access to the **U-Boot shell**. -## First time steps +1. Run the following command in the U-Boot shell: -The first time flashing the device, you will need to unlock the flashing capability. Boot the device by pressing the reset switch and you'll see logs in the serial console and hold. Repeatedly press the space bar to get to the U-boot console prompt. -If you are already in Fuchsia, you can enter the u-boot console by repeatedly pressing "f". + ```posix-terminal + store init 3 + ``` -Once you see the U-boot prompt (`kvim#`), type `fastboot` to launch fastboot. You should then see: + Your serial console logs should verify that the eMMC was correctly erased. -``` -USB RESET -SPEED ENUM +See [Erase eMMC](https://docs.khadas.com/linux/vim3/EraseEmmc.html) +for more details. -USB RESET -SPEED ENUM -``` +## Update the Android image on the VIM3 {#android} -This indicates that fastboot is running. + -To unlock flashing, type the following fastboot commands on the host: +The Android image that ships by default on the VIM3 does +not support Fuchsia installation. If you just received your VIM3 +from Khadas you must update your Android image: -``` -fastboot flashing unlock -fastboot flashing unlock_critical -``` +1. Click the following URL to download the updated Android image: + -Now you can flash the Fuchsia bootloader. Assuming you named the bootloader -file `u-boot.bin.unsigned`, type the following commands: +1. Extract the compressed archive file (`VIM3_Pie_V210527.7z`). + After the extraction you should have a `VIM3_Pie_V210527` directory + with an `update.img` file in it. -``` -fastboot flash bootloader u-boot.bin.unsigned -fastboot reboot -``` +1. Follow the instructions in [Install OS into + eMMC](https://docs.khadas.com/linux/vim3/InstallOsIntoEmmc.html). + When running `aml-burn-tool` the value for the `-i` flag should be the + path to your `update.img` file. Your command should look similar to this: -Now your board will reboot and use the new version of U-boot you just flashed. You only need to do this step once. + ```posix-terminal + aml-burn-tool -b VIM3 -i ~/Downloads/VIM3_Pie_V210527/update.img + ``` -## Building Fuchsia + Caution: Make sure that you're following the instructions for Ubuntu + and VIM3 by clicking the **Install on Ubuntu** and **VIM3/VIM3L** tabs. + These instructions are not shown by default. -Set your build configuration to the core vim3 product and build it: + Tip: The `TST Mode` workflow is probably the easiest and fastest way to get + your VIM3 into Upgrade Mode. -``` -fx set core.vim3 -fx build -``` +1. If the white and red LEDs on your VIM3 are off and the blue LED is on, + it means that your VIM3 is in sleep mode. Try putting your VIM3 + back into [Upgrade Mode](https://docs.khadas.com/linux/vim3/BootIntoUpgradeMode.html) + and then pressing the reset button again. -When the build is complete, you can flash the device (below). +At this point the white LED on your VIM3 should be on and you should see +logs in your serial console after you press the reset button on your VIM3. -## Flashing & Paving Fuchsia +## Update the bootloader {#bootloader} -First enter fastboot mode by holding down SW3 (leftmost button), pressing SW1 (rightmost button) quickly and keeping pressing SW3 for a few seconds. When the following shows up, the device is in fastboot mode: +Flash Fuchsia's custom bootloader onto the VIM3: -``` -USB RESET -SPEED ENUM +1. Install the [Android SDK Platform + Tools](https://developer.android.com/studio/releases/platform-tools). -USB RESET -SPEED ENUM -``` + Installing these tools gives you access to `adb`. -Now you can flash & pave: +1. Verify that you can now run `adb`: -``` -fx flash --pave -``` + ```posix-terminal + adb --version + ``` -This flashes all of the zircon, zedboot, vbmeta and fvm images to your vim3 and provisions ssh key files on the device. -It is now ready to use and does not need to go through zedboot or paving. (If you don't know what those are, don't worry!) +1. Access the U-Boot shell again by pressing the reset button and + then repeatedly pressing the Space key in your serial + console. When your serial console shows the `kvim3#` prompt, you're + in the U-Boot shell. -If `fx flash` asks for serial, you can find it with `fastboot devices`. +1. In your U-Boot shell run the following command: -In order to get into zedboot you can reboot into the recovery: + ```posix-terminal + fastboot + ``` -``` -dm reboot-recovery -``` + You should see the following logs in your serial console: -### Paving + ``` + g_dnl_register: g_dnl_driver.name = usb_dnl_fastboot -Paving is available from the "core" product and above. Run the following under the fuchsia directory: + USB RESET + SPEED ENUM -``` -fx set core.vim3 && fx build && fx pave -1 -``` + USB RESET + SPEED ENUM + ``` -### Fuchsia logo + If you see the first line (`g_dnl_register: g_dnl_driver.name = usb_dnl_fastboot`) + but not the lines after that, try using a different USB-C to USB-\* cable and make + sure that it supports both data and power delivery. -To update the boot splash screen to be the Fuchsia logo, do this in fastboot mode: +1. Open a new terminal window in your host and run the following commands: -``` -fastboot flash logo zircon/kernel/target/arm64/board/vim3/firmware/logo.img -``` + ```posix-terminal + cd ~/fuchsia/prebuilt/third_party/fastboot -## Troubleshooting + ./fastboot flashing unlock -**Bootserver can't seem to talk to my zedboot instance on the Vim3.** + ./fastboot flashing unlock_critical + + ./fastboot flash bootloader ~/fuchsia/prebuilt/third_party/firmware/vim3/u-boot.bin.unsigned + + ./fastboot reboot + ``` + + Caution: Installing the Android SDK Platform Tools probably installed another + instance of `fastboot` on your host. When working with Fuchsia, remember to use + the [in-tree][glossary.in-tree] version of `fastboot` at + `~/fuchsia/prebuild/third_party/fastboot/fastboot`. The `fastboot` protocol allows arbitrary + vendor protocol extensions and Fuchsia may rely on this functionality in the future. + +Note: You can also build the custom bootloader (`u-boot.bin.unsigned`) from source: + + +## Flash Fuchsia into the eMMC {#fuchsia} + +Install Fuchsia onto your VIM3: + +1. Put your VIM3 into `fastboot` mode by pressing the reset button + and then immediately pressing the F key. + +1. From a separate terminal on your host run the following command: + + ```posix-terminal + cd ~/fuchsia + + fx flash --pave + ``` + +Your VIM3 is now running Fuchsia! + +Repeat the steps in this section whenever you want to flash a new Fuchsia +image onto your VIM3. + +## Appendix: Fix a bricked VIM3 {#bricks} + +Do these steps if you've [bricked](https://en.wikipedia.org/wiki/Brick_(electronics)) +your VIM3 and need to "factory reset" it: + +1. [Erase the eMMC](#emmc). +1. [Update the Android image](#android). +1. [Update the bootloader](#bootloader). +1. [Flash Fuchsia into the eMMC](#fuchsia). + +## Appendix: Support {#support} + +* For issues that seem related to VIM3 hardware or firmware, try the + [VIM3 official docs](https://docs.khadas.com/linux/vim3/index.html) and + [Khadas VIM3 official forum](https://forum.khadas.com/c/khadas-vim3/30). +* For issues that seem related to Fuchsia, try the + [Fuchsia mailing lists and chat rooms](/docs/contribute/community/mailing-lists.md). + +## Appendix: Feature support {#features} + +Fuchsia currently supports these features of the VIM3: + +* UART Serial Debugger +* Paving over ethernet and USB +* Storage (eMMC) +* HDMI Display and Framebuffer +* GPU (Mali) and Vulkan graphics +* Ethernet +* SDIO +* I2C +* GPIO +* Temperature Sensors and DVFS +* RTC +* Clock +* Fan +* NNA +* USB-C in peripheral mode +* USB-A + +These features are under development and may not be supported: + +* Video decoder +* SPI +* Audio + +The following features are not supported, but might be added by future +contributions: + +* SPI Flash +* USB-C in host mode +* Power management and PMIC +* Wake on LAN +* UART BT + +These features are not supported and are unlikely to be added: + +* Video encoding (due to non-public firmware) +* Trusted Execution Environment / secure boot -If you are using ethernet, make sure you have a DHCP server running on the other end. -If you are using USB CDC, comment out this line in the -[kernel command line build file](https://cs.opensource.google/fuchsia/fuchsia/+/main:boards/kernel_cmdline/BUILD.gn): +## Appendix: Update the boot splash screen {#splash} -``` -kernel_cmdline("vim3") { - deps = [ ":pmm-checker-from-board" ] - args = [ - # Prefer using the built-in NIC to the CDC-ether interface. - {{''}}"netsvc.interface=/dev/dwmac/dwmac/Designware-MAC/ethernet",{{''}} - ] -} -``` +To update the boot splash screen to be the Fuchsia logo, run the following command +from a host terminal while the VIM3 is in `fastboot` mode: -The `"netsvc.interface=/dev/dwmac/dwmac/Designware-MAC/ethernet"` command line argument causes the board to prefer using the built-in NIC, which is the default configuration for devices running in Fuchsia's build infrastructure. +```posix-terminal +fastboot flash logo ~/fuchsia/zircon/kernel/target/arm64/board/vim3/firmware/logo.img +``` \ No newline at end of file From 994d0e33761d1d6a1ca21dc33328127c6ccdc203 Mon Sep 17 00:00:00 2001 From: tabidachinokaze Date: Sat, 3 Sep 2022 15:52:59 +0800 Subject: [PATCH 152/154] =?UTF-8?q?=E7=BF=BB=E8=AF=91=20development/hardwa?= =?UTF-8?q?re/khadas-vim3.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- development/hardware/khadas-vim3.md | 337 +++++++++++++++++++++++++++- 1 file changed, 336 insertions(+), 1 deletion(-) diff --git a/development/hardware/khadas-vim3.md b/development/hardware/khadas-vim3.md index 2e4a5219..ffd0015c 100644 --- a/development/hardware/khadas-vim3.md +++ b/development/hardware/khadas-vim3.md @@ -1,255 +1,486 @@ + +# 在 Khadas VIM3 板型上安装 Fuchsia + +本指南向您展示如何在 [Khadas VIM3](https://www.khadas.com/vim3) 上安装 Fuchsia。安装过程可能需要 1 到 3 个小时。 + +如果您想了解 Fuchsia 如何在相对低成本、支持多种外围设备的实际硬件上工作,那么在 VIM3 上运行 Fuchsia 非常有用。有关 Fuchsia 支持的 VIM3 功能的详细信息,请参阅[附录:支持的功能](#features)。 + +如果您只想以尽可能低的分歧探索 Fuchsia,请查看[开始使用 Fuchsia SDK](/docs/get-started/sdk/index.md)。 + +如果您在完成本指南时遇到任何问题,请参阅[附录:支持](#support)。 + +## 受众群体 {#audience} + +如果您从未维修过电子产品,您可能会发现本指南难以完成。例如,本指南假设您知道如何将串行电缆连接到 GPIO 以读取日志并通过像 `minicom` 这样的串口通信程序发送命令。 + +本指南还假设您熟悉 CLI 工作流程,例如从源代码构建 Fuchsia。 + +## 前提条件 {#prerequisites} + +您需要以下所有硬件和软件来完成本指南: + +* 一个 [Khadas VIM3](https://www.khadas.com/vim3) 单板计算机。 + + 注意:Fuchsia 是否能在 Basic 型号 VIM3 上运行尚不清楚。本指南已使用 Pro 型号 VIM3 进行了验证。 + +* 一台运行 Linux 并具有 2 个 USB 端口可用的台式机或笔记本电脑。 + + 关键术语:此台式机或笔记本电脑在本指南的其余部分中称为**主机**。 + + 注意:macOS 主机可能会运行,但这些说明没有在 macOS 上得到验证。在远程 Linux 计算机上构建 Fuchsia,然后尝试使用本地 macOS 主机将 Fuchsia 刷入到 VIM3 上是无法运行的。 + + 注意:本指南假设您的 Linux 发行版具有 Debian 命令,例如 `apt`。 + +* 为您的主机提供至少 24W 的电源。启用 [DVFS](https://en.wikipedia.org/wiki/Dynamic_frequency_scaling) 后,VIM3 可以消耗那么多功率 。 + +* 在您的主机上工作的 Fuchsia 开发环境。换句话说,您应该能够从主机上的源代码构建 Fuchsia。请参阅[构建 Fuchsia](#build)。 + +* 一条 [USB 转 TTL 串行电缆](https://www.adafruit.com/product/954)。 + +* 支持数据和电力传输的 USB-C 到 USB-\* 电缆。USB-C 端用于 VIM3。另一端可以是您的主机支持的任何 USB 类型。 + +以下是可选的: + +* 一个[散热器](https://www.khadas.com/product-page/new-vim-heatsink)。这使得 VIM3 上的 2 个 CPU 内核能够全速运行,而不会达到 80°C,超过该临界温度,内核就会被节流。 + +有关兼容配件的示例,请参阅 Khadas 商店中的 [VIM3 系列](https://www.khadas.com/shop?Collection=VIM3&sort=price_descending)。 + +注意:本节中的所有链接仅是为了您的方便。您不需要从这些确切的商店或这些确切的零件购买。 + +## 构建 Fuchsia {#build} + +如果您还没有设置 [in-tree][glossary.in-tree] 环境,您应该现在就开始这个步骤,因为它可能需要一段时间才能完成: + +1. [下载 Fuchsia 源代码](/docs/get-started/get_fuchsia_source.md)。 + +1. [配置和构建 Fuchsia](/docs/get-started/build_fuchsia.md)。 + + * 构建 Fuchsia 时,请改用 `fx set core.vim3`。 + +注意: 本指南的其余部分假设你的 Fuchsia 源代码目录位于 `~/fuchsia`。 + +您将使用 Fuchsia 开发环境为 VIM3 构建 Fuchsia 镜像,并运行一个树内 CLI 工具来将 Fuchsia 镜像刷入到 VIM3。 + +## 设置硬件 {#hardware} + +设置 VIM3 来与您的主机通信: + +1. 使用 USB-C 到 USB-\* 电缆将 VIM3 和您的主机相互连接。VIM3 上的白色 LED 会亮起。 + + 注意:不要在 VIM3 和主机之间使用 [USB 集线器](https://en.wikipedia.org/wiki/USB_hub)连接。集线器可能会使您的 VIM3 和主机更难检测和相互通信。 + + 这个连接用于供电和用 [`fastboot`](https://en.wikipedia.org/wiki/Fastboot) 刷写 VIM3。 + +1. 将串行电缆连接到 VIM3 的 GPIO: + + * GND 连接到引脚 17。 + + * RX(输入到 VIM3)连接到引脚 18。 + + * TX(从 VIM3 输出)连接到引脚 19。 + + * 不要把您串行电缆的电源线连接到 VIM3 的任何 GPIO 上。VIM3 是通过 USB 线获得电源的。 + + 提示:引脚 1、20、21 和 40 标记在电路板上。 + + 注意:通常 TX 和 RX 线的颜色不是标准化的。例如,您的 RX 线可能是蓝色或绿色。 + + 有关如何将串行线连接到 VIM3 的示例图像,请参阅[串行调试工具](https://docs.khadas.com/linux/vim3/SetupSerialTool.html)。 + +### 验证串行连接 {#serial} + +确保您可以查看通过串行电缆发送的日志: + +1. 在您的主机中打开一个终端,并且在将串行电缆连接到主机的 USB 端口之前,运行 `ls /dev/ttyUSB*`。 + +1. 将串行电缆连接到主机,然后再次运行 `ls /dev/ttyUSB*`。应该比第一次运行命令多出 1 个结果,例如 `/dev/ttyUSB0`。这是 VIM3 和主机之间的 USB 连接。您将在下一步中为 `Serial Device` 值提供这个结果。 + + 如果在连接串行电缆前后运行 `ls /dev/ttyUSB*` 没有区别,可以尝试 `ls /dev/tty*` 或 `ls /dev/*`。 + +1. 如[设置串行通信程序](https://docs.khadas.com/linux/vim3/SetupSerialTool.html#Setup-Serial-Communication-Program)中所述,在您的主机上安装、设置和启动 `minicom`。 + + 关键术语:在本指南的其余部分中,运行的终端窗口 `minicom` 称为**串行控制台**。 + + 注意:本指南假设您使用的串行通信程序是 `minicom`,但您可以使用您喜欢的任何程序。 + +1. 按下 VIM3 上的复位按钮。复位按钮是电路板上旁边印有 **R** 的按钮。请参见 [VIM3/3L 硬件](https://docs.khadas.com/linux/vim3/Hardware.html) 获得图表。在串行控制台中,您应该看到人类可读的日志。 + +## 擦除 eMMC {#emmc} + +在本指南的后面部分,您将更新 VIM3 上的引导加载程序和操作系统。除非您先完全擦除 eMMC,否则这些更新不起作用: + +1. 按下 VIM3 上的重置按钮。 + +1. 在按下复位按钮之后,在 VIM3 启动时开始重复按 Space 键。确保光标聚焦在串行控制台上。引导加载程序过程应该会暂停,并且串行控制台应该显示 `kvim3#` 提示符。您的串行控制台现在提供了访问 **U-Boot shell** 的权限。 + +1. 在 U-Boot shell 中运行以下命令: ```posix-terminal store init 3 ``` + + 您的串行控制台日志应验证 eMMC 被正确地擦除。 + +有关详细信息,请参阅[擦除 eMMC](https://docs.khadas.com/linux/vim3/EraseEmmc.html)。 + +## 更新 VIM3 上的 Android 镜像 {#android} + +VIM3 默认自带的 Android 镜像不支持 Fuchsia 安装。如果您刚从 Khadas 收到您的 VIM3,您必须更新您的 Android 镜像: + +1. 点击以下 URL 下载更新的 Android 镜像: + +1. 提取压缩存档文件(VIM3_Pie_V210527.7z)。提取后您应该有一个 `VIM3_Pie_V210527` 目录,其中包含一个 `update.img` 文件。 + +1. 按照[安装操作系统到 eMMC](https://docs.khadas.com/linux/vim3/InstallOsIntoEmmc.html) 中的说明进行操作。运行 `aml-burn-tool` 时,`-i` 标记的值应该是 `update.img` 文件的路径。您的命令应类似于以下内容: ```posix-terminal aml-burn-tool -b VIM3 -i ~/Downloads/VIM3_Pie_V210527/update.img ``` + + 注意:通过单击**在 Ubuntu 上安装**和 **VIM3/VIM3L** 选项卡,确保您遵循 Ubuntu 和 VIM3 的说明。默认情况下不显示这些说明。 + + 提示:`TST Mode` 工作流可能是使您的 VIM3 进入升级模式的最简单和最快的方法。 + +1. 如果您的 VIM3 上的白色和红色 LED 熄灭,而蓝色 LED 亮起,这意味着您的 VIM3 处于睡眠模式。尝试将您的 VIM3 回到[升级模式](https://docs.khadas.com/linux/vim3/BootIntoUpgradeMode.html),然后再次按下复位按钮。 + +此时,您的 VIM3 上的白色 LED 应该亮起,并且在您按下 VIM3 上的重置按钮后,您应该会在串行控制台中看到一些日志。 + +## 更新引导加载程序 {#bootloader} + +将 Fuchsia 的自定义引导加载程序刷入到 VIM3: + +1. 安装 [Android SDK 平台工具](https://developer.android.com/studio/releases/platform-tools)。 + + 安装这些工具可以让您访问 `adb`。 + +1. 验证您现在是否可以运行 `adb`: ```posix-terminal adb --version ``` + +1. 按重置按钮,然后在串行控制台中反复按 Space 键,将会再次访问 U-Boot shell。当您的串行控制台显示 `kvim3#` 提示符时,您就进入了 U-Boot shell。 + +1. 在您的 U-Boot shell 中运行以下命令: ```posix-terminal fastboot ``` + + 您应该在串行控制台中看到以下日志: ``` g_dnl_register: g_dnl_driver.name = usb_dnl_fastboot @@ -261,11 +492,17 @@ Flash Fuchsia's custom bootloader onto the VIM3: SPEED ENUM ``` + + 如果您看到第一行(`g_dnl_register: g_dnl_driver.name = usb_dnl_fastboot`)但之后没有其他行,请尝试使用不同的 USB-C 到 USB-\* 电缆并确保它同时支持数据和电力传输。 + +1. 在您的主机中打开一个新的终端窗口并运行以下命令: ```posix-terminal cd ~/fuchsia/prebuilt/third_party/fastboot @@ -279,23 +516,41 @@ Flash Fuchsia's custom bootloader onto the VIM3: ./fastboot reboot ``` + + 注意:安装 Android SDK 平台工具可能会在您的主机上安装另一个 `fastboot` 实例。使用 Fuchsia 时,请记住使用在 `~/fuchsia/prebuild/third_party/fastboot/fastboot` 中 `fastboot` 的 [in-tree][glossary.in-tree] 版本。`fastboot` 协议允许任意供应商协议扩展,Fuchsia 将来可能会依赖此功能。 + +注意:您也可以从源代码中构建自定义引导程序(`u-boot.bin.unsigned`): + +## 将 Fuchsia 刷入 eMMC {#fuchsia} + +在你的 VIM3 上安装 Fuchsia: + +1. 按下重置按钮,然后立即按下 F 键,使您的 VIM3 进入 `fastboot` 模式。 + +1. 从您主机上的单独终端运行以下命令: ```posix-terminal cd ~/fuchsia @@ -303,33 +558,65 @@ Install Fuchsia onto your VIM3: fx flash --pave ``` + +你的 VIM3 现在正在运行 Fuchsia! + +每当您想刷入新的 Fuchsia 镜像到 VIM3 时,请重复本节中的步骤。 + +## 附录:修复一个变砖的 VIM3 {#bricks} + +如果您的 VIM3 已[变砖](https://en.wikipedia.org/wiki/Brick_(electronics))并需要“恢复出厂设置”,请执行以下步骤: + +1. [擦除 eMMC](#emmc). +1. [更新安卓镜像](#android). +1. [更新引导加载程序](#bootloader). +1. [将 Fuchsia 刷入 eMMC](#fuchsia). + +## 附录:支持 {#support} + +* 对于似乎与 VIM3 硬件或固件相关的问题,请尝试 [VIM3 官方文档](https://docs.khadas.com/linux/vim3/index.html)和 [Khadas VIM3 官方论坛](https://forum.khadas.com/c/khadas-vim3/30)。 +* 对于似乎与 Fuchsia 相关的问题,请尝试 [Fuchsia 邮件列表和聊天室](/docs/contribute/community/mailing-lists.md)。 + +## 附录:功能支持 {#features} + +Fuchsia 目前支持 VIM3 的这些特性: + +* UART 串​​行调试器 +* 通过以太网和 USB 铺路 +* 存储 (eMMC) +* HDMI 显示和帧缓冲(Framebuffer) +* GPU(Mali)和 Vulkan 图形 +* 以太网 +* 安全数字输入输出(SDIO) +* 集成电路总线(I2C) +* 通用输入输出接口(GPIO) +* 温度传感器和 DVFS +* 实时时钟(RTC) +* 时钟 +* 风扇 +* NNA +* 外围模式下的 USB-C * USB-A + +这些功能正在开发中,可能不受支持: + +* 视频解码器 +* 串行外设接口(SPI) +* 音频 + +不支持以下功能,但未来的贡献可能会添加: + +* SPI 闪光灯 +* 主机模式下的 USB-C +* 电源管理和电源管理 IC(PMIC) +* 局域网唤醒 +* UART 蓝牙 + + +这些功能不受支持且不太可能添加: + +* 视频编码(由于非公开固件) +* 可信执行环境/安全启动 + +## 附录:更新开机启动画面 {#splash} + +要将开机启动屏幕画面更新为 Fuchsia 标识,请在 VIM3 处于 `fastboot` 模式时从主机终端运行以下命令: ```posix-terminal fastboot flash logo ~/fuchsia/zircon/kernel/target/arm64/board/vim3/firmware/logo.img From 2c437a6f71d0575dbcab39eea337375a8c3f810f Mon Sep 17 00:00:00 2001 From: wwvm <51313548+wwvm@users.noreply.github.com> Date: Tue, 6 Sep 2022 15:13:46 +0800 Subject: [PATCH 153/154] =?UTF-8?q?=E7=BF=BB=E8=AF=91get-started/=5Fcommon?= =?UTF-8?q?/intro/=5Fpackages=5Fstoring.md=20(#196)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * translate components overview * translate components overview * modify session translate * translate explore fuchsia * first version * first version of components organization * first version of components manager * 组件管理器翻译 * 翻译包简介 * 修改驱动框架翻译,合并原先PR提交中的反馈 * 回退无关文件到原始版本 * 回退无关文件到最新合并版本 * 合并原先PR审核意见 * 分拆翻译文件到单独分支 * 分拆翻译文件到单独分支,合并原PR中的审核信息 * 分拆翻译文件到单独分支,合并原PR中的审核信息 * 分拆翻译文件到单独分支,合并原PR中的审核信息 * 分拆到单独分支 * 分拆到单独分支 * 分拆到单独分支,合并原PR中修改意见 * 分拆到单独分支 * 分拆到单独分支 * 翻译包解析器 * 翻译包存储 Co-authored-by: Eric X --- .../_common/intro/_packages_storing.md | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/get-started/_common/intro/_packages_storing.md b/get-started/_common/intro/_packages_storing.md index acafa858..21f7c8f0 100644 --- a/get-started/_common/intro/_packages_storing.md +++ b/get-started/_common/intro/_packages_storing.md @@ -1,22 +1,27 @@ -## Storing packages + +## 包存储 -On the device, package BLOBs are stored in a content-addressable filesystem + +在设备上,包 BLOB 存储于内容可寻址的文件系统中,该文件系统针对一次写入,频繁读取的文件进行了优化,称为 `blobfs`。这使得包在所有包范围内被**去重**并采用各自的哈希**加密验证**。Fuchsia 在 `blobfs` 上运行 `pkg-cache` 服务以便进行包管理。 -![Diagram illustrating how the package cache is built on top of "blobfs" — a + +!["blobfs" 中包缓存建立的图示 —— 内容可寻址的文件系统使 BLOB 去重并允许它们在包间共享。] (/get-started/images/intro/blobfs.png){: width="632"} -The `pkg-cache` layer tracks which packages in the system are currently + +`pkg-cache` 层跟踪系统中哪些包当前处于活动状态。**包未在 Fuchsia 中明确安装或删除**。软件按需交付,同样可以通过定期的**垃圾清理**从不再活动的包中回收空间。当 `pkg-cache` 触发垃圾清理已回收空间时,任何未被活动包引用的内容 BLOB 将被删除。 -Note: For more of the technical details on Fuchsia packages and software -delivery, see the [package documentation](/concepts/packages/package.md). + +注:更多有关 Fuchsia 中包和软件交付的技术细节,请参考[包文档](/concepts/packages/package.md)。 From f1149f592ea24326b42ae665b2d5118a7f9e48c3 Mon Sep 17 00:00:00 2001 From: Cwolf9 <2717232422@qq.com> Date: Mon, 12 Sep 2022 15:17:31 +0800 Subject: [PATCH 154/154] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=BF=BB=E8=AF=91?= =?UTF-8?q?=E7=BB=86=E8=8A=82=20development/hardware/acer12.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- development/hardware/acer12.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/development/hardware/acer12.md b/development/hardware/acer12.md index 4005cfb6..a5e18252 100644 --- a/development/hardware/acer12.md +++ b/development/hardware/acer12.md @@ -33,7 +33,7 @@ If you boot into Windows 10 or something hangs or crashes and you need to power -在机器关闭的情况下,按住音量增加键并保持住,同时按住电源按钮并保持住。当显示屏背光打开时松开电源按钮。另一种方法是,在打开机器电源时按住外接键盘上的 F2 键。 +在机器关闭的情况下,按住音量加键,然后保持不松手并按住电源键。当显示屏背光亮起时松开电源键。另一种方法是,在打开机器电源时按住外接键盘上的 F2 键。 -有可能最终出现这样的情况:机器真的想帮助您恢复失败的启动进入到Windows 10,并将您跳入一个恢复屏幕--蓝色背景,"Recovery"显示在屏幕左上方,还有一些文字说 "It looks like Windows didn’t load correctly"。 +有可能最终出现这样的情况:机器真的想帮助您恢复失败的启动并进入 Windows 10,将您丢进了一个恢复屏幕——蓝色背景,屏幕左上方显示“Recovery(恢复模式)”,还有一段文字说 “It looks like Windows didn’t load correctly(Windows 似乎未正确加载)”。 -4. 选择“UEFI Firmware Settings(UEFI固件设置)”(集成电路和齿轮图标) +4. 选择“UEFI Firmware Settings(UEFI 固件设置)”(电路板和齿轮图标) @@ -169,7 +169,7 @@ It’s possible to end up in a situation where the machine *really* wants to hel -据观察,USB 初始化在冷启动时很竞争。因此,如果您从冷启动开始并尝试启动到 USB,您可能会发现您启动的是磁盘。 +据观察,USB 初始化在冷启动时有竞争问题。因此,如果您从冷启动开始并尝试启动到 USB,您可能会发现自己启动到的是磁盘。