初识ARM处理器

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

        英国ARM公司是全球领先的半导体知识产权(IP)提供商。全世界超过95%的智能手机和平板电脑都采用ARM架构。ARM设计了大量高性价比、耗能低的RISC处理器、相关技术及软件。2014年基于ARM技术的全年全球出货量是120亿颗,从诞生到现在为止基于ARM技术的芯片有600亿颗 [2] 。技术具有性能高、成本低和能耗省的特点。在智能机、平板电脑、嵌入控制、多媒体数字等处理器领域拥有主导地位。

        现在的嵌入式开发大部分都是ARM处理器了,从MCU级别的M0,M3,M4,M23,M33,到MPU级别的ARM9,ARM11,ARM-A5x,ARM-A7x。

📢 1991 年,ARM 公司成立于英国剑桥,主要出售芯片设计技术的授权。ARM公司是苹果、诺基亚、Acorn、VLSI、Technology等公司的合资企业。产品有A,R,M三个系列,和ARM名字重合。

1. ARM 处理器的分类

1.1 按系列分类

Cortex-M系列(通用微处理器)

包括Cortex-M0、M3、M4,新的M23,M33,以及早期的ARM7TDMI,这类处理器一般不跑操作系统,或者只跑个RTOS

Cortex-R系列(实时微处理器)

这类处理器可以认为是在Cortex-M的基础上增强了实时性能,用于高安全,高实时的场合。

Cortex-A系列(带MMU的处理器)

包括Cortex-A5,A7,A9,到现在的A5x,A7x,以及早期的ARM9,ARM11。这类处理器一般跑Linux,安卓之类的带内存管理功能的操作系统,利用这类操作系统的强大功能去实现复杂的应用。

1.2 按指令集分类

V4 指令集

ARM7TDMI、ARM9TDMI、Intel StrongARM

V5 指令集

ARM926EJ、Intel XScale

V6 指令集

ARM11,M0

V7 指令集

ARM-A系列中的32位,M3,M4,M7

V8 指令集

ARM-A系列中的64位,M23,M33,M55,A系列32位用V8的比较少,但也有。

1.3 按硬件浮点分类

这种分类有些牵强,但是和编译器有较大关系,几种之间不兼容,所以这里单独列一下。

无硬件浮点单元

浮点运算通过软件完成,低端的M0,M3,M23;部分A系列的都没有。对应浮点编译选项为 soft 。

有硬件浮点单元,但是传参数用普通寄存器传

编译器(见第2节图中展示的各编译器)后缀有 el 的对应这种形式,对应浮点编译选项为 softfp,这种形式的产品比较少,后面会详细说明。

有硬件浮点单元,传参数也用浮点单元的寄存器传

编译器(见第2节图中展示的各编译器)后缀有 hf 的对应这种形式,对应浮点编译选项为 hard

32位CPU带硬件浮点运算功能的大部分都是这种。

64位CPU都带硬浮点,也是这种。

2. ARM 编译器的分类

        交叉编译就是在一种平台上编译出能运行在体系结构不同的另一种平台上的程序,比如在PC平台(X86 CPU)上编译出能运行在以ARM为内核的CPU平台上的程序,编译得到的程序在X86 CPU平台上是不能运行的,必须放到ARM CPU平台上才能运行,虽然两个平台用的都是Linux系统。 交叉编译工具链是一个由编译器、连接器和解释器组成的综合开发环境,交叉编译工具链主要由binutils、gcc和glibc三个部分组成。有时出于减小 libc 库大小的考虑,也可以用别的 c 库来代替 glibc,例如 uClibc、dietlibc 和 newlib。

  • 免费版目前有三大主流工具商提供,第一是GNU(提供源码,自行编译制作),第二是 Codesourcery,第三是Linora。
  • 收费版有ARM原厂提供的armcc、IAR提供的编译器等等,这些价格都比较昂贵

交叉编译工具链的一般命名规则为:arch [-vendor][-os] [-(gnu)eabi]

  • arch - 体系架构,如ARM,MIPS
  • verdor -工具链提供商
  • os - 目标操作系统
  • eabi - 嵌入式应用二进制接口

ABI:二进制应用程序接口(Application Binary Interface (ABI) for the ARM Architecture)。在计算机中,应用二进制接口描述了应用程序(或者其他类型)和操作系统之间或其他应用程序的低级接口。

EABI:嵌入式ABI。嵌入式应用二进制接口指定了文件格式、数据类型、寄存器使用、堆积组织优化和在一个嵌入式软件中的参数的标准约定。开发者使用自己的汇编语言也可以使用 EABI 作为与兼容的编译器生成的汇编语言的接口。

