Crosstool-NG构建arm交叉编译工具链
前言全局说明
嵌入式移植,交叉编译工具链是必不可少的
Crosstool-NG是一个用于构建交叉编译工具链的工具,它简化了从源代码构建gcc、glibc、binutils等工具的过程.
一、说明
1.1 环境:
Ubuntu 22.04 LTS (Linux VirtualBox 6.8.0-87-generic #88~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Tue Oct 14 14:03:14 UTC 2 x86_64 x86_64 x86_64 GNU/Linux)
1.2 配置:
某些 GCC 优化选项(如 -flto)会消耗大量内存
编译最好是8G或16G内存起步,否则在编译过程中需要大内存时会失败。
如果使用虚拟机或内存不够,可以增加 swap 来设置更多虚拟内存来解决。
二、安装依赖
sudo apt-get update
sudo apt-get install -y git gperf bison flex texinfo help2man gawk libtool-bin libncurses5-dev unzip
三、获取Crosstool-NG
3.1
git clone https://github.com/crosstool-ng/crosstool-ng
3.2 选择特定版本
默认 master
cd crosstool-ng
git checkout master
四、编译安装Crosstool-NG
4.1
./bootstrap
4.2
./configure --prefix=/opt/crosstool-ng
--prefix 可以用
export CT_PREFIX_DIR=来代替,效果一样
4.3
make
4.4
sudo make install
4.5 将Crosstool-NG添加到PATH:
export PATH="/opt/crosstool-ng/bin:$PATH"
五、设置
5.1
mkdir ~/arm-toolchain
下文有修改目录路径的方法
5.12
cd ~/arm-toolchain
arm-toolchain 会占用大量空间,选择一个空间大的路径,在 .confi 里修改,或用
ct-ng menuconfig修改
5.3 选择ARM架构预设
ct-ng arm-unknown-linux-gnueabi
5.4 增加 swap 来设置更多虚拟内存
sudo fallocate -l 8G /swapfile # 创建 8GB Swap 文件
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
/swapfile 是默认路径,你可以用 df -h 看看哪个磁盘空间大,选择放到其他大空间下。
通过
free -h或swapon --show查看swap总量
开机自动挂载:
在/etc/fstab 增加/swapfile none swap sw 0 0内容
六、构建工具链
6.1 验证设置
构建前可以运行以下命令检查路径设置是否正确:
ct-ng show-tuple # 显示当前配置
ct-ng build.1 # 只执行第一步,检查下载和解压
6.2 构建
ct-ng build
构建过程可能需要较长时间(30分钟到几小时,取决于系统配置)。
构建完成后,工具链将安装在~/x-tools/arm-unknown-linux-gnueabi目录下(或你指定的目录)。
七、扩展
7.1 离线构建
提前下载所有源码包:
ct-ng source
可以使用
export CT_TARBALLS_DIR=~/ng-home/src/指定源码下载目录

7.2 自定义配置(可选)
ct-ng menuconfig
常见配置选项:
Paths and misc options:设置安装路径(默认为~/x-tools)
Target options:调整目标架构(如ARMv7、ARMv8等)
Toolchain options:选择C库(glibc、musl等)
Operating System:选择Linux内核版本
Binary utilities:binutils版本
C compiler:gcc版本和配置
7.3 减少并行编译任务:
减少并行任务数(降低 -j 参数)(默认可能是 CPU 核数)
export CT_PARALLEL_JOBS=2
或者在 ct-ng menuconfig 里设置:
Paths and misc options → Number of parallel jobs
7.4 自定义 arm-toolchain 路径
Paths and misc options --->

7.5 自定义 src 路径
Paths and misc options --->

免责声明:本号所涉及内容仅供安全研究与教学使用,如出现其他风险,后果自负。
参考、来源:
https://www.wenxiaobai.com/6cd2e86a-b238-4f5e-984d-efb9a779150b
https://www.wenxiaobai.com/3bd75f4a-69b2-4d0f-a495-8821bacda2fd (小白AI:linux 设置swap)
https://www.wenxiaobai.com/58c89cd5-77b2-413a-9be3-b9ff85ee7326 (小白AI:内存不足被Kill, 回答右下角切换查看多个回答)
https://www.wenxiaobai.com/2fb18fa5-3bd0-497e-b09c-999941aedd72 (小白AI:export CT_TARBALLS_DIR=)
https://www.wenxiaobai.com/108753c6-013a-4194-8a01-ae8b6e49e893(小白AI:export CT_PREFIX_DIR=)
浙公网安备 33010602011771号