【嵌入式】Linux开发工具arm-linux-gcc安装及使用

article/2025/11/9 10:19:15

arm-linux-gcc

  • 知识架构及层次 — 程序编译及调试
  • 嵌入式交叉编译器安装配置
    • 主机目标板开发模式
    • ARM微处理器/Linux系统下编译器
    • 编译器下载及安装
  • arm-linux-gcc工具使用
    • `-E`
    • `-S`
    • `-c `
    • `-o`
    • `-include file`
    • `-I dir`
    • `-I`
    • `-iprefix prefix` 和 `-iwithprefix dir`
    • `-l库名 `
    • `-L目录`
    • gcc 优化
  • 课后作业

Linux开发工具make及makefile设计

知识架构及层次 — 程序编译及调试

在这里插入图片描述

嵌入式交叉编译器安装配置

主机目标板开发模式

在这里插入图片描述

  • 宿主机
    执行编译、链接嵌入式软件的计算机

  • 目标机
    运行嵌入式软件的硬件平台

  • “本地”编译器
    用来生成在与编译器本身所在的计算机和操作系统(平台)相同的环境下运行的目标代码,例如 Windows 环境生成 Windows 目标代码。

  • 交叉编译器
    用来生成在其它平台上运行的目标代码,例如 Windows 环境生成 Linux 目标代码。

ARM微处理器/Linux系统下编译器

编译器命名规则
arch [-vendor] [-os] [-(gnu)eabi]-工具名称

  • arch – 体系架构,如 ARMMIPS
  • vendor – 工具链提供商,CPU名称或者开发板厂商
  • os – 目标操作系统,如 linux
  • (gnu) eabi – 使用的库,包括 glibceabiuclibc 三种

例: arm-none-eabi-gcc

  • 用于编译 ARM 架构的裸机系统

例:arm-none-linux-gnueabi-gcc

  • 用于基于 ARM 架构的 Linux 系统,基于GCC,使用 Glibc 库
    经过Codesourcery 公司优化过推出的编译器,用于编译 ARM 架构的 u-boot、Linux内核、linux应用等。

几个重要目录:
编译器工具所在目录:FriendlyARM/toolchain/4.9.3/bin

在这里插入图片描述

编译器头文件所在目录:FriendlyARM/toolchain/4.9.3/arm-cortexa9-linux-gnueabihf/sys-root/usr/include

库文件所在目录:FriendlyARM/toolchain/4.9.3/arm-cortexa9-linux-gnueabihf/sys-root/usr/lib

编译器下载及安装

可以去官网下载,http://www.linaro.org/downloads/
但是速度比较慢,可以直接用我下载好的。
链接: https://pan.baidu.com/s/1jL_G6kbTC9h_bF8HHXBWxw 提取码: 67u4

1.先把下载好的安装包移动到根目录下的tmp目录中(/tmp)

2.使用tar命令解压安装包,即在Terminal中输入以下命令:(前面的sudo表示使用root权限执行该命令)

sudo tar -xjvf /tmp/arm-linux-gcc-4.6.4-arm-x86_64.tar.bz2 -C /

注意是大写的字母C,此命令会把安装包解压到根目录下的opt的TuxamitoSoftToolchains里面(/opt/TuxamitoSoftToolchains)

3.解压完成后,再在(/usr/local)中创建一个新目录arm,即在Terminal中输入以下命令:

sudo mkdir /usr/local/arm

创建arm目录成功后,还需要给它解放全部权限,即在Terminal中输入以下命令:

sudo chmod 777 /usr/local/arm

4.在解压出来的目录中找到并把整个gcc-4.6.4目录复制到刚刚建好的arm目录中,命令如下:
先cd切换到gcc-4.6.4所在目录(切换后先ls看一下有没有gcc-4.6.4目录):

cd /opt/TuxamitoSoftToolchains/arm-arm1176jzfssf-linux-gnueabi/

再执行 cp 复制命令,-r 表示整个目录以及里面的任何东西

