良许Linux教程网 干货合集 STM32高级开发——gcc-arm-none-eabi

STM32高级开发——gcc-arm-none-eabi

gcc-arm-none-eabi的含义

当我提到gcc-arm-none-eabi时,很多人可能会问这是什么。首先,它是一个软件,准确地说,是一个编译器工具链。听起来跟Keil、IAR很像,是不是只需要安装后打开程序就能导入代码编译生成hex文件呢?答案显然是否定的。

对于很多国内从Keil和IAR这些IDE环境培养出来的开发者来说,很少理解IDE的本质含义。也许通过百度搜索,会发现IDE是集成开发环境。那么Keil、IAR这些IDE具体集成了哪些功能呢?下面我们来看看它们的功能:

  1. 文本编辑器

    用于编辑源代码文件,提供基础的文本编辑功能和语法高亮等功能。

  2. 编译器

    用于将源代码文档编译和链接,生成可在单片机上执行的机器码格式文件。

  3. 调试器

    用于连接单片机调试器硬件(如:J-Link、ST-Link等),实现单步执行、寄存器提取、资源监测等调试功能。

我们可以看到,在商业化的软件如Keil等,他们集成了很多完善的功能在一个带有界面的程序中,因此被称为IDE即集成开发环境。这样做带来了很大的便利,但对于一些新手或刚入职的工程师来说,这样的软件可能会让他们远离实际编写程序的过程,缺少了对编译器和编译过程的理解,同时在集成化的过程中也缺少了很多可选的高级功能。

通过上文的介绍,我们应该已经理解了一个集成开发环境的构成。而gcc-arm-none-eabi所提供的是工具链中的编译器功能。在嵌入式开发领域,我们通常将它称为工具链(工具链:由编译器、连接器、解释器和调试器组成)。关于调试功能的介绍比较复杂,我们之后再来讲解。

gcc-arm-none-eabi是GNU项目下的软件,是一个面向裸机ARM的编译器。那么具体来讲,gcc-arm-none-eabi包含哪些功能?如何安装和使用?接下来将继续阐述。

下载安装gcc-arm-none-eabi

首先打开gcc-arm-none-eabi项目的官网:

https://launchpad.net/gcc-arm-embedded/+download

在写这篇文章时它的软件版本已更新到了5_4-2016q3 。我们直接点击下面Linux版进行下载。在下载的过程中建议大家去网站的首页看看,随便逛逛了解一下gcc-arm-none-eabi。

image-20240108190015238
image-20240108190015238

在下载完成我们在用户目录下,并新建一个文件夹名叫:

**Library,其实叫什么名字都行,只是以后我们所有的库和工具都会放在这里,所以就起名叫这个了,然后把下载好的压缩包放入Library文件夹中,并解压(右键压缩包选择解压到此处*)。然后我们就可以删除压缩包了,或者放个地方存着以防以后还要用。

image-20240108190018722
image-20240108190018722

随后双击解压后的文件进入 gcc-arm-none-eabi-5_4-2016q3 -> bin

这个文件夹中的便是软件的执行文件了,不过他们都是通过指令行调用的,但是在终端调用之前,我们需要把软件的路径置于系统的环境变量之下,这样系统才能过直接调用程序,否则我们每次执行都需要输入长长的路径系统才能够找到软件。

打开终端输入:

$ sudo gedit /etc/profile
1

修改这个文件来添加我们的路径,ubuntu的环境变量文件有好多个,他们都在不同的时候起作用,具体的讲解可以看看这篇文章:Ubuntu系统环境变量详解,里面把这个问题讲的很清楚了,这个文章中列举的文件后几个也许你在自己的系统中找不到,但那只是系统没有创建设定,如果新建一个同样名称的文件他们依然是会起作用的。

再打开profile文件后我们在其末尾添加:

export PATH=$PATH:/home/yangliu/Library/gcc-arm-none-eabi-5_4-2016q3/bin
1

此处export意为设置变量,”PATH”是一个系统默认的内置变量即系统路径。”$PATH”,意为取值PATH变量。“:”代表拼接,用它来分割多个路径。后面的即为我们编译器执行文件的路径,这个根据大家自己的路径设置,可以随便点开一个执行文件查看他的路径复制粘贴即可。此处这行设置意为:将后面的路径与PATH之前的值合并,并更新给PATH,即将一段路径添加入PATH路径内。

image-20240108190022401
image-20240108190022401

随后点击保存。在终端中输入指令更新系统路径。

source /etc/profile
1

或,注意下面这个指令“.”后有空格,其效果与source 指令相同。

$ . /etc/profile
1

为了查看我们是否已经成功设置路径,在终端中输入:

