跳转到主要内容

从源码构建 openFyde 镜像

简介

本文档介绍了如何使用openFyde 提供的board overlay源代码为 Fydetab Duo 构建 openFyde 镜像。

格式说明

在本文档中,我们会对提供的 Shell 命令使用不同的标签,来指示它们的不同适用情况:

  • 您的构建计算机(您正在其上执行开发的计算机)
  • 构建计算机上的 chroot(Chromium OS SDK)
标签命令说明
(outside)在构建计算机上,chroot 环境之外
(inside)在构建计算机上的 chroot 环境内

系统要求

  • 一台支持 x86_64 系统的构建用电脑(必须是支持64位的硬件)。openFyde(以及 Chromium OS)是一个非常庞大的项目,根据电脑配置的差异,从头开始构建通常需要数小时到超过 10 小时。

    • CPU:我们建议使用 4 核或更高处理器。openFyde 构建过程支持并行化,因此更多核心可以显著缩短构建时间。
    • 内存:我们建议至少 16GB,加上足够的交换空间(swap),因为在此项目中,您需要从源代码构建 Chromium。截至 2017 年 3 月,构建 Chromium 需要 8GB 到 28GB 的 RAM,因此如果内存不足,您会遇到大量交换空间或内存不足(OOM)问题。如果您不构建自己的 Chromium 副本,内存要求将大大降低,但代价是失去此项目提供的一些关键功能。
    • 磁盘:至少 150GB 可用空间,强烈建议 200GB 或更多。SSD 可以显著缩短构建时间,因为需要向磁盘写入和从磁盘读取许多文件。
    • 网络:源代码总下载量将超过 100GB。快速稳定的互联网访问将非常重要。
  • x86_64 版本的 Linux 操作系统,本文档中稍后将称其为 主机操作系统。openFyde 构建过程使用 chroot 来隔离构建环境与主机操作系统。因此理论上任何现代 Linux 发行版都应该可以工作。但是,只有有限的 Linux 发行版经过 Chromium OS 团队和 FydeOS 团队的测试。已知可用的 Linux 版本:

    • Ubuntu Linux 22.04 LTS
    • Arch Linux
  • 一个具有 sudo 访问权限的非 root 用户帐户。构建过程应由该用户运行,而不是 root 用户。用户需要具有 sudo 访问权限。为简单方便起见,可以为该用户设置无密码 sudo。

准备系统

安装必要工具

Git 和 curl 是需要在主机操作系统中安装的基本工具,您还需要 Python3 用于构建过程中的大部分脚本工作。

注意

以下命令以 Ubuntu 为例。如果您在 Arch Linux 上编译,请使用 pacman 安装 Arch 中相应的软件包。

(outside)
sudo apt install build-essential git-core gitk git-gui curl lvm2 thin-provisioning-tools \
python3-pkg-resources python3-virtualenv python3-oauth2client xz-utils

虚拟磁盘配置

根据社区论坛用户 Su 的建议,需要进行额外设置才能保证构建顺利进行:

  • 打开 /etc/sysctl.conf 并添加一行:vm.max_map_count=524288
  • 然后运行:sudo sysctl -p

安装 Google depot_tools

depot_tools 是 Google 提供的一组有用的脚本,用于管理源代码检出和代码审查。我们需要它来获取 Chromium OS 源代码。

(outside)
$ cd $HOME
$ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

然后将 depot_tools 目录添加到 PATH 中,并为将要执行构建的用户设置适当的 umask。将以下行添加到该用户的 ~/.bash_profile 文件中。或者,如果您使用不同的 shell,请相应处理。

(outside)
export PATH=$HOME/depot_tools:$PATH
umask 022

然后重新登录到您的 shell 会话以使上述更改生效。

配置 git

您现在应该配置 git,否则在后续某些操作中可能会报错。

(outside)
$ git config --global user.email "you@email.address"
$ git config --global user.name "Your Name"

获取源代码

创建目录结构

