macOS 上搭建 RK3568 交叉编译环境

在 Apple(M 芯片) 的 macOS 上,使用 Lima 创建一个 ARM64 (aarch64) 架构的 Linux 虚拟机,并在其中安装 GCC 7 交叉编译器,以编译 RK3568 平台的程序。最终配置使得 aarch64-linux-gnu-gcc 命令指向 GCC 7.5 版本。

1. 安装 Homebrew

Homebrew 是 macOS 的包管理器,用于安装后续所需的软件。

打开终端,执行以下命令安装 Homebrew(如果尚未安装):

c 复制代码
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

安装完成后,根据终端提示将 Homebrew 添加到 PATH(通常会自动提示,也可手动执行以下命令):

c 复制代码
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"

验证安装:

c 复制代码
brew --version

2. 安装 Lima

Lima 可以让你在 macOS 上轻松启动 Linux 虚拟机,创建的虚拟机是 aarch64架构不是 windows 虚拟机中的x86_64j架构

c 复制代码
brew install lima

安装完成后,验证:

c 复制代码
limactl --version

3. 创建并配置 Lima 实例

创建一个 aarch64 架构的 Ubuntu 22.04 虚拟机,并设置共享文件夹,使 macOS 的代码目录可以直接在虚拟机中访问。

3.1 通过模版创建

Lima 内置了多个常用 Linux 发行版的模板,执行以下命令查看:

c 复制代码
limactl template list

输出类似:

c 复制代码
aliyun-ubuntu
docker
experimental/9p-sshfs
k3s
ubuntu-20.04
ubuntu-22.04
...

其中 ubuntu-22.04 就是我们将要使用的模板。

查看模版所在路径。

3.2 启动 Lima 实例

创建名为ubuntu的lima,/opt/homebrew/opt/lima/share/lima/templates/ubuntu-22.04.yaml是ubuntu-22.04在我计算机中的路径。

c 复制代码
limactl start --name=ubuntu  /opt/homebrew/opt/lima/share/lima/templates/ubuntu-22.04.yaml

首次启动会下载镜像并创建虚拟机,请耐心等待。

3.3 进入虚拟机

c 复制代码
limactl shell ubuntu

此时命令行提示符应变为 lima-ubuntu 开头,表示已进入虚拟机。

4. 在虚拟机中安装 GCC 交叉编译器

由于 Ubuntu 22.04 官方源不提供 GCC 7 的交叉编译器包,我们需要临时添加 Ubuntu 20.04 (Focal) 的源来安装。安装完成后建议禁用该源,避免系统升级时引发冲突。

4.1 添加 Ubuntu 20.04 源并安装

在虚拟机内执行以下命令:

c 复制代码
echo "deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports focal main universe" | sudo tee /etc/apt/sources.list.d/focal.list

更新软件包

c 复制代码
sudo apt update

安装交叉编译器

c 复制代码
sudo apt install gcc-aarch64-linux-gnu

上述命令安装的基本是当前系统支持的最新版本的编译器,比如22.04 安装的是11.x版本,该版本编译我的代码会出现大量错误或者警告,我需要安装7.5版本的编译链。

c 复制代码
sudo apt install -y gcc-7 g++-7

安装之后查看版本 确认是否安装成功

c 复制代码
aarch64-linux-gnu-gcc-7 --version

4.3 创建符号链接(使命令名无版本号)

许多 Makefile 默认使用 aarch64-linux-gnu-gcc,此时通过该命令查询或者编译,系统会报错,提示找不到该编译链,这是因为编译链的名称是aarch64-linux-gnu-gcc-7. 因此创建符号链接将其指向 GCC 7 版本:

c 复制代码
sudo ln -s /usr/bin/aarch64-linux-gnu-gcc-7 /usr/bin/aarch64-linux-gnu-gcc
sudo ln -s /usr/bin/aarch64-linux-gnu-g++-7 /usr/bin/aarch64-linux-gnu-g++

验证链接:

c 复制代码
aarch64-linux-gnu-gcc --version

至此 编译环境搭建完毕。

注:MAC M系列芯片 笔记本本身就是arm64架构,因此不支持x86架构的linux或者编译链。这是与windows本上安装linux或者wsl 的差异,即 不需要找专门的x86_64转amd64的编译链。直接安装gcc和g++即可。这也是我转用mac时转不过弯,一直按照windows上的安装流程操作 失败的原因。

以上 共勉。

相关推荐
Linux系统运维工程师_郭主任4 小时前
运维人还在被拒offer?现在能考的,只有 RHCE 10.0。
linux
自养Agent5 小时前
MCP Server Boundary Audit Report
linux·服务器·人工智能·windows·大模型·llm
Coisinier6 小时前
docker命令管理镜像及容器
linux·运维·nginx·docker·容器·操作系统
A心有千千结6 小时前
通过 SSH 反向代理让服务器借用本机网络访问 GitHub 的最佳实践
linux·服务器·网络·git·ssh·github
书生执笔画浮沉6 小时前
Linux 内核模块为什么不能自己解决兼容性问题?
linux·c·kernel·update·灵感
15Moonlight7 小时前
Linux网络(03):Socket 编程 TCP
linux·网络·tcp/ip
广州灵眸科技有限公司7 小时前
单芯片同时跑 Linux 与 RT-Thread:RV1126B的AMP异构方案完整拆解
linux·运维·服务器
小雪崩7 小时前
嵌入式学习:Linux驱动开发总结
linux·驱动开发·学习
C++ 老炮儿的技术栈7 小时前
std::atomic 是什么
linux·c语言·网络·c++·visual studio
2401_862880827 小时前
input 子系统框架 、platform 驱动框架
linux·驱动开发·嵌入式硬件