[ARM64] 破解华为ExaGear,让它可以在飞腾CPU上运行
华为ExaGear简介:
ExaGear是一款二进制指令动态翻译软件,运行在ARM64服务器上,通过将x86的指令在运行时翻译为ARM64指令并执行,使得绝大部分Linux on x86应用无需重新编译就可运行在ARM64服务器上,实现低成本、快速迁移Linux on x86应用到ARM64服务器。
这非常好。
但有一点不好:华为ExaGear只能在华为CPU上运行,在其他CPU上运行会报错“Unsupported CPU detected”。
不过,只要把可执行文件稍微修改一下,绕过这个CPU类型检测,就能让它在飞腾CPU上运行了,方法在下面。
备注:这篇教程也做为华为鲲鹏CPU安装ExaGear的教程,不过鲲鹏CPU本身就是华为的,所以不需要执行破解那一步。
安装步骤
-
旧版华为ExaGear(3.x之前)对Linux内核有要求,不兼容内核无法正常启动旧版华为ExaGear(3.x之前)。
目前已知UOS的内核是兼容的。
银河麒麟的内核不兼容。
树莓派官方64位系统的内核不兼容。
所以银河麒麟和树莓派最好使用3.x版本的Exagear,以免遇到兼容性问题。如果一定要使用旧版Exagear,银河麒麟可按以下教程替换内核:
https://hu60.cn/q.php/bbs.topic.102204.html内核需要开启以下选项,才能与旧版华为ExaGear(3.x之前)兼容:
CONFIG_ARM64_VA_BITS_48=y CONFIG_ARM64_VA_BITS=48 -
下载并安装以下任一版本的华为exagear:
- 3.1.0.1(与我的破解方法不兼容,飞腾用不了,鲲鹏和麒麟可以):https://mirrors.huaweicloud.com/kunpeng/archive/ExaGear/ExaGear_3.1.0.1.tar.gz
- 3.1.0(与我的破解方法不兼容,飞腾用不了,鲲鹏和麒麟可以):https://mirrors.huaweicloud.com/kunpeng/archive/ExaGear/ExaGear_3.1.0.tar.gz
- 3.0.0.1(推荐,没有内核兼容问题):https://mirrors.huaweicloud.com/kunpeng/archive/ExaGear/ExaGear_3.0.0.1.tar.gz
- 2.0.0.1(有内核兼容问题):https://mirrors.huaweicloud.com/kunpeng/archive/ExaGear/ExaGear_2.0.0.1.tar.gz
- 1.2.1.1(有内核兼容问题):https://mirrors.huaweicloud.com/kunpeng/archive/ExaGear/ExaGear_1.2.1.1.tar.gz
如果想看看有没有新版本,可以去这里找(但是新版本可能和我的破解方法不兼容,飞腾用不了,鲲鹏和麒麟可以):
https://mirrors.huaweicloud.com/kunpeng/archive/ExaGear/建议银河麒麟、deepin和UOS安装
ExaGear_Server_for_Ubuntu20里的包。 -
安装方法:
- 压缩包解压后,在文件管理器里进入
ExaGear_*/ExaGear_Server_for_Ubuntu20/release文件夹。 - 右击文件管理器的空白处,选择“在终端打开”。
- 在打开的终端执行以下命令:
sudo apt install ./*.deb - 压缩包解压后,在文件管理器里进入
-
尝试运行
exagear命令。
exagear
如果遇到以下报错,说明Linux内核与旧版华为exagear(3.x之前)不兼容,需要更换CONFIG_ARM64_VA_BITS_48=y的内核,或者安装Exagear 3.x版本。

如果遇到以下报错,请执行第5步的破解操作:

如果执行完没有报错,直接进入了exagear环境,就不需要执行第5步,可直接跳到第6步。
- 执行以下命令破解ExaGear(如果你是华为CPU,不需要破解就能用,可跳过此步):
# 切换到root权限
sudo -i;
# 检测是否需要破解
grep ExaGear /proc/cpuinfo >/dev/null && echo '你在exagear内,请直接跳到第6步。' || { grep 0x0000000048 /sys/devices/system/cpu/cpu0/regs/identification/midr_el1 >/dev/null && echo '你用的是华为CPU,不需要破解,请直接跳到第6步。' || echo '你用的不是华为CPU,需要破解,请执行下面的命令。'; };
# 破解 ubt_x32a64_al
f='/opt/exagear/bin/ubt_x32a64_al';
mv "$f" "$f.origin";
perl -pe 's/\x{02}\x{7C}\x{18}\x{53}(?!\x{1F}\x{5C})/\x{02}\x{09}\x{80}\x{D2}/g' < "$f.origin" > "$f";
chmod +x "$f";
# 破解 ubt_x64a64_al
f='/opt/exagear/bin/ubt_x64a64_al';
mv "$f" "$f.origin";
perl -pe 's/\x{02}\x{7C}\x{18}\x{53}(?!\x{1F}\x{5C})/\x{02}\x{09}\x{80}\x{D2}/g' < "$f.origin" > "$f";
chmod +x "$f";
如果破解之后exagear命令还是进不去,提示CPU没有SPE,那就需要打开 /etc/exagear*.conf (具体文件名我忘了,你们自己找一找)配置文件,把
EXAGEAR_USE_OPT="y"
改成
EXAGEAR_USE_OPT="n"
- 现在exagear应该可以使用了,只需要执行
exagear命令进入x86容器环境,就可以安装x86软件包了。
(截图只是功能展示,不需要执行截图中的命令。要执行的操作从6.1开始。)


不过系统语言是英文。切换语言的方法如下:
6.1. 换源
Ubuntu默认软件源下载速度很慢,所以安装软件包之前先换源:
# 首先进入exagear
grep ExaGear /proc/cpuinfo >/dev/null || exagear || echo '进入exagear失败,请先执行前面的步骤,正确安装exagear。在解决该问题前不要继续。'
# 然后下面3个命令任选一个执行,如果一个速度不满意就换另一个。下面执行 apt install 步骤的时候就能看出速度快不快。
# 网易
sudo sed -i 's@[a-z0-9.-]*\.[a-z][a-z][a-z]*/ubuntu@mirrors.163.com/ubuntu@g' /etc/apt/sources.list
# 阿里云
sudo sed -i 's@[a-z0-9.-]*\.[a-z][a-z][a-z]*/ubuntu@mirrors.aliyun.com/ubuntu@g' /etc/apt/sources.list
# 清华
sudo sed -i 's@[a-z0-9.-]*\.[a-z][a-z][a-z]*/ubuntu@mirrors.tuna.tsinghua.edu.cn/ubuntu@g' /etc/apt/sources.list
6.2. 切换语言为中文
# 首先进入exagear
grep ExaGear /proc/cpuinfo >/dev/null || exagear || echo '进入exagear失败,请先执行前面的步骤,正确安装exagear。在解决该问题前不要继续。'
# 更新软件包列表
sudo apt update;
# 安装字体和语言包
sudo apt install -y locales fonts-noto-cjk fonts-noto-cjk-extra language-pack-zh-hans;
# 选择语言
sudo dpkg-reconfigure locales;
执行sudo dpkg-reconfigure locales后,你会看到这样的界面,无需修改选项,直接确认即可。用方向键或者Tab导航到Ok上,然后按空格或者回车确认。

然后在这里选“zh_CN.UTF-8”并回车确认。

等命令执行完(需要一段时间),关掉终端再重新打开一个,命令的语言就会变成中文了。
exagear
apt





