Ubuntu中gcc-arm-none-eabi的安装、移除和版本切换

简介: Ubuntu中gcc-arm-none-eabi的安装、移除和版本切换

前言

在 Ubuntu 中开发基于 ARM 架构的 STM32 芯片,需要安装交叉编译器 gcc-arm-none-eabi编译代码,那么什么是交叉编译器呢?

Ubuntu 自带的 gcc 编译器是针对 X86 架构的!而我们现在要编译的是 ARM 架构的代码,所以我们需要一个在 X86 架构的 PC 上运行,可以编译 ARM 架构代码的 GCC 编译器,这个编译器就叫做交叉编译器,总结一下交叉编译器就是:

(1)它是一个 GCC 编译器;

(2)这个 GCC 编译器是运行在 X86 架构 PC 上的;

(3)这个 GCC 编译器是编译 ARM 架构代码的,也就是编译出来的可执行文件是在 ARM 芯片上运行的。

交叉编译器中“交叉”的意思就是在一个架构上编译另外一个架构的代码,相当于两种架构“交叉”起来了。


一、GNU Arm Embedded Toolchain简介

GNU Arm Embedded Toolchain 是用于 C、C++ 和汇编编程的即用型开源工具套件。GNU Arm 嵌入式工具链适用于 32 位 Arm Cortex-A、

Arm Cortex-M 和 Arm Cortex-R 处理器系列。GNU Arm 嵌入式工具链包括 GNU 编译器 (GCC),可直接从 Arm 免费获得,用于在 Windows、Linux 和 Mac OS X 操作系统上进行嵌入式软件开发。

二、gcc-arm-none-eabi安装

Ubuntu 16.04 之后的软件源是自带 gcc-arm-none-eabi 的,只是自动安装后的版本不一定符合要求。常用的安装方式有以下三种:

2.1 自动安装

提示:网络环境比较差的情况下,不推荐自动安装(安装时间以小时为单位)。

(1)在 Ubuntu 用户目录下打开终端,输入命令;


使用 Ubuntu 自带的 APT 下载工具安装 gcc-arm-none-eabi。

sudo apt-get install gcc-arm-none-eabi

(2)Ubuntu 16.04

系统没有安装 gcc 交叉编译器前,我们获取 gcc 版本,提示软件未安装。输入安装命令和密码等待安装完成。


33a4ff4040b041669a042100c017f891.png

安装完成后,再输入命令获取版本号,可以在最后一行看到版本号。

arm-none-eabi-gcc -v


b6b2af78fa5f4b51a0f8e0d3a40e19c9.png

(3) Ubuntu 18.04

系统没有安装 gcc 交叉编译器前,我们获取 gcc 版本,提示软件未安装。输入安装命令和密码等待安装完成。


c5f70550be8e41ddbbcfdfef2ab1ba84.png

安装完成后,再输入命令获取版本号,可以在最后一行看到版本号。

在不添加其它 PPA 的情况下,Ubuntu16.04 和 Ubuntu18.04 都可以自动安装,只是默认版本号高低不同。Ubuntu16.04下 gcc 版本号:gcc version 4.9.3 20150529;Ubuntu18.04下 gcc 版本号:gcc version 6.3.1 20170620。

2.2 添加新的PPA进行安装

提示:网络环境比较差的情况下,不推荐 PPA 安装(安装时间以小时为单位)。

(1)在 Ubuntu 用户目录下打开终端,输入命令,添加替代 PPA

sudo add-apt-repository ppa:team-gcc-arm-embedded/ppa

1fa480ac51ef4cba8471ff922c2b6a77.png

(2)更新 PPA;

sudo apt-get update


5fdf2230c94e46fb87e70ee2bafda529.png(3) 安装工具链;

sudo apt-get install gcc-arm-embedded

(4)如果需要移除已安装的工具链;(非需不执行)

sudo apt-get remove gnu-arm-embedded

(5)如果要更新工具链,只要重复(2)、(3)步骤即可;(非需不执行)

(6)如果 gcc-arm-none-eabi 报告冲突的错误消息,这可能是从 4.x 升级到 5+,输入命令卸载旧版本;(非需不执行)

sudo apt-get remove gcc-arm-none-eabi

(7)再输入命令,安装交叉编译器;

sudo apt-get install gcc-arm-none-eabi


如果仍有问题, 参考官方网站,有详细的教程:https://launchpad.net/~team-gcc-arm-embedded/+archive/ubuntu/ppa

