英国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名字重合。
包括Cortex-M0、M3、M4,新的M23,M33,以及早期的ARM7TDMI,这类处理器一般不跑操作系统,或者只跑个RTOS
这类处理器可以认为是在Cortex-M的基础上增强了实时性能,用于高安全,高实时的场合。
包括Cortex-A5,A7,A9,到现在的A5x,A7x,以及早期的ARM9,ARM11。这类处理器一般跑Linux,安卓之类的带内存管理功能的操作系统,利用这类操作系统的强大功能去实现复杂的应用。
ARM7TDMI、ARM9TDMI、Intel StrongARM
ARM926EJ、Intel XScale
ARM11,M0
ARM-A系列中的32位,M3,M4,M7
ARM-A系列中的64位,M23,M33,M55,A系列32位用V8的比较少,但也有。
这种分类有些牵强,但是和编译器有较大关系,几种之间不兼容,所以这里单独列一下。
浮点运算通过软件完成,低端的M0,M3,M23;部分A系列的都没有。对应浮点编译选项为 soft 。
编译器(见第2节图中展示的各编译器)后缀有 el 的对应这种形式,对应浮点编译选项为 softfp,这种形式的产品比较少,后面会详细说明。
编译器(见第2节图中展示的各编译器)后缀有 hf 的对应这种形式,对应浮点编译选项为 hard
32位CPU带硬件浮点运算功能的大部分都是这种。
64位CPU都带硬浮点,也是这种。
交叉编译就是在一种平台上编译出能运行在体系结构不同的另一种平台上的程序,比如在PC平台(X86 CPU)上编译出能运行在以ARM为内核的CPU平台上的程序,编译得到的程序在X86 CPU平台上是不能运行的,必须放到ARM CPU平台上才能运行,虽然两个平台用的都是Linux系统。 交叉编译工具链是一个由编译器、连接器和解释器组成的综合开发环境,交叉编译工具链主要由binutils、gcc和glibc三个部分组成。有时出于减小 libc 库大小的考虑,也可以用别的 c 库来代替 glibc,例如 uClibc、dietlibc 和 newlib。
交叉编译工具链的一般命名规则为:arch [-vendor][-os] [-(gnu)eabi]
ABI:二进制应用程序接口(Application Binary Interface (ABI) for the ARM Architecture)。在计算机中,应用二进制接口描述了应用程序(或者其他类型)和操作系统之间或其他应用程序的低级接口。
EABI:嵌入式ABI。嵌入式应用二进制接口指定了文件格式、数据类型、寄存器使用、堆积组织优化和在一个嵌入式软件中的参数的标准约定。开发者使用自己的汇编语言也可以使用 EABI 作为与兼容的编译器生成的汇编语言的接口。
两者主要区别是,ABI是计算机上的,EABI是嵌入式平台上(如ARM,MIPS等)。
可以在下面这个网址下载:https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads
这种编译器的名字中没有包含操作系统的信息,所以这种编译器用于编译裸机或者使用RTOS的程序,M0,M3之类的单片机都使用的是这种编译器。
对应的64位为 aarch64-none-elf。
可以在下面这个网址下载:如何区分
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位编译器默认都是硬件浮点。
顾名思义是安卓编译器,64位为aarch64-linux-eabi
其实各芯片厂家提供的编译器主要作用就是指定了下面这些选项的默认值(当然不仅仅是下面这些选项),使用户使用起来更方便,不需要手动去指定了。
-mcpu用于指定cpu的类型,例如cortex-a7,cortex-a9,cortex-a53,cortex-a73之类的。
-march用于指定cpu的指令集,例如armv6,armv7。
一般都是直接指定-mcpu,编译器能正确推断出-march的值。
-mfloat-abi用于指定软浮点还是硬浮点
一般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本身有相应的硬件支持就行。
一般来说再采购Arm嵌入式板卡的时候会涉及 核心板 和 开发板。如何区分呢?
开发板有时也被叫做 底板。购买商家提供的开发板会比较贵,一般前期测试会使用,后期只是购买核心板,然后自行开发底板(开发板)。
如何区分arm支持32位还是64位?
一般我们通过从指令集来区分,从ARMv3到ARMv7支持32位空间和32位算数运算。2011年发布的ARMv8-A架构添加了对64位空间和64位算术运算的支持。
总结常见的:
armv7、armv7l和armv7hl有什么区别?
————————————————
版权声明:本文为CSDN博主「FlyWine」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wf19930209/article/details/124789136