为嵌入式 Linux 板卡挑选最佳交叉编译器

如何为你的嵌入式Linux板卡选择合适的交叉编译器版本
为什么使用交叉编译器

交叉编译器是在主机上为不同架构/系统生成可执行文件的 GCC,避免在目标板上编译,解决性能、依赖和工具链缺失问题。

本文讲述的嵌入式Linux开发,主机一般是x86-64架构的电脑,嵌入式Linux板卡这里选择的是arm Cortex-Axx架构的的CPU。

1 确定是硬件浮点还是软件浮点

该特性在构建Linux镜像的时候确定,现在可以通过Linux内置的工具查看这项信息。
这里以orangePi PC作为示例;注:[板卡已经安装了基于ubuntu 2004构建的镜像,grep是Linux发行版自带程序]

orangepi@orangepipc:/usr/bin$ file ./grep                                              
./grep: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3,BuildID[sha1]=57c72387cc51f3bcc2859fd7e062f197b0ee5b
92, for GNU/Linux 3.2.0, stripped

通过这些信息可以发现,/lib/ld-linux-armhf.so.3 是以 hf 结尾的,确定是硬件浮点。

2 确定板卡的glib库版本

方法1: ldd的版本,lddglibc的一部分,这里可以看到 板卡Linux的glibc的版本是 2.31

orangepi@orangepipc:/lib$ ldd --version 
ldd (Ubuntu GLIBC 2.31-0ubuntu9.1) 2.31
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.

方法2: 运行 libc.so.6,这个是 glibc的核心库文件

orangepi@orangepipc:/lib$ /lib/arm-linux-gnueabihf/libc.so.6                             
GNU C Library (Ubuntu GLIBC 2.31-0ubuntu9.1) stable release version 2.31.Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.Compiled by GNU CC version 9.3.0.libc ABIs: UNIQUE ABSOLUTE For bug reporting instructions, please see:
<https://bugs.launchpad.net/ubuntu/+source/glibc/+bugs>.

方法3: getconf工具

orangepi@orangepipc:/lib$ getconf GNU_LIBC_VERSION                                       
glibc 2.31   

结论:这里看出板卡的Linux系统自带的板卡glibc版本是 2.31,并且,这个系统镜像是由GCC9.3.0编译器构建的。

3 现在可以确定要找的GCC编译器版本

根据 板卡的Glibc=2.31,找到使用小于或等于该glibc 版本的交叉编译器;
结论: 选择的交叉编译器版本应当小于或等于 gcc-arm-10.2-2020.11-x86_64-arm-none-linux-gnueabihf.tar.xz
在这里插入图片描述
版本注释里说明了相关信息。
在这里插入图片描述
解释:交叉编译器名称中,前缀 none与 前缀 linux 的区别:

前缀全称示例系统调用封装用途场景典型文件
nonearm-none-eabi-gcc不带裸机、RTOS、BootLoaderlibnosys.a
linuxarm-none-linux-gnueabihf-gccLinux 用户空间程序libc.so.6
结论:

先看板卡的glibc,再看交叉编译器使用的glibc;板卡的glibc版本 ≥ 交叉编译器的glibc版本
找到编译器:gcc-arm-10.2-2020.11-x86_64-arm-none-linux-gnueabihf.tar.xz
官网下载地址:ARM-GNU-Toolchain

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值