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/development/hardware/README.md b/development/hardware/README.md index c8f52c71..b4f9ddac 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] +- [在 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] diff --git a/development/hardware/acer12.md b/development/hardware/acer12.md index 15043e12..a5e18252 100644 --- a/development/hardware/acer12.md +++ b/development/hardware/acer12.md @@ -1,27 +1,81 @@ + +# 宏碁 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(Windows 似乎未正确加载)”。 + +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 设备。 diff --git a/development/hardware/chromebook.md b/development/hardware/chromebook.md index 64c43eab..c77ae54f 100644 --- a/development/hardware/chromebook.md +++ b/development/hardware/chromebook.md @@ -1,123 +1,281 @@ + +# 在 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 +287,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 +331,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 diff --git a/development/hardware/khadas-vim3.md b/development/hardware/khadas-vim3.md index 758ff5a7..ffd0015c 100644 --- a/development/hardware/khadas-vim3.md +++ b/development/hardware/khadas-vim3.md @@ -1,14 +1,622 @@ + +# 在 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 + + USB RESET + SPEED ENUM + + USB RESET + SPEED ENUM + ``` + + + 如果您看到第一行(`g_dnl_register: g_dnl_driver.name = usb_dnl_fastboot`)但之后没有其他行,请尝试使用不同的 USB-C 到 USB-\* 电缆并确保它同时支持数据和电力传输。 + + +1. 在您的主机中打开一个新的终端窗口并运行以下命令: + + ```posix-terminal + cd ~/fuchsia/prebuilt/third_party/fastboot + + ./fastboot flashing unlock + + ./fastboot flashing unlock_critical + + ./fastboot flash bootloader ~/fuchsia/prebuilt/third_party/firmware/vim3/u-boot.bin.unsigned + + ./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 + + 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 +``` \ No newline at end of file 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/_overview.md b/get-started/_common/components/_overview.md index fd829dc0..36fb9226 100644 --- a/get-started/_common/components/_overview.md +++ b/get-started/_common/components/_overview.md @@ -1,27 +1,33 @@ A component is a program that runs on Fuchsia in its own sandbox. Each component is a composable module that interacts with other components through their capabilities. All software on Fuchsia is defined as a component -except for the kernel image, bootstrapping processes, and the Component Manager. +except for the kernel image, bootstrapping processes, and the Component Manager. --> +组件是 Fuchsia 上运行在其自有沙盒中的程序。每个组件都是一个可组合的模块,通过其能力(capability)与其它组件交互。Fuchsia 中所有软件都被定义为组件,除了内核镜像、引导进程以及组件管理器(Component Manager)。 Fuchsia's component framework is responsible for running nearly all user space software in the system. The Component Manager is a system process that coordinates the execution and lifecycle of all component instances, maintains the component topology, provides components with their capabilities, and keeps them isolated -from one another. +from one another. --> +Fuchsia 的组件框架负责运行系统内几乎所有的用户空间软件。组件管理器是一个系统进程,它协调各个组件实例的执行和生命周期,维护组件拓扑,给组件提供相应功能,并使它们彼此隔离。 Components obtain privileges to access various parts of the wider system through capabilities. Each component can declare new capabilities that they offer to the system and capabilities provided by other components (or the framework) that they require to function. Component Manager resolves and validates all capability requests between components to ensure they match capabilities that the component -has been properly granted. +has been properly granted. --> +组件通过能力来获得访问更广泛系统的各个部分的权限。每个组件都可以声明其提供给系统的新能力,以及其运行所需的由其他组件(或框架)提供的能力。组件管理器解析并验证组件间的所有能力请求,以确保它们与组件已被正确授予的能力相匹配。 +