sudo cp -r gcc-4.6.4 /usr/local/arm

5.打开(/etc/profile)配置环境变量和库变量,目的是以后可以在任何位置使用该交叉编译器,命令如下:

sudo vi /etc/profile

用vi或者vim打开后,在文件最后添加两行,并输入以下代码:第一行是添加执行程序的环境变量,第二行是库文件的路径

export PATH=$PATH:/usr/local/arm/gcc-4.6.4/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/arm/gcc-4.6.4/lib

然后保存退出即可。
在这里插入图片描述
6.使用source命令重新加载生效该配置文件

source /etc/profile

7.检验是否安装成功,在 Terminal 输入以下命令输出版本信息:

arm-linux-gcc -v

在这里插入图片描述

arm-linux-gcc工具使用

arm-linux-gcc语法形式:arm-linux-gcc [ option | filename ]...
通常情况下,产生一个新的程序需要经过四个阶段:预处理、编译、汇编,链接
当然我们可以通过参数决定该编译操作执行到何步结束
参数繁多,在Linux环境下寻求帮助:man arm-linux -gcc


-E

  • 只对文件进行预处理,但不进行编译、汇编和链接。

例:
arm-linux -gcc -E hello.c -o hello1.c

预处理前,hello.c中的内容:
在这里插入图片描述
预处理后,hello1.c 中的内容:
在这里插入图片描述


-S

  • 只对文件进行编译(产生汇编文件.s),但是并不进行汇编和链接。

例: arm-linux -gcc -S hello.c
上例中就会产生一个汇编文件 hello.s
在这里插入图片描述


-c

  • 只对文件进行编译和汇编,但是并不进行链接,也就是说只把程序做成 obj 文件。

例: arm-linux -gcc -c hello.c –o hello.o


-o

  • 指定目标名称,缺省的时候,gcc 编译出来的文件是 a.out

例:
arm-linux -gcc hello.c 默认编译出 hello.out
arm-linux -gcc -o hello.bin hello.c 指定目标名词是 hello.bin
arm-linux -gcc -o hello.s -S hello.c


-include file

  • 包含某个代码,简单来说,就是编译某个文件时需要另一个文件的时候,就可以用它设定,功能就相当于在代码中使用#include

例:arm-linux -gcc hello.c -include type.h


-I dir

  • 如果使用#include"file"的时候,gcc/g++ 会先在当前目录查找你所指定的头文件,如果没有找到,编译器会到缺省的头文件目录找;
  • 如果使用-I指定了目录, 编译器会先到你所指定的目录查找,然后再按常规的顺序去找。

例: arm-linux -gcc -o hello -I/xxx/include hello.c

-I

  • 就是取消前一个参数的功能,所以一般在-I dir之后使用
    在这里插入图片描述

-iprefix prefix-iwithprefix dir

这两个参数一般一起使用,当-I的目录查找失败,会到prefix+dir下查找


