解决 ARM64 设备编译 OpenWrt 失败

发表于 更新于

前言

在 ARM64 设备(如苹果的 M1/M2 电脑、路由器)上编译 OpenWrt 会遇到一些问题,例如 Golang 的 C-bootstrap 不被支持。这时候我们要用外部安装的 Go 作为 bootstrap 参与构建。这不算错误,属于和 x86 编译环境的细微区别。

本文将告诉你具体应该怎么做。这是一篇新手向教程。过程十分简单!

错误

当我们在 ARM64 设备上按照正常流程从源码构建 OpenWrt 时,在编译的后期会遇到一个这样的错误消息:

ERROR: package/feeds/packages/golang [host] failed to build.

这个错误没有给出原因。我们使用 make -j1 V=s 再次编译,它会输出更多细节。很快你会注意到多了一个与之相关的错误消息:

Makefile:402: *** go-bootstrap cannot be installed on linux/arm64.  Stop.

好了,原因很清楚了。OpenWrt 非常友好的提示你,go-bootstrap 不能在 ARM64 设备上安装。

解决

首先我们要在系统中安装 Golang,然后将路径添加到 OpenWrt 的构建配置中。

假设你是 Ubuntu/Debian 系统:

sudo apt install golang -y

安装完成后,通过 dpkg -L golang 可以大致列出 golang 包的安装路径。如果你无法分辨,还可以使用 dlocate 列出 golang 包的每一个文件的安装路径。假设你是 Ubuntu 22.04 系统,路径就是 /usr/lib/go-1.18。其它系统(或版本)请自行查找。

接下来,我们执行 make menuconfig 打开构建菜单,进入 Languages > Go > Configuration,回车进入 External bootstrap Go root directory 输入框,粘贴你系统中 Go 的安装路径:

构建菜单截图

完成后记得 Save,否则 .config 文件不会有变化。

你还可以直接编辑 .config 文件,手动设置(添加) CONFIG_GOLANG_EXTERNAL_BOOTSTRAP_ROOT 选项。

再次编译,不出意外你会一路成功。

结语

这就是 ARM64 设备构建 OpenWrt 失败的解决方法。祝你编译顺利!

作者头像 一点点入门知识 打赏作者
本文由作者按照 CC BY 4.0 进行授权
分享:

相关文章