此处描述的目录结构是基于燧炻创新团队最佳实践的建议。您可以根据您的喜好来组织文件与目录。

(outside)
# 这是用于存放 Chromium OS 源代码的目录,即 cros-sdk
$ cd $HOME
$ mkdir -p r132

获取 Chromium OS 仓库

现在运行以下命令来获取源代码。如果您想构建不同的版本,请查找并使用不同的发布名称。

(outside)
$ cd r132

$ repo init -u https://chromium.googlesource.com/chromiumos/manifest.git -b release-R132-16093.B

申请 Google 和 FydeOS API keys

如果您希望通过使用 Google 帐户登录 Chromium OS 界面,您需要申请 Google API key并将其包含在您构建的磁盘镜像中。

按照此文档中的说明在 Google 网站上申请 Google API key。获取client ID、client secret和 API key后,将它们放入 ~/.googleapikeys 文件中,格式如下:

'google_api_key': 'your api key',
'google_default_client_id': 'your client id',
'google_default_client_secret': 'your client secret',

类似地,如果您希望利用 https://account.fydeos.com 提供的 FydeOS 在线帐户和同步功能,您需要申请一个 openFyde 开发者 API key 并将其包含在同一个 ~/.googleapikeys 文件中。目前,申请需要手动完成,通过发送电子邮件至 dev-support@openfyde.io,包括您的 FydeOS 帐户(如果您还没有,可以注册一个新帐户)详细信息,团队将尽快处理您的申请。

一旦您获得 openFyde 开发者 API key,您需要将其附加到 ~/.googleapikeys 文件中,格式如下(注意 : 前没有空格):

'fydeos_default_client_id': 'your openFyde Developer API client id',
'fydeos_default_client_secret': 'your openFyde Developer API client secret',

然后 Chromium OS 构建脚本将自动从此文件中读取必要信息,您构建的镜像将允许 Google 帐户以及 FydeOS 帐户登录。

设置 openFyde

现在获取 openFyde manifest,并在指定位置创建符号链接以覆盖 Chromium OS 使用的默认 manifest。

(outside)
$ cd r132
$ git clone https://github.com/openFyde/manifest.git openfyde/manifest -b r132-dev

$ ln -snfr openfyde/manifest .repo/local_manifests

现在开始获取源代码:

(outside)
# 如果您有快速的互联网连接,请提高-j后的数字
$ repo sync -j8

$ cd openfyde/chromium
$ gclient sync
注意

如果 gclient sync 因以下错误而失败,您需要手动创建 .gclient 并复制/粘贴 gclient 的内容到其中。

Error: client not configured; see 'gclient config'

我们需要从 googlesource.com 下载大约 100GB 的 Chromium OS 源代码数据,因此该过程耗时将取决于您的网速,整个过程可能超过 30 分钟。如果您能稳定、高速的连接到 Google 服务器,将会很有帮助。

一旦 gclient sync 完成,chromium 源代码文件夹现在已完全设置好。

为 Fydetab Duo 构建 openFyde

创建 chroot 环境

如前所述,我们将使用 chroot 环境来运行实际的构建过程和其他一些相关任务。要创建 chroot 环境,请运行以下命令:

(outside)
$ cd r132
$ cros_sdk

根据您的互联网连接速度和磁盘读写速度,该过程可能需要大约 30 分钟。完成后,它将进入 chroot。shell 提示符字符串如下所示,因此很容易判断您当前是否在 chroot 中。

(inside)
(cr) xxx@localhost /mnt/host/source/src/scripts

构建软件包

由于 openFyde 的 r132 版本中缺少 Android 和 AI 功能相关的源代码,为正常构建,需要修改一些文件。

进入 chroot 后,默认情况下您位于 /mnt/host/source/src/scripts。需要修改的文件是:

  • /mnt/host/source/src/overlays/overlay-fydetab_duo-openfyde/metadata/layout.conf:从第一行删除 archero 和 ai-dev。
  • /mnt/host/source/openfyde/overlays/overlay-fydetab_duo-openfyde/profiles/base/parent:从其第二行删除 archero:base 条目。
  • /mnt/host/source/chromite/lib/dlc_allowlist.py:将 termina-dlc 添加到 DLC_FACTORY_INSTALL
