文章目录
- 前言
- 1. keil5下的默认编译工具链用的是哪个
- 2. Arm编译工具链和GCC编译工具链有什么区别吗?
- 3. Gcc交叉编译工具链的命名规范
- 4. 怎么下载gcc-arm编译工具链
- 参考资料
前言
我们在STM32上进行开发时,一般都是基于Keil5进行编译下载,Keil5中默认集成了arm的编译工具链。
这种方式的优点是简单方便,但是相对应的不够灵活。例如我们在实际开发过程中
经常一套代码需要在不同的RTOS和硬件平台上运行,为了更好的维护这套代码,我们一般会对RTOS和硬件驱动进行抽象,不同的RTOS和硬件平台分别是实现这些抽象。
然后通过编译时传入不同参数来确定最终要使用的RTOS和硬件平台。这种情况如果利用Keil5去直接编译就比较麻烦,因此我们需要借助makefile去组织和管理代码。这个时候就要用到另外一种编译工具链gcc了。
本文主要介绍如何使用gcc通过makefile去管理和构建项目。
1. keil5下的默认编译工具链用的是哪个
KEIL -> Project -> Manage -> Manage Project Items -> Folders/Extensions
目录下查找,我们默认用的应该是这个ARMCC。
另外我们可以通过勾选“User Gcc Compiler for ARM ”旁边的按钮,选中使用gcc进行编译,后面有个Folder是Gcc编译工具链的目录。默认情况下这个目录是不具有我们所需的编译工具链的,因此此时需要我们去网上下载Gcc编译工具链,然后替换成下载后的编译工具链所在的目录再进行编译。
2. Arm编译工具链和GCC编译工具链有什么区别吗?
ARM编译工具链和GCC编译工具链都是常用的编译工具链,用于将源代码编译成目标可执行文件或库。它们之间的主要区别在于以下几点:
支持架构:
ARM编译工具链专门针对ARM架构的处理器进行优化,提供了针对ARM架构的特定优化选项,以实现更好的性能。
GCC编译工具链是一个开源的通用编译工具链,支持多种架构,包括ARM、x86、MIPS等,因此不像ARM编译工具链那样可以提供特定于ARM架构的优化。
授权和商业支持:
ARM编译工具链通常由ARM公司提供,可能需要购买授权才能使用,同时提供相应的商业支持。
GCC编译工具链是开源免费的,可以自由使用和分发,但可能缺乏官方的商业支持,依赖于社区及第三方提供的支持。
优化和性能:
由于ARM编译工具链专门针对ARM架构进行优化,因此在编译ARM架构的代码时可能会实现更好的性能。
GCC编译工具链虽然功能强大且支持多种架构,但在特定架构上的优化可能没有ARM编译工具链那么精确。
工具版本和更新:
ARM编译工具链可能会更紧密地与ARM架构的最新特性和指令集保持同步,从而在新一代ARM处理器上获得更好的性能。
GCC编译工具链由于是开源项目,更新和版本发布可能相对较慢,不一定能够及时支持最新的ARM架构特性。
总的来说,选择使用ARM编译工具链还是GCC编译工具链取决于具体应用场景和需求。如果项目主要面向ARM架构,并追求更好的性能和支持,则ARM编译工具链可能是一个更好的选择;而如果需要跨多个架构或对成本和开放性有更高要求,GCC编译工具链可能更适合。
3. Gcc交叉编译工具链的命名规范
命令规范
arch [-vendor] [-os] [-(gnu)eabi]arch : 架构的意思,如ARM ,MIPSvendor: 工具链的提供厂商os: 支持的操作系统eabi:嵌入式应用二进制接口(Embedded Application Binary Interface)
abi: 计算机上的
arm gcc还分为是否支持操作系统
-
支持操作系统:
arm-none-linux-gnueabi
主要用于基于ARM架构的Linux系统,可用于编译 ARM 架构的 u-boot、Linux内核、linux应用等。基于GCC,使用Glibc库,经过 Codesourcery 公司优化过推出的编译器。 -
不支持操作系统
arm-none-eabi-gcc
用于编译 ARM 架构的裸机系统(包括 ARM Linux 的 boot、kernel,不适用编译 Linux 应用 Application),一般适合 ARM7、Cortex-M 和 Cortex-R 内核的芯片使用,所以不支持那些跟操作系统关系密切的函数。
4. 怎么下载gcc-arm编译工具链
下载地址
我们用的是Linux的虚拟机,所以需要下载基于Linux的gcc-arm-none-eabi工具链。
但是上方有两个不同架构平台的,分别是x86_64和aarch64。
可以通过在linux虚拟机上执行
uname -m
来确定当前使用的是什么架构,并下载对应架构的编译工具链。
参考资料
Windows中使用GCC编译STM32CubeMx生成的Makefile文件
arm 交叉编译器各种gcc 傻傻分不清楚:gnueabi,gnueabhf,none-eaib
深入理解工具链-自己搭建STM32编程IDE
arm-gnu编译工具链下载地址