Ubuntu22.04编译openFydeR120笔记(vmware amd64和orangepi 5 arm64为例)

官方英文文档如下,本文以大陆网络环境下和r120版本以及编译遇到的问题做了一些补充

构建最后的结果参见:

本文环境:
Ubuntu 22.04 LTS,VMware 17.0,32GB内存和500G硬盘

硬盘假如需要扩容,需要删除nosuid flag,不然chroot环境无法创建成功

术语 描述
(outside) 构建机
(inside) cros_sdk的chroot环境内

终端网络代理

你懂的代理软件,代理和端口

(outside)
export https_proxy=http://127.0.0.1:7890;export http_proxy=http://127.0.0.1:7890;export all_proxy=socks5://127.0.0.1:7890

安装包

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

获取源码

(outside)
# 同时创建r120和openfyde两层目录
mkdir  -p r120/openfyde 
cd r120
# repo创建仓库 
repo init -u https://chromium.googlesource.com/chromiumos/manifest.git --repo-url https://chromium.googlesource.com/external/repo.git -b release-R120-15662.B

git clone https://github.com/openFyde/manifest.git openfyde/manifest -b r120-dev
ln -snfr openfyde/manifest .repo/local_manifests
repo sync 
cd openfyde/chromium
gclient sync

在国内同步google和github的仓库经常会出现中断的情况。
比如

error: RPC failed; curl 56 GnuTLS recv error (-9): Error decoding the received TLS packet.
RPC failed; curl 18 transfer closed with outstanding read data remaining
error: 847 bytes of body are still expected

针对这种情况,repo会重试多次,也可以对单个项目进行同步,比如chromium非常庞大,整个仓库有30G,非常非常容易中断,可以凌晨再同步中断概率会小一点。

repo sync openfyde/chromium/src

实在实在最后的办法是在国外的主机上repo sync中断的仓库,比如chromium,同步完后,
将三个目录下的文件打包回来,

  • r120/openfyde/chromium/src下的所有文件
  • r120/.repo/projects/openfyde/chromium/src.git下的所有文件
  • r120/.repo/project-objects/chromium.git下的所有文件
    放到对应目录

创建chroot环境

(outside)
cd r120
cros_sdk

假如出现xdg没有xdg_state_home属性的话

120 fix AttributeError: module 'xdg.BaseDirectory' has no attribute 'xdg_state_home'. Did you mean: 'xdg_data_home'?

升级xdg后pip install --upgrade xdg 后再次运行cros_sdk即可解决问题

set_board

(inside)
$ setup_board --board=amd64-openfyde_vmware

这里会出现的问题是没有archero,这里很多社区用户都碰到了。
archero目前是内部build。
比如

解决办法在这个帖子里

在对应overlay的metadata/layout.conf里面去掉archero即可

diff --git a/metadata/layout.conf b/metadata/layout.conf
index 8170e7fbd248..49078249b06d 100644
--- a/metadata/layout.conf
+++ b/metadata/layout.conf
@@ -1,4 +1,4 @@
-masters = portage-stable chromiumos eclass-overlay rock5b-openfyde-base fyde-eclass archero
+masters = portage-stable chromiumos eclass-overlay rock5b-openfyde-base fyde-eclass
 profile-formats = portage-2 profile-default-eapi
 profile_eapi_when_unspecified = 5-progress
 repo-name = rock5b-openfyde
(END)

之前archero不知道能不能用?

开始构建

i7-13700k 24核大概四个小时左右
i7-11800h 8核大概九个小时左右

(inside)
cros build-packages '--board=amd64-openfyde_vmware' --nowithautotest --autosetgov --nouse_any_chrome
ERROR: DLC=termina-dlc is not allowed to be factory installed.

修改chromite/lib/dlc_allowlist.pydlc白名单,将termina-dlc加入

当遇上libc++abi: terminating due to uncaught exception of type std::bad_alloc: std::bad_alloc
修改vm.max_map_count的大小
https://stackoverflow.com/questions/38558989/node-js-heap-out-of-memory/59923848#59923848

构建磁盘

(inside)
cros build-image --board=${BOARD} --noenable_rootfs_verification

构建虚拟机镜像

去broadcom下载OVF-TOOL和vddk

在create-ova(在r120/openfyde/overlays/overlay-amd64-openfyde_vmware/)这个脚本里面修改路径


同时下载qemu-utils包

(outside)
sudo apt install qemu-utils

最后执行即可得到ova镜像文件。

./create-ova ../../../src/build/images/amd64-openfyde_vmware/R120-15662.71.0-d2024_07_26_160727-a1/chromiumos_image.bin result.ova
2 个赞

在对应overlay的metadata/layout.conf里面去掉archero即可

这里可以把archero 下载到 openfyde/overlays目录,然后去src/overlays 目录建立一个project-archero的软链接即可,如图:

对于在metadata/layout.conf中找不到的库,都可以用这种方式解决。

另外,我在编译orangepi5的镜像时发现,似乎还有可能会缺少overlay-orangepi5-openfyde-base这样的库,也可以使用上述方式解决。

我个人理解的是openfyde/overlays目录应该是fydeos自身维护的一些库,但是编译时,实际是去查找src/overlays 目录下面的库,因此需要建立一个软链接。

另外补充一下我编译碰到的网络问题:

  1. 在(outside) 环境中,需要配置代理
  2. 在(inside)环境中,也需要配置代理

最后就是保证磁盘空间至少200GB才能编译成功,我花了两个周末,因为虚拟机只分配了100GB的空间而编译失败qwq

2 个赞

本来也想写个编译openfyde碰到的问题的笔记,这下不用写了hhh

1 个赞

我是看到你发的帖子才想起来折腾哈哈

1 个赞

还有一个折腾archero的笔记,done!

1 个赞

24核4小时。。。。可怕,另外按照这个教程编译出的r120是可以用安卓子系统的么?

实际上16个核,还有8个核是超线程,android还没验证。

增加orange pi 5的编译记录

注意虚拟机至少分配500G空间以上

Chromium 120.0.6099.220 (openFyde unlicensed version) (64-bit)
Revision d8ee74c32e1d4a7f8d3efb9a8a15eca34af9e81d-refs/branch-heads/6099@{#1725}
Platform 15662.71.18.15 (Developer Build - root) stable-channel orangepi5-openfyde
Firmware Version
Customization ID orangepi5
ARC 10061641 SDK Version: 28
JavaScript V8 12.0.267.14
User Agent Mozilla/5.0 (X11; CrOS x86_64 14541.0.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36
Command Line /opt/google/chrome/chrome --gpu-sandbox-failures-fatal=no --disable-mojo-broker --enable-logging --enable-native-gpu-memory-buffers --edge-touch-filtering --gpu-sandbox-start-early --platform-disallows-chromeos-direct-video-decoder --use-cras --user-data-dir=/home/chronos --enable-webgl-image-chromium --disable-explicit-dma-fences --disable-buffer-bw-compression --enable-touchview --enable-wayland-server --enable-zero-copy --default-wallpaper-large=/usr/share/chromeos-assets/wallpaper/default_large.jpg --default-wallpaper-small=/usr/share/chromeos-assets/wallpaper/default_small.jpg --guest-wallpaper-large=/usr/share/chromeos-assets/wallpaper/guest_large.jpg --guest-wallpaper-small=/usr/share/chromeos-assets/wallpaper/guest_small.jpg --num-raster-threads=2 --has-chromeos-keyboard --login-profile=user --system-developer-mode --bwsi --homepage=chrome://newtab/ --incognito --log-level=1 --login-user=$guest --login-user=$guest --login-profile=9b89e77a0f68ee2d63af5d5c4d85f02d53a91383 --flag-switches-begin --flag-switches-end --disable-sync --disable-extensions
Executable Path /opt/google/chrome/chrome
Profile Path /home/chronos/u-9b89e77a0f68ee2d63af5d5c4d85f02d53a91383

补充几点和vmware版本不一样的。

archero和ai-dev

archero和ai-dev是fydeos内部build,目前还没有公开。需要回退ai-dev和archero,主要是将577120a和8157c0e修改回退。
或者手动修改,除了layout.conf,还有https://github.com/openFyde/overlay-orangepi5-openfyde/blob/r114-dev/profiles/base/parentarchero:base需要注释掉。

build image时遇到idbloader和uboot无法找到的问题

dd: failed to open '/build/orangepi5-openfyde//usr/share/orangepi5/idbloader.img': No such file or directory

从这里下载到/build/orangepi5-openfyde//usr/share/orangepi5/

https://github.com/RebornOS-Team/lxqt-opi5-image/blob/main/idbloader.img
https://github.com/RebornOS-Team/lxqt-opi5-image/blob/main/u-boot.itb

构建发布包

使用https://github.com/openFyde/overlay-orangepi5-openfyde/blob/r120-dev/make-release-image/make-release-image.sh

./make-release-image.sh ../../../../src/build/images/orangepi5-openfyde/latest/chromiumos_image.bin result-orangepi5-r120.run
输出文件在out目录下

最后运行run,得到image烧写到TF卡中。



增加edge 2测试
使用https://github.com/khadas/fenix 生成 idblock.bin and uboot
使用https://github.com/khadas/khadas-uboot/ 生成 boot.scr.uimg