2.3 手动安装(推荐)

2.3.1 软件下载

(1)官网下载:https://developer.arm.com/downloads/-/gnu-rm


e57e885286b64a068486e9c7ea41e159.png

这里选择了 6-2017-q2-update,可以根据自己的需要下载其它版本。

(2)BaiDuYun:https://pan.baidu.com/s/1d_vAb5g4FPtLBt1El2nVlQ    提取码:j2wk

2.3.2 安装步骤

进入软件包下载目录,打开终端,输入命令;


ccbf8708607d492087316b2aeb32ff37.png

(1)改变当前目录到指定目录,并保存当前的目录在堆栈顶端;

(1) pushd .



(2)解压下载的软件包(等待解压完成,生成新的文件夹,用 ls 命令可以查看);

(2) tar -jxf gcc-arm-none-eabi-6-2017-q2-update-linux.tar.bz2


(3)将解压出来的软件包(gcc-arm-none-eabi-6-2017-q2-update)移动到 Ubuntu 根目录下的 opt 文件夹中;

(3) sudo mv gcc-arm-none-eabi-6-2017-q2-update /opt

(4)添加环境变量到用户目录下的 .profile 文件(该文件是隐藏文件,在用户目录界面中通过 Ctrl + h 快捷方式可以显示隐藏文件);


(4) exportline="export PATH=/opt/gcc-arm-none-eabi-6-2017-q2-update/bin:\$PATH"

(5)检测环境变量是否添加成功;

(5) if grep -Fxq "$exportline" ~/.profile; then echo nothing to do ; else echo $exportline >> ~/.profile; fi

添加成功不会有输出;如果添加失败,会输出提示。

(6)使能环境变量;

(6) source ~/.profile

(7)改变当前目录,跳转到堆栈顶端保存的目录,并将堆栈顶端的目录删除;

(7) popd

注意:如果安装其他版本的 gcc 编译器,在命令(2)、(3)、(4)中,要把压缩包名和解压的文件名做相应替换。

(8)检查交叉编译器是否安装成功,输入以下命令;

(8) arm-none-eabi-gcc -v

f30225e8ff7f4c9b8ca37d0408d1bb70.png

输入命令后,最后一行打印了我们刚才安装的交叉编译器的版本信息,表示安装成功。

三、gcc-arm-none-eabi移除

3.1 自动安装的卸载

(1)用户目录下打开终端,输入卸载命令;

sudo apt-get remove gcc-arm-none-eabi

d15f329483054aac9c51592e330f4580.png

卸载完成后,再获取版本号,已经被卸载,找不到文件。

3.2 手动安装的移除

(1)用户目录下打开终端,输入移除命令;

sudo rm -rf /opt/gcc-arm-none-eabi-6-2017-q2-update/

(2)打开环境变量文件 .profile,删除或屏蔽编译器安装路径;

sudo gedit .profile

b1b7cc60a2f441998466c9886152c390.png

快捷键 Ctrl + s 保存 .profile 文件,点击“X”退出文件。

(3)输入命令使能环境变量;

source ~/.profile

(4)再输入命令,查询版本号;

如果 .profile 文件中,没有手动安装的 gcc 编译器路径,那么 gcc 编译器版本切换回自动安装的版本(前提:没有卸载自动安装的 gcc 编译器)。

image.png

四、gcc-arm-none-eabi版本切换

4.1 切换原理简介

有时我们会遇到:不同项目工程所需的 gcc-arm-none-eabi 版本也不同。如何快速有效的切换 gcc 交叉编译器的版本呢?

通过上面的手动安装步骤,我们知道 gcc 交叉编译器最终是否有效,取决于环境变量文件 .profile 中的安装包路径是否被 Ubuntu 系统“知晓”。所以我们使用不同的环境变量,等价于使用不同版本的交叉编译器。

4.2 切换步骤

前提:Ubuntu 系统中,已经安装了2个以上不同版本的 gcc-arm-none-eabi。

(1)用户目录下打开终端,输入命令,查看当前 gcc 编译器版本;

arm-none-eabi-gcc -v

(2)输入命令打开环境变量文件 .profile;

sudo gedit .profile

(3)将不需要的版本环境变量屏蔽,留下需要的版本环境变量即可;

方法:在需要屏蔽的版本路径前加“#”号字符即可。

这里我们保留 5_4 版本,屏蔽 6-2017-q2 版本。快捷键 Ctrl + s 保存 .profile 文件,点击“X”退出文件。