$ arm-non
1

点击Tab看看系统是否自动补全为:arm-none-eabi-

$ arm-none-eabi-
1

如果补全了,那么说明我们已经设置成功了,我们此时可以直接键入指令来调用工具链的程序。如果没有,说明你上面的环境变量设置步骤有误请重新检查自己的操作。

双击两下Tab则会吧所有的工具链工具显示出来。

image-20240108190025975
image-20240108190025975

同时如果你安装的是64位的ubuntu版本,则需要安装lsb-core才能正常使用这个工具链,使用指令:

$ sudo apt-get install lsb-core
1

随后我们输入指令,来再次欣赏一下自己的成果,这个条指令意为显示工具链的版本。(是不是很长,记得我们的小技巧吗?只要输入”arm-”再按Tab就能补全指令啦,是不是很方便?)

 $ arm-none-eabi-gcc -v
1
image-20240108190029188
image-20240108190029188

之后重启一下,让系统更新全局环境变量。

注意以上操作,从source 开始请使用一个终端,不要关闭,否则可能出错:无法找到工具链。实际按理说source指令和重启的效果是一样的,但在我安装的过程中却出错了,重启之后才变正常了。

还有个检查的方法就是,使用指令查看当前系统PATH变量的值,查看是否PATH中是否有刚刚设置的路径:

echo $PATH
1
image-20240108190032232
image-20240108190032232

实际上Ubuntu的软件源中是有gcc-arm-none-eabi的,可以使用sudo apt-get install gcc-arm-none-eabi来安装,但是由于其版本一般落后于官方release 的版本故没有采用这个方式安装。

gcc-arm-none-eabi工具链工具使用方法及介绍

在我们安装好gcc-arm-none-eabi后,我们可以在终端中输入指令来调用gcc-arm-none-eabi的功能了,那么这个工具链下茫茫多的执行软件都是做什么的呢,可以看到在路径下一共有28个工具。接下来我们就来介绍一下我们将会用到的工具和他的功能及使用方式。

  • arm-none-eabi-gcc

    这个工具为c语言编译器,可以将*.c文件转化为.o的执行文件。如果大家不明白,.o*是什么作用,建议大家去看一些关于编译过程和原理的介绍。

    它的使用方法是,在终端中cd到工作目录,如编译当前目录下的hello.c文件,生成hello.o文件:

    arm-none-eabi-gcc -c hello.c
    1
    
  • arm-none-eabi-g++

    这个工具为c++语言编译器,可以将*.cpp文件转化为.o*的执行文件,使用方式如上。

  • arm-none-eabi-ld

    这个工具为链接器即最后链接所有 .o 文件生成可执行文件的工具。一般我们不使用 arm-none-eabi-ld 的指令调用它,而是通过使用arm-none-eabi-gcc 来调用,因为前者对c/cpp文件混合型生成的.o文件们的支持性不好,所以官方的说明书中也推荐使用arm-none-eabi-gcc 指令来代替arm-none-eabi-ld,如下:

    arm-none-eabi-gcc -o  hello  hello.o
    1
    
  • arm-none-eabi-objcopy

    此工具将链接器生成的文件转化为bin/hex等烧写的格式,用以下载进入单片机。如下:

    arm-none-eabi-objcopy hello hello.bin
    1
    
  • arm-none-eabi-gdb

    工具链中的调试器,将它连接到调试器硬件产生的网络端口,就可以进行硬件和代码的调试了。GDB是gnu下一个独特的调试软件,它具有很多自己的特性,也许大家无法想象使用命令行调试的景象,但是之后我们会看到它的强大。

当然这一系列的指令只是一个简单且包含用法错误的例子,实际的使用中我们要输入很多设置参数,才能适配我们的单片机,所以这个样例只是为了让大家理解工具链的调用方式,在我们之后的工程编写中会为大家介绍他们详细的用法。

实际的指令时这样的:

image-20240108190035530
image-20240108190035530

总结

至此,我们的工具链便介绍完成了,大家目前可能会有些疑问,难道编译过程就那么多命令行一个一个输入吗?一个一个文件手动编译?GDB又要怎么通过计算机网络端口连接到调试器呢?

以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !

137e00002230ad9f26e78-265x300
本文由 良许Linux教程网 发布,可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。
良许

作者: 良许

良许,世界500强企业Linux开发工程师,公众号【良许Linux】的作者,全网拥有超30W粉丝。个人标签:创业者,CSDN学院讲师,副业达人,流量玩家,摄影爱好者。
上一篇
下一篇

发表评论

联系我们

联系我们

公众号:良许Linux

在线咨询: QQ交谈

邮箱: yychuyu@163.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部