两者主要区别是,ABI是计算机上的,EABI是嵌入式平台上(如ARM,MIPS等)。

2.1 arm-none-eabi编译器

可以在下面这个网址下载:https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads

这种编译器的名字中没有包含操作系统的信息,所以这种编译器用于编译裸机或者使用RTOS的程序,M0,M3之类的单片机都使用的是这种编译器。
对应的64位为 aarch64-none-elf。

2.2 arm-none-linux-eabi编译器

可以在下面这个网址下载:如何区分
https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-a/downloads

这种编译器的名字中包含linux,所以这种编译器用于编译linux中的程序,32位编译器一般默认都是软件浮点。

对应的64位为aarch64-none-linux-eabi,64位编译器默认都是硬件浮点。


2.3 arm-linux-androideabi编译器

顾名思义是安卓编译器,64位为aarch64-linux-eabi

3. ARM编译器和ARM架构相关的编译选项

其实各芯片厂家提供的编译器主要作用就是指定了下面这些选项的默认值(当然不仅仅是下面这些选项),使用户使用起来更方便,不需要手动去指定了。

3.1 -mcpu和-march

-mcpu用于指定cpu的类型,例如cortex-a7,cortex-a9,cortex-a53,cortex-a73之类的。
-march用于指定cpu的指令集,例如armv6,armv7。
一般都是直接指定-mcpu,编译器能正确推断出-march的值。

3.2 -mfloat-abi和-mfpu

-mfloat-abi用于指定软浮点还是硬浮点

  • soft:软浮点
  • softfp:硬件浮点但是参数传递使用普通寄存器,中断的时候,只需要保存普通寄存器,中断负荷小,但性能较差,参数需要转换成浮点的再计算。
  • hard:硬浮点并且参数传递使用硬浮点寄存器,省去了转换,性能最好,但是中断负荷高。

一般armv5的CPU是soft,armv6以上的是hard,softfp的比较少

注意:不同mfloat-abi编译出来的库一般不兼容,所以整个linux系统中所有程序和库的mfloat-abi应该保持一致。

-mfpu用于指定硬浮点的类型,可以是vfp,vfpv3,neon-vfpv4。
一般32位CPU选择vfp或者vfpv3,64位CPU选择neon-vfpv4,或者直接不选择,让编译器根据CPU选择默认值即可。不同mfpu选项应该是能兼容的,这个没测试,印象中是可以的,只要CPU本身有相应的硬件支持就行。

3.3 通过-print-multi-lib选项,可以查看编译器支持的选项


3.4 通过readelf -a命令,查看程序和库对应的编译选项


4. 什么是Arm开发板?

一般来说再采购Arm嵌入式板卡的时候会涉及 核心板开发板。如何区分呢?

  • 核心板:CPU + 内存 + FLASH + 电源 + IO接口 等等
  • 开发板:SD卡 + 网口 + HDMI + 串口 + USB 等等

开发板有时也被叫做 底板。购买商家提供的开发板会比较贵,一般前期测试会使用,后期只是购买核心板,然后自行开发底板(开发板)。

5. 其他

如何区分arm支持32位还是64位?

一般我们通过从指令集来区分,从ARMv3到ARMv7支持32位空间和32位算数运算。2011年发布的ARMv8-A架构添加了对64位空间和64位算术运算的支持。

总结常见的:

  • armv8是64位的,也可以叫 aarch64
  • armv7是32位的

armv7、armv7l和armv7hl有什么区别?

  • armv7l中的 l 代表Little-Endian,与之对应的就是Big-Endian,含义是字节序。Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。
  • armv7hl中的 h 代表hard-float,指浮点运算直接由CPU(APU)完成,而不用通过软件库编译成定点算法实现,对应的是soft-float。

————————————————
版权声明:本文为CSDN博主「FlyWine」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wf19930209/article/details/124789136

基础篇.ARM架构介绍(1) ARM公司主要向客户提供处理器IP。ARM体系结构是一种硬件规范,主要用来约定指令集、芯片内部体系结构等。以指令集为例,ARM体系结构并没规定每一条指令在硬件IP中如何实现,只是约定了每条指令的格式、行为规范、参数等。 阅读详情

相关推荐

ARM与X86架构:计算领域的两大支柱

ARM与X86架构作为计算领域的两大支柱,各自承载着不同的使命和应用场景。它们在不同的领域中发挥着举足轻重的作用,共同推动着数字世界的快速发展。 随着5G、物联网和人工智能等技术的快速发展,ARM架构在高性能计算领域的应用前景广阔。尽管ARM架构在移动和低功耗领域具有明显优势。随着制造工艺的进步和电源管理技术的优化,X86架构在功耗方面的表现将不断提升。未来,随着技术的不断进步和应用场景的不断拓展,ARM与X86架构将继续演进和创新,为用户带来更多的便利和价值。

weixin_70208651的博客 3109

ARM 之十五 扫盲 ARM 架构、指令集、ARM IP、授权方式

  ARM 架构的 MCU 用了好多年,对于 ARM 架构也或多或少的有了一些了解。之前都是遇到啥问题直接去官网找对应的手册,一直没有系统的总结一下。是时候总结一下,好进行下一步学习了! ARM 文档   在了解 ARM 相关的各种概念之前,先来简单说一下 ARM 官方提供的文档的组织结构。其实,国外这些大公司对于文档的组织都是比较规范的,例如,ST 的 参考手册、数据手册、应用手册等等,ARM 文档也基本如此,分为参考手册、用户指南。这么划分的目的就是为了让各部分更加独立。简单来说,参考手册仅介绍原理,用

技术干货 2万+

ARM初识ARM——硬件理论基础

逻辑1和0 :数字电路中用高、低电平来表示逻辑1和0 二极管具有单向导电性 :正向导通,反向截止 三极管具有开关特性 NPN型:电压方向C->E 基极是高电平时CE导通 PNP型:电压方向E->C 基极是低电平时CE导通 电路图如何让查找一个元器件: 搜索丝印 通过目录 电路图中网络标号相同的节点在电气上是连接在一块的 位操作 unsigned int a; a为32位无符号整型 将a

colorfulshark 819

什么是ARM架构?什么是X86架构?两者的区别是什么?

ARM 架构由英国剑桥的 Acorn 计算机公司开发。因市场无合适产品,Acorn 自行设计出第一款微处理器,命名为 ARM。此后 ARM 架构不断发展,1990 年为与苹果合作成立 ARM 公司,开启全球广泛应用之路。1978 年,Intel 推出 16 位微处理器“8086”,开创 x86 架构时代。Intel 早期以数字格式命名处理器,都以“86”结尾,架构简称为“X86”。三十多年里,x86 家族壮大,涉足多个领域,成就 Intel 地位,成为业界标准。

D404234的博客 2万+

ARM架构

灰色表示不存在1. 每个小方块是一个寄存器,32位处理器,每个寄存器都是32位的。2. 寄存器是没有地址的,通过寄存器的编号进行访问,R0-R15,cpsr,spsr寄存器为什么没有地址?编译生成32位的机器码32位机器码中需要存储add的信息,r0,r1,r2(如果用地址的话,地址就占32位,r0,r1,r2每个寄存器都有32个地址,32位的机器码存不下,溢出了,所以不用地址指向寄存器)的信息。add被编译生成4位机器码r0,r1,r2也会被编译生成4位机器码。

m0_68967611的博客 5908

初识 Arm 处理器

英国ARM公司是全球领先的半导体知识产权(IP)提供商。全世界超过95%的智能手机和平板电脑都采用ARM架构。ARM设计了大量高性价比、耗能低的RISC处理器、相关技术及软件。2014年基于ARM技术的全年全球出货量是120亿颗,从诞生到现在为止基于ARM技术的芯片有600亿颗 [2] 。技术具有性能高、成本低和能耗省的特点。在智能机、平板电脑、嵌入控制、多媒体数字等处理器领域拥有主导地位。 现在的嵌入式开发大部分都是ARM处理器了,从MCU级别的M0,M3,M4,M23,M33,到MPU级别的ARM9,A

FlyWine的博客 5402

初识处理器架构:arm架构和x86架构完整指南

从指令集设计到功耗表现,深入对比ARM架构和x86架构在移动设备与桌面服务器中的实际应用。ARM架构以精简高效见长,x86架构凭复杂指令与兼容性称雄,二者在性能、生态和能效上的取舍,正深刻影响着芯片选型与系统开发

weixin_26907223的博客 423

Arm Arch」 初识 Arm

本文关键字:Arm 架构、Cortex-A、Cortex-M、Cortex-R、CPU、GPU、NPU; 从过程角度来看,本文以架构概述、架构发展、架构特性、架构演练为主线对 Arm 架构进行了启发式的介绍。从金字塔式知识结构角度来看,本文涉及到了计算机体系结构、Arm 系统架构、微架构、处理器编程模型、应用编程;从系统思维角度来看,本文只是对于读者很可能是浮光掠影,蜻蜓点水,所以后面章节会更加系统化、体系化、深入的讲述 Arm 架构。

最是书香能致远,腹有诗书气自华 3490

初识ARM(内核、SoC)

ARM内核 介绍几种常见的ARM内核1.Cortex-M3 2.Cortex-A7 3.Cortex-A53 4.Cortex-A72 ——什么是SoC芯片 1. STM32F103ZET6 2. i.MX 6ULL 3. A133(全志) 4. RK3399 总结 文章参考

Super辉sir的博客 1万+

ARM初识

ARM体系结构~ ...

graceyun的博客 951

初识ARM

ARM体系结构 一、ARM公司简介 ARM公司成立于1990年11月,主要设计ARM系列RISC处理器内核;ARM公司主要做授权,不生产任何一款具体的芯片。 二、ARM公司产业链 ARM→将技术授权给合作厂商 厂商→生产各具特色的具体芯片,厂商就包括飞利浦、英特尔、三星等 三、ARM微处理器的应用领域 工业控制/无线通信/消费类电子产品 四、ARM处理器的特点 (1)体积小、低功耗、低成本、高性能...

luxiaoluxia的博客 539

初识ARM嵌入式系统

ARM嵌入式系统的基本结构和常见的ARM微处理器 ARM被称为嵌入式微处理器核。 ARM嵌入式系统由3部分组成,即嵌入式系统硬件平台,嵌入式操作系统(代码)和嵌入式系统应用。 1、嵌入式系统硬件平台主要是指各种嵌入式处理器和外围设备等,如基于ARM核的STM32XX处理器、51系列单片机等。 2、嵌入式操作系统(代码)是指嵌入式硬件平台上运行的代码和操作系统。目前主流的嵌入式操作系统是基于C语言(...

weixin_44778084的博客 2116

ARM初识(一)

关于arm的一些知识点。

eternityxrx的博客 442

深入浅出ARM7协处理器机制及其现代替代方案

本文深入剖析ARM7协处理器机制的架构演进,重点分析CP15在Cache、MMU、权限控制中的作用,及其向ARMv8系统寄存器与异常等级的转型,揭示底层系统控制范式的根本性重构。

ppp33的博客 730

ARM汇编:初识寄存器

文章目录CPU内存寄存器(arm) 汇编语言与机器语言一一对应,每一条机器指令都有与之对应的汇编指令。 CPU 地址总线:它的宽度决定CPU寻址能力,最大为2的总线宽度次方。8086宽度20,所以最大寻址为2的20次方为1M。 数据总线:它的宽度决定单次数据传输量,也就是数据传输速度。8086的数据总线宽度是16,单次最大传递2个字节的数据。32位、64位Cpu指的就是数据吞吐量,64位为8字节。 控制总线:它的宽度决定了CPU对其他器件的控制能力,能有多少种控制。 CPU除了有控制器(控件其它器件)、运算

Rain and Tears 2384

嵌入式-ARM-学习总结(1):初识ARM

嵌入式-ARM-学习总结(1):初识ARMARM的特点冯诺依曼结构与哈佛结构内存与外存S5PV210的启动过程ARM的7种工作模式ARM汇编指令集8种寻址方式 ARM的特点 ARM采用RISC架构,CPU本身不能直接读取内存(需要借助内部寄存器对外部内容进行读取。当要改变外部内存中的数据时,首先需要将外部内存中的数暂时读到内部寄存器并进行改写,再重新放回到外部内存中)。 冯诺依曼结构与哈佛结构 程序和数据都放在内存中,且不彼此分离的结构称为冯诺依曼结构。譬如Intel的CPU均采用冯诺依曼结构 程序和数据分

努力学习的花椰菜的博客 1412

初识ZYNQ结构

本文介绍了zynq的结构,简述了PS中的APU。 处理器系统 所有的 Zynq 芯片都有相同的基本架构。作为处理器系统的基础,所有的芯片都包含了一颗双核 ARM Cortex-A9 处理器。这是一颗 “ 硬 ” 处理器 —— 它是芯片上专用而且优化过的硅片元件。 作为比较,我们来看一下硬件处理器以外的另一种方案,就像 Xilinx 的MicroBlaze这样的“软”处理器,这是由可编程逻辑部分的单元组合而成的[27]。也就是说,一个软处理器的实现和部署在 FPGA 的逻辑结构里的任何其他 IP 包是等

MTIS的博客 6071

初识汇编语言

初识汇编语言

qq_28576837的博客 6639
上一篇: [保姆级教程] 如何在 Linux Kernel (V5.17.7) 中添加一个系统调用(System call)
下一篇: Linux下ARM64内核空间分布及页表查询
土豆西瓜大芝麻
博客等级 码龄18年 1152粉丝 238原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值