(4)输入命令使能环境变量;

source ~/.profile

(5)此时再输入版本查看命令,可以看到版本切换成功;

(6)如果版本切换失败,可尝试重启 Ubuntu;

reboot

(7)如果 Ubuntu 系统中有自动安装的 gcc 交叉编译器,那么在 .profile 文件中,使能手动安装的 gcc 编译器路径,优先级高于自动安装的编译器版本。

所以在自动安装和手动安装混合的 Ubuntu 系统中,当需要自动安装的 gcc 编译器版本时,屏蔽 .profile 文件中所有手动安装的编译器路径,再重启系统即可;当需要手动安装的 gcc 编译器版本时,使能 .profile 文件中所需手动安装的编译器路径即可。

总结

以上就是在 Ubuntu 系统中 gcc-arm-none-eabi 交叉编译器的三种安装方法介绍,这里主要推荐使用第三种安装方法:手动安装,方便后续版本管理和版本切换。

还讲解了在 Ubuntu 系统中,如何移除 gcc 交叉编译器(自动安装和手动安装 )、如何方便快捷的切换 gcc 交叉编译器的版本。

相关文章
|
3天前
|
Ubuntu Python
Ubuntu 安装Python3.8
Ubuntu 安装Python3.8
17 0
|
1天前
|
Ubuntu Unix Linux
在Ubuntu安装RPM文件
Ubuntu使用`apt`和`alien`工具安装软件。`deb`是Ubuntu的标准包格式,但通过`alien`可转换及安装`RPM`包。首先确保启用`Universe`源,然后安装`alien`。转换RPM包为DEB包,运行`sudo alien package_name.rpm`,接着用`sudo apt install package_name.deb`安装。直接安装RPM包可使用`sudo alien -i package_name.rpm`,但这种方法不推荐,可能导致依赖性冲突和系统不稳定。
20 10
|
1天前
|
存储 Ubuntu 网络协议
从Ubuntu-base构建ubuntu rootfs系统(以x86_64和arm为例)
本文介绍了基于Ubuntu-base构建自定义Linux系统的过程,适合嵌入式设备。Ubuntu-base是最小文件系统,包含软件包管理器,可以从Ubuntu源轻松安装软件。文章详细阐述了构建步骤,包括准备宿主系统(确保使用与目标系统相同架构的Ubuntu系统)、创建和挂载分区、配置Ubuntu源、设置DNS、添加用户配置、进入chroot环境以及安装软件(如内核、X-window系统等)。对于arm架构,还提供了通过qemu在X86_64系统上构建arm rootfs的方法。整个过程强调了定制和灵活性,适合对Linux系统有深入了解的开发者。
6 0
|
1天前
|
Ubuntu
ubuntu软件包安装
ubuntu软件包安装
|
3天前
|
分布式计算 Ubuntu Java
PySpark安装及WordCount实现(基于Ubuntu)
现在,你已经成功安装了PySpark并实现了WordCount示例。你可以根据实际需求修改脚本以处理不同的文本数据。
9 0
|
5天前
|
Ubuntu 应用服务中间件 nginx
ubuntu编译安装nginx及安装nginx_upstream_check_module模块
以上是编译安装Nginx和安装 `nginx_upstream_check_module`模块的基本步骤。根据你的需求和环境,你可能需要进一步配置Nginx以满足特定的要求。
18 3
|
6天前
|
存储 Linux Docker
arm安装docker与docker-copose
现在,你已经成功在ARM架构的设备上安装了Docker和Docker Compose。你可以使用它们来管理容器和容器化应用程序。请注意,ARM设备上的Docker支持可能受到限制,某些容器可能不兼容。确保你的容器映像支持ARM架构,以便在ARM设备上正确运行。
21 6
|
7天前
|
资源调度 JavaScript Ubuntu
Yarn介绍及快速安装Debian/Ubuntu Linux
现在,你已经成功安装了Yarn,可以在你的JavaScript项目中使用它来管理依赖。
46 3
|
7天前
|
Ubuntu
Ubuntu20.04安装SNMP服务
至此,你已经成功在Ubuntu 20.04上安装了SNMP服务。你可以使用SNMP工具来监视和管理你的系统,或者将其集成到网络管理系统中。
22 3
|
10天前
|
Ubuntu 关系型数据库 MySQL
Ubuntu 20.04 + mysql8 安装以及配置大小写不敏感
Ubuntu 20.04 + mysql8 安装以及配置大小写不敏感