交叉编译
交叉编译器 是一种在 主机平台(如 Ubuntu 或虚拟机)上运行,但用于生成 目标平台(如 ARM、MIPS 等架构)可执行文件的编译工具由于开发板资源有限,Buildroot 默认不支持本地编译 C 程序,因此需要使用交叉编译工具链。 由于开发板端的 Ubuntu 与 Buildroot 根文件系统基于不同工具链,用户需在 Ubuntu 22.04 的 PC 端选择对应的交叉编译器,编译后才能在目标系统上正常运行。
1. 准备工作
获取交叉编译工具链:
版本 描述 下载 glibc Ubuntu 系统的交叉编译工具链需要在ARM官网上获取对应的交叉编译器 下载 uclibc Buildroot 系统的交叉编译工具链可在 SDK 中获取 下载 解压对应压缩包:
Ubuntu 执行命令:
#-C ~/ 指定解压路径为用户的主目录
tar zxvf gcc-arm-11.2-2022.02-x86_64-arm-none-linux-gnueabihf.tar.gz -C ~/Buildroot 执行命令:
#-C ~/ 指定解压路径为用户的主目录
tar zxvf arm-rockchip830-linux-uclibcgnueabihf.tar.gz -C ~/
以程序 hello.c 为例,编译出对应的可执行文件,文件执行效果是在终端上打印
hello world。hello.c 代码如下:#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("hello world\n");
return 0;
}
2. 编译生成 Buildroot
选择方式一/方式二中的一种即可生成对应文件
方式一:修改环境变量
设置交叉编译工具的环境变量,如果需要永久生效,编辑配置文件(如
.bashrc或.profile)。vim ~/.bashrc添加工具链路径,将交叉编译工具的路径添加到系统的 PATH 环境变量中:
export PATH=/home/buildroot/luckfox-pico/tools/linux/toolchain/arm-rockchip830-linux-uclibcgnueabihf/bin:$PATH- 注意:请根据自己的 SDK 路径填写
更新环境变量,执行以下命令使配置生效。
source ~/.bashrc使用交叉编译工具编译程序。
arm-rockchip830-linux-uclibcgnueabihf-gcc hello.c -o hello最后将可执行文件传输到开发板。
scp hello root@192.168.9.128:/root- 注意:请根据自己开发板的实际 IP 地址填写
方式二:使用Makefile
创建并编辑 Makefile 文件。
vi Makefile- 注意:此 Makefile 需要创建在 hello.c 文件同级目录下
编写 Makefile 文件。
#Luckfox-pico-ultra-w-buildroot
CC := /home/buildroot/luckfox-pico/tools/linux/toolchain/arm-rockchip830-linux-uclibcgnueabihf/bin/arm-rockchip830-linux-uclibcgnueabihf-gcc
hello:hello.c
-$(CC) $^ -o $@- 注意:请根据自己的 SDK 路径填写
执行 make 指令,将在当前目录下生成可执行文件。
make最后将可执行文件传输到开发板。
scp hello root@192.168.9.128:/root- 注意:请根据自己开发板的实际 IP 地址填写
3. 编译生成 Ubuntu 系统下的可执行文件
注意:选择方式一/方式二中的一种即可生成对应文件。方式一:修改环境变量
设置交叉编译工具的环境变量,如果需要永久生效,编辑配置文件(如
.bashrc或.profile)。vim ~/.bashrc添加工具链路径,将交叉编译工具的路径添加到系统的 PATH 环境变量中:
export PATH=/home/ubuntu/luckfox-pico/gcc-arm-11.2-2022.02-x86_64-arm-none-linux-gnueabihf/bin:$PATH- 注意:请根据自己的 SDK 路径填写
更新环境变量,执行以下命令使配置生效。
source ~/.bashrc使用交叉编译工具编译程序。
arm-none-linux-gnueabihf-gcc hello.c -o hello最后将可执行文件传输到开发板。
scp hello pico@192.168.9.128:/home/pico- 注意:请根据自己开发板的实际IP地址填写
方式二:使用 Makefile
创建并编辑 Makefile 文件。
vi Makefile- 注意:此Makefile需要创建在 hello.c 文件同级目录下
编写 Makefile 文件。
#Luckfox-pico-ultra-w-ubuntu
CC := /home/ubuntu/luckfox-pico/gcc-arm-11.2-2022.02-x86_64-arm-none-linux-gnueabihf/bin/arm-none-linux-gnueabihf-gcc
hello:hello.c
-$(CC) $^ -o $@- 注意:请根据自己的SDK路径填写
执行 make 指令,将在当前目录下生成可执行文件。
make最后将可执行文件传输到开发板。
scp hello pico@192.168.9.128:/home/pico- 注意:请根据自己开发板的实际 IP 地址填写
4. 运行可执行文件
- Buildroot下执行:

- Ubuntu下执行:
