一、在你的Ubuntu系统是最新的前提条件下,只需要执行如下命令就可以成功安装:
sudo apt-get install gcc-arm-linux-gnueabi
安装完成之后,直接在终端中键入:
arm-linux-guneabi-gcc -v
可以看到具体的版本信息arm-linux-gnueabi-5.4.0 20160609。
二、另外我们也可以通过官网的下载包进行安装:
官网:https://launchpad.net/gcc-arm-embedded
https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads
ftp://ftp.gnu.org/gnu/gcc/
https://packages.ubuntu.com/search?keywords=gcc-5-arm-linux-gnueabihf
目前最新的包:gcc-arm-none-eabi-9-2019-q4-major-x86_64-linux.tar.bz2(下载Linux版本)
如果是Windows下载,需要先把安装包放到Ubuntu 目录下:
先把安装包放在share文件夹,然后再通过
CP /mnt/hfgs/work/gcc-arm-none-eabi-9-2019-q4-major-x86_64-linux.tar.bz2 /home/mahui/tools
如果不想复制,可以直接解压到/home/mahui/tools目录下:
sudo tar -zxvf gcc-arm-none-eabi-9-2019-q4-major-x86_64-linux.tar.bz2 -C /home/mahui/study
在/home/mahui目录下新建目录tools,注意mahui是我的用户名,以下以xxx替代:
mkdir tools
sudo chmod 777 arm //开通目录权限
保存到/home/mahui/tools/目录下,然后进行解压:
sudo tar -xjvf gcc-arm-none-eabi-5_2-2015q4-20151219-linux.tar.bz2
解压完成之后,将编译bin文件导入系统路径,打开/root/.bashrc和/home/xxx/.bashrc文件增加如下信息:
export PATH=$PATH:/home/xxx/tools/gcc-arm-none-eabi-5_2-2015q4-20151219-linux/bin
然后让路径生效
source /root/.bashrc
source /home/xxx/.bashrc
同样在终端中键入arm-linux-guneabi-gcc -v就可以看到版本信息。
因为是方法一安装的交叉编译工具,所以,方法二未试验。
arm-linux-gcc 和 arm-none-linux-gnueabi-gcc 的区别:
1)一般来说 arm-linux-gcc 是 arm-none-linux-gnueabi 的一个软链接。
可用 ls -l 命令查看链接对象,用 ls -i 命令查看 inode 数值。
2)arm-none-linux-gnueabi-gcc 只是告诉你支持eabi的功能,你当然也可以把这个名字改成arm-linux-gcc执行了,但是arm-linux-gcc的话是不可以直接改成arm-none-linux-gnueabi-gcc的,因为我们不知道arm-linux-gcc是什么形式的。
现在的arm linux toolchain大部分都是arm-none-linux-gnueabi-gcc类型的,但是有的人家为了方便,就软链接成arm-linux-gcc
因为我是执行命令Ubuntu自动安装的arm-linux-gnueabi,所以要查找该程序所在目录位置,whereis arm-linux-gnueabi-gcc
arm-linux-gnueabi-gcc: usr/bin/arm-linux-gnueabi-gcc ,说明在usr/bin文件目录下。
cd ./usr/bin
可以看到该目录下有好多个以 arm-linux-gnueabi-xxx 的文件,以及软链接,由文件大小可以辨认软链接程序是哪个程序的快捷方式。
sudo ln -s arm-linux-gnueabi-gcc arm-linux-gcc 就会生成软链接 arm-linux-gcc了。
sudo ln -s arm-linux-gnueabi-as arm-linux-as 用于把汇编程序编译生成二进制文件
sudo ln -s arm-linux-gnueabi-g++ arm-linux-g++
sudo ln -s arm-linux-gnueabi-ld arm-linux-ld 用于多个目标文件链接成一个可执行文件
常用交叉编译工具链:
4.1 交叉编译器 arm-linux-gcc
和X86平台下的gcc的基本用法用法是完全一样的;不同之处:标准的gcc所引用的头文件路径为 /usr/include/stdio.h,arm-linux-gcc所引用的头文件路径为其安装路径下,如 /usr/local/armtools/4.5.1/bin/..
4.2 交叉链接器 arm-linux-ld
arm-linux-ld命令是ARM平台下的交叉链接器,把程序链接成可以在ARM平台下运行。
用法: arm-linux-ld -Tled.lds led.o -o led.elf
把led.o链接成led.elf文件;led.lds是链接器脚本,
4.3 交叉elf文件工具 arm-linux-readelf
查看.elf格式文件: arm-linux-readelf -a led.elf
-a 参数是查看.elf文件的所有内容
注意:编译的程序运行不了有两个原因:一个是要看运行平台对不对,第二个是要看处理器的大小端跟编译的程序的大小端是否对应,可以使用arm-linux-readelf -a xxx.elf 命令查看编译出来的程序大小端情况和程序运行平台。
4.4 交叉反汇编器 arm-linux-objdump
把hello.c文件编译成hello可执行文件:arm-linux-gcc hello.c -o hello
用法:arm-linux -objdump -D -S hello >dump
把hello可执行文件反汇编后输入保存到dump文件中。
-D -S 是反汇编参数,>dump 把hello反汇编后的内容保存到dump文件中
4.5文件格式转换器 arm-linux-objcopy
使用arm-linux-objcopy命令可以把ELF格式的文件转换成二进制文件。
文件格式转换的原因:elf格式的文件不能直接在ARM上运行(ARM只能运行二进制格式的文件);
用法:arm-linux-objcopy -O binary led.elf led.bin
把led.elf格式的文件转换成led.bin二进制文件。
4.6库管理器arm-linux-ar
arm-elf-ar将多个可重定位的目标模块归档为一个函数库文件。采用函数库文件,应用程序能够从该文件中自动装载要参考的函数模块,同时将应用程序中频繁调用的函数放入函数库文件中,易于应用程序的开发管理。arm-elf-ar支持ELF格式的函数库文件.