使用buildroot制作交叉编译工具链
一、交叉编译
交叉编译是在一个平台上生成另一个平台上的可执行代码。同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行。
要进行交叉编译,我们需要在主机平台上安装对应的交叉编译工具链(cross compilation tool chain),然后用这个交叉编译工具链编译我们的源代码,最终生成可在目标平台上运行的代码。
二、buildroot
buildroot 是Linux平台上一个构建嵌入式Linux系统的框架。整个Buildroot是由Makefile脚本和Kconfig配置文件构成的。你可以和编译Linux内核一样,通过buildroot配置,menuconfig修改,编译出一个完整的可以直接烧写到机器上运行的Linux系统软件(包含boot、kernel、rootfs以及rootfs中的各种库和应用程序)。
目前最新版是2022.05,下载地址
https://buildroot.org/download.html |
历史版本下载地址
https://buildroot.org/downloads/ |
三、交叉编译工具链
1、安装环境
Ubuntu 20.04 |
2、安装软件
# 依赖工具、库 sudo apt install gcc make libncurses5-dev # qemu模拟器,用于测试不同cpu架构编译的程序 sudo apt install qemu-user |
3、安装步骤
wget https://buildroot.org/downloads/buildroot-2022.05.tar.xz tar xf buildroot-2022.05.tar.xz cd buildroot-2022.05/ make menuconfig |
使用菜单配置
因为只需要交叉编译链,所以只需要配置几个地方即可,按Enter选择,按ESC两次退出当前菜单。
- Target options -> Target Architecture -> 选择cpu架构(ARC、ARM、MIPS、PowerPC等等)
-> Target Architecture -> 选择类型(如ARM分为armv4、armv5、armv6等等)
- Toolchain -> C library -> 选择c库类型(uclibc、glibc、musl)
->Kernel Headers -> 选择内核版本(也可以手动指定下载)
Target options:
Toolchain:
设置好按右方向键后选择Save保存配置
保存好后,多次点击Exit退出
开始编译,参数后面加入-j4表示4个线程编译,V=0表示简易输出日志。
make toolchain -j4 V=0 |
编译好后提示如下,如果编译的过程中报错,需要先解决报错问题。
工具链路径:
buildroot根目录/output/host |
工具链中可执行文件:
加入环境变量示例:
cd buildroot-2022.05/output/host/bin
echo "export PATH=\$PATH:$(pwd)" >> ~/.bashrc
source ~/.bashrc
直接输入arm-linux-gcc即可使用工具链。
四、测试效果
测试程序helloworld.c:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv)
{
printf("hello world\n");
return 0;
}
静态编译arm版程序:
五、参考链接
https://baike.baidu.com/item/%E4%BA%A4%E5%8F%89%E7%BC%96%E8%AF%91/10916911