Mac 下 UTM Arm64 Ubuntu虚拟机编译AOSP 14源码 记录

Mac 安装utm虚拟机 创建一个arm64版本的ubuntu 勾选虚拟化和 Rosetta 模拟x86_64
一路安装
虚拟化引擎选择部分,务必勾选 Apple Virtualization 。如果不勾选此项,那么后续的 Rosetta 是没办法选择的,并且性能是不足以进行系统编译的。

2025-04-23T08:36:27.png

2025-04-23T08:36:47.png

2025-04-23T08:37:27.png

内存,CPU 部分,建议尽量多给一些,这样编译速度更快,但是不一太多,太多会导致宿主机卡顿,这个需要均衡考虑,尤其是宿主机还需要同步执行其他事情的时候。
2025-04-23T08:38:22.png

磁盘部分,建议至少 400GB 以上,如下图:

2025-04-23T08:38:56.png

共享目录部分,如果是编译代码,不建议使用,性能不够,如果是常规的文件共享,问题不大。

如下图:

2025-04-23T08:39:27.png

最终的配置如下:

2025-04-23T08:39:49.png

设置 Rosetta 启用对于 x86_64 架构应用的支持

$ sudo mkdir /media/rosetta
$ sudo mount -t virtiofs rosetta /media/rosetta
$ sudo apt install binfmt-support

# 此命令的是通知操作系统 0x7f 开头的ELF文件委托给 rosetta 进行加载
# 0x7f 开头代表的是 x86_64 的可执行文件, rosetta 会把文件进行动态转译成 ARM64 指令,从而提升执行性能
# 另外注意,rosetta 只支持 x86_64 , 不支持 x86_32 的应用

$ sudo /usr/sbin/update-binfmts --install rosetta /media/rosetta/rosetta \
--magic "\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x3e\x00" \
--mask "\xff\xff\xff\xff\xff\xfe\xfe\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff" \
--credentials yes --preserve no --fix-binary yes

添加到系统文件加载项,要求系统启动的时候自动加载 rosetta 。

$ sudo apt install vim

$ sudo vim /etc/fstab

在文件尾部新增一行:

rosetta /media/rosetta virtiofs ro,nofail 0 0

修改后的配置文件类似如下:

/etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/vda2 during curtin installation
/dev/disk/by-uuid/c564e919-be8a-40fc-89cf-bba11fbc6c45 / ext4 defaults 0 1
# /boot/efi was on /dev/vda1 during curtin installation
/dev/disk/by-uuid/92AB-2A45 /boot/efi vfat defaults 0 1
/swap.img    none    swap    sw    0    0
 
rosetta    /media/rosetta    virtiofs    ro,nofail    0    0

执行 df 命令,应该可以看到 rosetta 已经被正常加载,如下:

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           2.6G 1012K  2.6G   1% /run
/dev/vda2       392G   11G  361G   3% /
tmpfs            13G     0   13G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
/dev/vda1       1.1G  6.4M  1.1G   1% /boot/efi
tmpfs           2.6G  4.0K  2.6G   1% /run/user/1000
rosetta         1.9T  1.8T   25G  99% /media/rosetta

配置完成之后,务必重启一次虚拟机,否则大概率虚拟机系统会在运行过程中崩溃。

启用多处理器架构应用安装

$ sudo dpkg --add-architecture amd64

此时注意,默认情况下 ARM 安装包的 APT 服务器是跟 x86 安装包的服务器是不同的,如果执行上述命令后,更新安装源,会报错找不到文件,我们需要手工指定不同架构的安装包搜索服务器。可以参照下面的方式修改 /etc/apt/sources.list 显式声明各个架构的服务器地址,如下:

# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ jammy main restricted
deb-src [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ jammy main restricted

## Major bug fix updates produced after the final release of the
## distribution.
deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ jammy-updates main restricted
deb-src [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ jammy-updates main restricted

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team. Also, please note that software in universe WILL NOT receive any
## review or updates from the Ubuntu security team.
deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ jammy universe
deb-src [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ jammy universe
deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ jammy-updates universe
deb-src [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ jammy-updates universe

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team, and may not be under a free licence. Please satisfy yourself as to
## your rights to use the software. Also, please note that software in
## multiverse WILL NOT receive any review or updates from the Ubuntu
## security team.
deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ jammy multiverse
deb-src [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ jammy multiverse
deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ jammy-updates multiverse
deb-src [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ jammy-updates multiverse

## N.B. software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ jammy-backports main restricted universe multiverse
deb-src [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ jammy-backports main restricted universe multiverse

deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ jammy-security main restricted
deb-src [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ jammy-security main restricted
deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ jammy-security universe
deb-src [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ jammy-security universe
deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ jammy-security multiverse
deb-src [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ jammy-security multiverse

deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ jammy main restricted

deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ jammy-updates main restricted

deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ jammy universe

deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ jammy-updates universe

deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ jammy multiverse

deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ jammy-updates multiverse

deb [arch=amd64] http://security.ubuntu.com/ubuntu jammy-security main restricted

deb [arch=amd64] http://security.ubuntu.com/ubuntu jammy-security universe

deb [arch=amd64] http://security.ubuntu.com/ubuntu jammy-security multiverse

更新源

$ sudo apt update
$ sudo apt dist-upgrade
$ sudo apt autoremove 

至此,我们已经可以在 ARM64 环境下,正常安装并运行 x86_64 的应用,只是安装应用的时候,需要明确指定安装包的处理器架构。

安装编译依赖

# 此处需要明确架构为 x86_64 架构,否则默认安装 ARM 架构的应用,我们编译需要使用 x86_64 架构的编译工具
 
$ sudo apt install gcc:amd64
 
# 解决 
# prebuilts/clang/host/linux-x86/clang-3289846/bin/clang.real: error while loadin
g shared libraries: libncurses.so.5: cannot open shared object file: No such fi
le or directory
 
$ sudo apt install libncurses5:amd64
 
# repo、git、ccache 这些工具,使用ARM64版本即可
$ sudo apt install repo ccache zip unzip
 
$ sudo apt install git
 
$ git config --global user.email "user@email.com"
 
$ git config --global user.name "user"
 
$ sudo apt autoremove

编译完一次后再次编译可能报AOT 错误 解决办法

sudo rm -rf /var/cache/prlrosettad/*` 根本无法清除缓存,我不得不先执行 `sudo -i`,然后 `rm -rf /var/cache/prlrosettad/*`,最后 `exit` 回到我的用户。

安装依赖:

sudo apt install bison     java异常
sudo apt install fontconfig:amd64 libfreetype6:amd64     字体库
sudo apt install fonts-dejavu-core:amd64 fonts-dejavu-extra:amd64

报错

 Aborted (core dumped) ERROR: Dex2oat failed to compile a boot image.It is likely that the boot classpath is inconsistent.Rebuild with ART_BOOT_IMAGE_EXTRA_ARGS="--runtime-arg -verbose:verifler" to see verificat ion errors.

解决方法:

在build/core/board_config.mkbuild/core/board_config.mk中设置WITH_DEXPREOPT为 false
build/core/dex_preopt_config.mk通过删除build/core/dex_preopt_config.mk来消除错误$(call pretty-error, DEXPREOPT must be enabled for user and userdebug builds)



参考链接:https://stackoverflow.com/questions/76947159/aosp-error-dex2oat-failed-to-compile-a-boot-image-it-is-likely-that-the-boot-cl
最后修改:2025 年 04 月 28 日
如果觉得我的文章对你有用,请随意赞赏