-l库名

  • 指定编译的时候使用的库(静态库.a / 动态库.so

例:arm-linux-gcc -lpthread hello.c
指定用到了 phtread.c

-L目录

  • 指定编译的时候,搜索库的路径。比如自己的库,就可以用-L指定到你的库所在的目录,不然编译器将只在标准库的目录找。这个dir就是目录的名称。

例:
arm-linux-gcc –L./ hello.c –o hello
在这里插入图片描述


gcc 优化

gcc 提供了为了满足用户不同程度的的优化需要,提供了近百种优化选项,用来对 {编译时间目标文件长度执行效率} 这个三维模型进行不同的取舍和平衡。优化的方法不一而足,总体上将有以下几类:

  1. 精简操作指令;
  2. 尽量满足cpu的流水操作;
  3. 通过对程序行为地猜测,重新调整代码的执行顺序;
  4. 充分使用寄存器;
  5. 对简单的调用进行展开等

-O0-O1-O2-O3
O0:不做任何优化,这是默认的编译选项
O3:优化级别最高


-g

  • 编译器在编译的时候产生调试信息。

例:
arm-linux –gcc –o hello -g hello.c
在这里插入图片描述


课后作业

(1) 看门狗部件属于(硬件模块),其核心功能为(侦测软件代码跑飞)和(当系统“跑飞”而进入死循环时,恢复系统的运行)。

(2) 假设C程序代码 fun.c,将其编译成目标代码 fun.o,编译命令为arm-linux-gcc -c fun.c -o fun.o;如果 fun.c 使用了库函数 libcurses.a,将其和 main.c 一起编译成可执行文件 smartfun,则编译命令为arm-linux-gcc -c fun.c main.c -lcurses -o smartfun


http://chatgpt.dhexx.cn/article/guxw8LH4.shtml

相关文章

ARM 编译器 Arm Compiler for Embedded 6 相关工具链简介

目录 1, Introduction to Arm Compiler 6 1.1 armclang 1.2 armasm 1.3 armlink 1.4 armar 1.5 fromelf 1.6 Arm C libraries 1.7 Arm C libraries 1,8 Application development ,ARM程序开发流程 2,ARM 编译器 5和ARM 编译器 6的兼容性 3&…

ARM处理器开发详解

目录 第一章 嵌入式系统基础知识(不考)嵌入式系统特点交叉调试调试器 第二章 嵌入式 ARM 技术概论ARM的基本数据类型(不考)选择ARM芯片的一般原则Cortex-A9内核的八种工作模式流水线(不考)寄存器组织程序状…

ARM嵌入式常用开发工具介绍及插画开发流程(更新)

这里接着前边的开发环境的配置说,其实用于开发的话,基本的开发环境已经架构好了,不过由于嵌入式开发环境的特殊性(交叉编译),我们还会用到一些其他的外围工具,这里做简要的说明。并重新介绍一下整个开发环境中&#xf…

ARM介绍

什么是ARM? ARM即可以是一家芯片设计厂商的名字,也可以代表一类微处理器的通称,还可以表示为一种技术的名称(这个问题面试的时候可能问道) 1、ARM是一个公司:Advanced RISC Machine Acorn RISC Machi…

《 Arm Compiler 5.06 》__ARM编译器官网下载、安装和使用说明(小白也能懂)

目录 一、前言 二、官方网站下载 三、编译器安装在 Keil 软件上 四、Keil选择编译器V5 “ V5.06 update 7(build 960) ” 五、测试 六、我的资源 (* ̄︶ ̄)创作不易!期待你们的 点赞、收藏和评论喔。 一、前言 Keil MDK-Arm5.37不再默认…

arm-linux开发板相关软件的使用

文章目录 1. 串口调试1.1 简介1.2 secureCRT使用步骤 2. 文件传输2.1 文件传输: tftp2.2 文件传输: NFS (相当于将主机作为一个u盘插入开发板) 3. 交叉编译3.1 下载3.2 配置 1. 串口调试 1.1 简介 一般而言,嵌入式开发板使用串口来监控后台。可以使用串口线连接开…

嵌入式:ARM相关开发工具概述

文章目录 JTAG仿真器J-LINK仿真调试器J-Link ARM主要特点 U-LINK仿真调试器ULINK2特点ULINK和JLINK的比较 ADS1.2集成开发环境使用ADS创建工程 JTAG仿真器 JTAG(Joint Test Action Group;联合测试行动小组)是一种国际标准测试协议(IEEE 1149.1兼容&…

嵌入式:ARM常用开发编译软件介绍

文章目录 编译器介绍1、ADS1.22、ARM RealView Developer Suite (RVDS)3、IAR EWARM4、KEIL ARM-MDKARM5、WIN ARM-GCC ARM 编译器介绍 1、ADS1.2 ADS(ARM Developer Suite),是在1993年由Metrowerks公司开发是ARM处理器下最主要的开发工具。…

北京邮电大学计算机考研资料汇总

北京邮电大学研招网 北京邮电大学计算机学院 北京邮电大学软件学院 北京邮电大学网络空间安全学院 北京邮电大学(Beijing University of Posts and Telecommunications),简称北邮,是中华人民共和国教育部直属、工业和信息…

23届计算机保研经验帖(北邮)

21届计算机保研经验帖 本文非常适合保研非实力派选手,越早阅读离心仪学校就越近一步。有很多同学担心自己拿到推免资格却无学可上,这大可放心,我们学校很多同学都轻松得到西南985高校的offer,但如果想保到北上广的计算机强校的话…

2019年北理工计算机北航计算机中山大学计算机北邮网研院保研夏令营

目录 1.个人情况 2.夏令营入营情况 3.报名准备建议 3.1 准备一个txt 文本,上面有个人信息,方便填写每个大学的报名申请,包括以下信息: 3.2 电脑上新建一个文件夹和一个网页收藏夹 3.3 一些可能需要使用的工具和软件&#xf…

北邮考研复试机试准备过程(已上岸)

纯自用请勿转载,用来给自己最后复习和捋思路用的,主要参考牛客网王道机试指南,C、C混用。考研人太久不写代码了…什么都不记得了,从头开始过一遍吧。 黑色代码段是要记住的重点函数/方法。每天下午做几个小时,一共不到…

2024考研北京邮电大学计算机/软件/网安/智能考研信息汇总

一、北京邮电大学简介 二、各院官方网址 北京邮电大学研究生院官网 计算机学院(国家示范性软件学院)官网 网络空间安全学院官网 人工智能学院官网 三、招生目录和导师重要性介绍 北邮以前共有四个学院属于计算机类,分别为:计…

所有计算机专业考研都变了!西安邮电大学计算机考研改考

西安邮电大学是一所双非大学,位于陕西省西安市。虽然是双非,但是计算机学科评估C,软件工程学科评估C,计算机实力在双非大学中还算不错。邮电类大学的计算机专业一般都比较强,比如北京邮电大学,南京邮电大学…

2019北邮计算机院机试真题

目录 19计算机院机试真题Problem A 二进制Problem B 二叉树Problem C 最短路径Problem D 方块阵 19计算机院机试真题 计算机院的机试题真难,没有4A的,第四题的题目看了一下,好像是矩阵的,题目记不清了,如果你考计算机…

北邮 计算机网络

一、前言 本文总结北邮计算机学院《计算机网络》的学习资料,希望能帮到学弟学妹,打好基础。 计算机网络也是计算机专业考研的必考科目之一,4学分,重要性不言而喻。学科特点是知识点非常多,每一章都要画一整张的思维导…

北邮考研_2019_计算机学院/网研院_时间和各科目规划安排

时间安排 科目 3-7月 7-9月 10-11 12月 数学 暑假前争取将一轮数学复习完 中期复习书:李正元数学全书(比李永乐写的好) 《李永乐真题大全解》 掐表做题 英语 3-4月:单词 预计7月中旬,将英语第一遍阅读做完&…

录取清华/北大/中科院/北邮都有!双非北京信息科技大学计算机考研光荣榜

上次我们看了几个二本大学的计算机考研光荣榜,发现虽然有上岸985/211大学的同学,但是不多。可以说,上岸好大学的概率非常非常低,是一件很难的事情。 那么有没有考上好大学多一些的,成绩比较好的双非大学呢?…

北邮考研上岸历程

考研初试倒数第一上岸北邮心路历程 嗨,准研究生们! 从去年到现在考研终于算是告一段落,所以想记录一下,与君共勉。 本人概况 本科双非,本科信息安全专业,一志愿北京邮电大学网络空间安全专业。初试总分…

2023北京邮电大学计算机考研信息汇总

北京邮电大学研招网 北京邮电大学计算机学院 北京邮电大学软件学院 北京邮电大学网络空间安全学院 北京邮电大学(Beijing University of Posts and Telecommunications),简称北邮,是中华人民共和国教育部直属、工业和信息…