跳到主要内容

交叉编译与工具链

这里整理 Neardi Pi 3 / RK3576 常用的工具链环境。一般会遇到两种情况:

  • 在 x86 Ubuntu PC 上使用 AArch64 交叉编译工具链,编译 RK3576 Linux 应用。
  • 直接在 Neardi Pi 3 板端编译一些简单测试程序。

PC 端交叉编译工具链

PC 上编译 RK3576 程序时,可以使用 RK3576 SDK 里的 AArch64 交叉编译工具链,也可以只单独下载 Neardi Git 上的工具链。

  • 从 RK3576 SDK 获取
  • Neardi Git 获取

工具链通常在 SDK 的这个目录下:

SDK/prebuilts/gcc/linux-x86/aarch64/

查看目录中有哪些工具链:

cd SDK/prebuilts/gcc/linux-x86/aarch64/
ls

例如目录中有 gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu,可以把它的 bin 加到 PATH

export PATH=$PWD/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin:$PATH
aarch64-none-linux-gnu-gcc -v

如果只是想拿工具链,不想下载完整 SDK,可以从 Neardi Git 获取:

git clone http://git.neardi.com/linux/rk/prebuilts/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu
cd gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu
export PATH=$PWD/bin:$PATH
aarch64-none-linux-gnu-gcc -v

提示

不同 SDK 版本里的编译器前缀可能略有差异。如果 aarch64-none-linux-gnu-gcc 找不到,可以先进入工具链 bin 目录查看实际的 *-gcc 名称,再按实际前缀使用。

PC 端编译示例

创建一个简单的 C 文件:

#include <stdio.h>

int main(void)
{
printf("Hello, Neardi Pi 3\n");
return 0;
}

在 PC 上交叉编译:

aarch64-none-linux-gnu-gcc -o hello-pi3 hello_pi3.c
file hello-pi3

正常情况下,输出应该是 AArch64 Linux 可执行文件。拷贝到 Neardi Pi 3 后运行:

scp hello-pi3 neardi@192.168.1.153:~/
neardi@RK3576:~$ chmod +x hello-pi3
neardi@RK3576:~$ ./hello-pi3
Hello, Neardi Pi 3

在 Neardi Pi 3 板端编译

如果只是编译简单的用户态测试程序,也可以直接在板端编译。先安装基础编译环境:

neardi@RK3576:~$ sudo apt update
neardi@RK3576:~$ sudo apt-get install build-essential

安装完成后,可以确认编译器是否可用:

neardi@RK3576:~$ gcc -v
neardi@RK3576:~$ g++ -v

在板端直接编译同一个 C 程序:

neardi@RK3576:~$ gcc -o hello-pi3 hello_pi3.c
neardi@RK3576:~$ ./hello-pi3
Hello, Neardi Pi 3

参考资料