注意

在 chroot 内部,默认情况下可以使用 nano 文本编辑器。您可以使用它来修改和保存文件。有关基本用法,您可以参考这个简单教程

现在是时候为 Fydetab Duo 构建所有软件包了。请注意,构建过程仍然需要在编译某些软件包之前下载相应源代码,因此请确保互联网连接的稳定。

(inside)
$ setup_board --board=fydetab_duo-openfyde
$ cros build-packages --jobs=4 --board=fydetab_duo-openfyde --no-withautotest
# 添加 "--no-withautotest" 以通过跳过某些测试来加速构建过程
# 您可以根据设备中的 CPU 核心数调整 jobs 参数的值

根据您的处理器性能、内存大小、磁盘速度和互联网连接质量,构建过程的耗时将有巨大差别。以下是一些示例,供您调整预期:

  • 在一台配备 4 核 8 线程、16GB 内存、文件在常规 HDD 上以及 100Mb 宽带的普通机器上,该过程耗时 15 到 16 小时。
  • 在一台配备 AMD Threadripper 3990x CPU(64 核 128 线程)、128GB 内存和 300Mb 宽带的工作站级服务器上,该过程耗时 44 分钟。

构建磁盘镜像

build-packages 命令成功完成后,您可以开始构建磁盘镜像。

(inside)
$ cros build-image --board fydetab_duo-openfyde --no-enable-rootfs-verification
# 添加 --no-enable_rootfs_verification 标志以在构建的镜像上启用根文件系统读写

这可能需要 10 到 30 分钟,耗时主要取决于磁盘速度。在 SSD 上比在 HDD 上快得多。

找到您的镜像

命令成功完成后,您将生成磁盘镜像,保存在 chroot 环境中的 /mnt/host/source/src/build/images/fydetab_duo-openfyde/ 目录下,或主机操作系统中的 r132/src/build/images/fydetab_duo-openfyde。它们其实是同一个目录,只是在 chroot 环境中绑定挂载。

每次调用 build_image 命令时,都会在上述目录下创建一个类似 R132-XXXX.XXX.<日期 时间>-a1 的目录。在上述目录下有一个名为 latest 的符号链接,它始终指向最后一次成功构建的镜像目录。

磁盘镜像通常命名为 chromiumos_image.bin,位于上述目录下。因此,最新的镜像在 chroot 环境中的完整路径是:

/mnt/host/source/src/build/images/fydetab_duo-openfyde/latest/chromiumos_image.bin

而在主机操作系统中,它是:

r132/src/build/images/fydetab_duo-openfyde/latest/chromiumos_image.bin

构建可刷写镜像

在将您构建的镜像刷写到设备之前,我们还需要构建一个可用于实际刷写的镜像。整个过程必须在 chroot 环境之外 执行。在进行以下步骤之前,请记住输入 exit 离开 chroot,或使用 Ctrl + D 离开。

获取镜像构建工具

openFyde 提供了一个从磁盘镜像生成可刷写镜像的工具。我们需要从官方项目中获取它。

(outside)
$ cd r132
$ git clone https://github.com/openFyde/rk3588-image-maker
$ cd rk3588-image-maker

构建可刷写镜像

(outside)
# 从 bin 挂载必要的内容
./map_chromiumos_image.sh /PATH/TO/CHROMIUMOS/IMAGE.bin --board fydetab_duo
# 如果您完全按照上述步骤操作,镜像应该是
# ~/r132/src/build/images/fydetab_duo-openfyde/latest/chromiumos_image.bin
./rk3588-mkupdate.sh

一旦过程完成,您将在当前目录中找到一个名为 update.img 的文件——这就是可刷写的镜像。

更多信息

Chromium OS Developer Guide,这是如何构建 Chromium OS 的官方文档。