在嵌入式Linux开发中,无论是应用还是驱动开发,一般都是采用交叉编译的方式,对arm平台进行开发。在很多时候想要平台的可以运行文件都是通过linux编译好后移植到相应的平台上实现再次开发的,但是通过交叉编译环境生成的文件在linux。这样情况下就想要用到相应的交叉编译工具链,来完成程序的编译,生成相应的可执行文件,以适配目标平台的系统架构。
一、获取交叉编译的工具包
我这里使用的是arm-linux-gnueabihf-gcc-6.5.0 的版本来编译u_boot
获取方法 1、官网下载:https://releases.linaro.org/components/toolchain/binaries
下载时注意arm,armel是小端字节序编译器,armeb是大端字节序编译器
***********************************************************************************************************
2025年11月补充arm编译器8.2-10.3:
Downloads | GNU-A Downloads – Arm Developer
下载选择:
AArch32(32位ARM架构)
1. AArch32 bare-metal target
含义:针对32位ARM架构的裸机系统
特点:无操作系统环境、直接运行在硬件上、用于嵌入式系统、固件、bootloader等、不依赖任何操作系统库
2. AArch32 GNU/Linux target with hard float
含义:针对运行GNU/Linux的32位ARM系统,使用硬件浮点单元
特点:运行在Linux操作系统上、使用硬件FPU进行浮点运算、性能更好(相比软件浮点)、使用特定的ABI(如armhf)、AArch64(64位ARM架构)
3. AArch64 bare-metal target
含义:针对64位ARM架构的裸机系统
特点:无操作系统环境、直接访问硬件、用于高性能嵌入式系统、服务器固件等
4. AArch64 GNU/Linux target
含义:针对运行GNU/Linux的64位ARM系统
特点:标准的64位ARM Linux环境、使用系统调用和共享库、用于应用程序开发
5. AArch64 GNU/Linux big-endian target
含义:针对大端字节序的64位ARM Linux系统
特点:使用大端字节序(big-endian)、与网络字节序一致、在某些特定领域使用(如网络设备)
Bare-metal 嵌入式系统、固件、RTOS
GNU/Linux 应用程序、用户空间程序
Hard float 需要高性能浮点运算的应用
Big-endian 网络设备、协议处理
***********************************************************************************************************
2、板卡自带
3、找老大、组长、老师要相应的版本文件
二、将相应的文件移动到linux文件系统中解压(不要使用windos的解压工具解压,不适配)
tar -xvf gcc编译工具链压缩包名称
三、解压完成后可以更改为短一点的名字
mv 编译工具文件名称 版本名称
cd 6.5.0
lib一般放库文件,也就是后缀.lib的
include 一般包含头文件目录
bin表示binary目录,一般都是dll,exe等
然后 进入bin文件 cd bin
获取当前文件的绝对路径
pwd
四、设置全局变量
sudo vim .bashrc
在最后面添加:
PATH=/home/tools/cross-compiler/gcc-linaro-6.5.0-2018.12-i686_arm-linux-gnueabihf/bin:$PATH
中间的地址是上面获取的绝对地址,看情况更改
重新启动环境变量配置:
source .bashrc
最后通过
arm-linux-gnueabihf-gcc -v
然后在最下面就可以看见当前安装的交叉编译版本了。
ps:[P&S]交叉编译工具链配置好环境变量后依然找不到文件
当你的环境是新的时候设置了相关的环境变量还是没有版本号的时候
输入 arm-linux-gcc -v,
提示找不到
bash: /home/tools/cross-compiler/gcc-linaro-6.5.0-2018.12-i686_arm-linux-gnueabihf/bin/arm-linux-g++: No such file or directory
这样的错误
分析:是你当前的系统没有安装32位程序库
解决方法:
sudo apt-get install lsb-core
如果安装了这个还是有问题,还是环境问题再次安装其他的支持库
sudo apt-get install lib32ncurses5
sudo apt-get install lib32z1
最后再次使用:arm-linux-gnueabihf-gcc -v
一般就没啥问题了。
***********************************************************************************************************
2025年11月补充arm编译器:
其实交叉编译本质就是使用Ubuntu,去运行GCC编译出适合你板卡的可执行程序,一般内核构建的编译器和应用编译器需要统一版本。
常见的使用方法:
1、解压到系统文件后直接到bin文件下运行,所需的库即可:

如图所示,在改目录下都是X68的Ubuntu的可执行程序,然后将你的代码转换为对应版本的可执行程序。
如下所示,直接使用:

2、设置临时环境变量
3、设置自驱动环境变量
***********************************************************************************************************
文章讲述了在嵌入式Linux开发中,如何获取和配置arm-linux-gnueabihf-gcc交叉编译工具链,包括从官网下载、解压、重命名、设置环境变量等步骤,并解决了在新环境中设置环境变量后仍找不到文件的问题,提到了可能缺少32位程序库的解决方案。
1881

被折叠的 条评论
为什么被折叠?



