aarch64_aarch64 linux - CSDN
精华内容
参与话题
  • AArch64 是什么

    万次阅读 2018-07-10 15:36:00
    原文地址:https://blog.csdn.net/rd_w_csdn/article/details/53841018查看Android设备的CPU架构信息,可以使用命令来完成:1、adb shell 2、cat /proc/cpuinfo12➜ ~ adb shell ...Processor : AArch6...

    原文地址:https://blog.csdn.net/rd_w_csdn/article/details/53841018

    查看Android设备的CPU架构信息,可以使用命令来完成:

    1、adb shell  
    2、cat  /proc/cpuinfo
    ➜  ~ adb shell
    shell@hennessy:/ $ cat  /proc/cpuinfo
    Processor   : AArch64 Processor rev 2 (aarch64) //cpu架构
    processor   : 0
    BogoMIPS    : 26.00
    
    //核心数
    Features    : fp asimd aes pmull sha1 sha2 crc32
    CPU implementer : 0x41
    CPU architecture: AArch64
    CPU variant : 0x0
    CPU part    : 0xd03
    CPU revision    : 2
    
    Hardware    : MT6795 //品牌
    shell@hennessy:/ $

    AArch64是ARMv8 架构的一种执行状态。

    为了更广泛地向企业领域推进,需要引入 64 位构架。同时也需要在 ARMv8 架构中引入新的 AArch64 执行状态。AArch64 不是一个单纯的 32 位 ARM 构架扩展,而是 ARMv8 内全新的构架,完全使用全新的 A64 指令集。这些都源自于多年对现代构架设计的深入研究。更重要的是, AArch64 作为一个分离出的执行状态,意味着一些未来的处理器可能不支持旧的 AArch32 执行状态。 虽然最初的 64 位 ARM 处理器将会完全向后兼容,但我们大胆且前瞻性地将 AArch64 作为在 ARMv8 处理器中唯一的执行状态。我们在这些系统中将不支持 32 位执行状态, 这将使许多有益的实现得到权衡,如默认情况下,使用一个较大的 64K 大小的页面,并会使得纯净的 64 位 ARM 服务器系统不受遗留代码的影响。立即进行这种划分是很重要的,因为有可能在未来几年内将出现仅支持 64 位的服务器系统。没有必要在新的 64 位架构中去实现一个完整的 32 位流水线,这将会提高未来 ARM 服务器系统的能效。这样回想起来, AArch64 作为在 Fedora ARM 项目中被支持的 ARM 构架是一个很自然的过程: armv5tel、armv7hl、aarch64。新的架构被命名为:aarch64,这同 ARM 自己选择的主线命名方式保持一致,同时也考虑到了 ARM 架构名与 ARM 商标分开的期望。

    ARMv8-A 将 64 位架构支持引入 ARM 架构中,其中包括:

    • 64 位通用寄存器、SP(堆栈指针)和 PC(程序计数器)
    • 64 位数据处理和扩展的虚拟寻址

    两种主要执行状态:

    • AArch64 - 64 位执行状态,包括该状态的异常模型、内存模型、程序员模型和指令集支持
    • AArch32 — 32 位执行状态,包括该状态的异常模型、内存模型、程序员模型和指令集支持

    这些执行状态支持三个主要指令集

    • A32(或 ARM):32 位固定长度指令集,通过不同架构变体增强部分 32 位架构执行环境现在称为 AArch32。
    • T32 (Thumb) 是以 16 位固定长度指令集的形式引入的,随后在引入 Thumb-2 技术时增强为 16 位和 32 位混合长度指令集。部分 32 位架构执行环境现在称为 AArch32。
    • A64:提供与 ARM 和 Thumb 指令集类似功能的 32 位固定长度指令集。随 ARMv8-A 一起引入,它是一种 AArch64 指令集。 
      ARM ISA 不断改进,以满足前沿应用程序开发人员日益增长的要求,同时保留了必要的向后兼容性,以保护软件开发投资。在 ARMv8-A 中,对 A32 和 T32 进行了一些增补,以保持与 A64 指令集一致。

    传送门: 
    https://fedoraproject.org/wiki/Architectures/ARM/AArch64/zh-cn#.E4.BB.8B.E7.BB.8D

    https://www.arm.com/zh/products/processors/instruction-set-architectures/armv8-architecture.php


    展开全文
  • aarch64 tensorflow 安装包

    2019-04-22 16:19:24
    aarch64 tensorflow 安装包,编译很久才编好的。aarch64 tensorflow 安装包,编译很久才编好的。
  • ARMv8-AArch64简述

    万次阅读 2017-05-09 19:18:04
    ARMv8是ARM版本升级以来最大的一次改变,ARMv8的架构继承以往ARMv7与之前处理器技术的基础,除了现有的16/32bit的Thumb2指令支持外,也向前兼容现有的A32(ARM 32bit)指令集,扩充了基于64bit的AArch64架构,除了新增...

    ARMv8是ARM版本升级以来最大的一次改变,ARMv8的架构继承以往ARMv7与之前处理器技术的基础,除了现有的16/32bit的Thumb2指令支持外,也向前兼容现有的A32(ARM 32bit)指令集,扩充了基于64bit的AArch64架构,除了新增A64(ARM 64bit)指令集外,也扩充了现有的A32(ARM 32bit)和T32(Thumb2 32bit)指令集;

    这里写图片描述

    ARMv8拥有两种执行模式(two execution modes):
    AArch64 :64-bit registers and memory accesses, new instruction set;
    AArch32 : backwards compatible with ARMv7-A;



    (一)A64新的指令和寄存器


    1. 固定大小32位操作码,清除基于5位寄存器说明符的解码表;
    2. 可以拥有32位或者64位参数;
    3. 地址设定为64位,主要针对LP64和LLP64数据模型;
    4. 比AArch32拥有更少的条件指令,条件指令有:分支,比较,选择;
    5. 没有LDM/STM(用于批量从内存中读取或者写入数据)指令,添加LDP/STP指令来操作以降低复杂性及功耗;
    6. 支持先进的SIMD(Single-Instruction,Multiple-Data:单指令多数据)和(FP浮点);
    7. 支持加密技术;
    8. 可随时访问31个通用的64位寄存器 (X0-X30),没有banked(banked是指一个寄存器不同模式下会对应不同的物理地址)的通用寄存器,堆栈指针(SP),PC不是通用寄存器,附加专用的零寄存器(Xzr);
    9. AArch32状态是使用CPSR来存储当前process执行状态,AArch64定义了一组PSTATE寄存器用以保存PE(Processing Element)状态;

    AArch64 – Unbanked Registers:

    这里写图片描述

    左边的通用寄存器用于:32位或者64位的整数运算或者64位的寻址,右边的用于浮点运算;

    AArch64 Banked Registers:

    这里写图片描述

    AArch64不在根据之前通过不同模式来区别banked寄存器,而是通过exception level;

    下图为AArch32和AArch64通用寄存器对应关系:

    这里写图片描述



    (二)AArch64 Exception Model


    AArch64 Exception Model:

    这里写图片描述

    Exception model nomenclature:

    这里写图片描述

    总共分为4 exception levels: EL3-EL0,在这种特权模式下EL0位权限最低模式,也就是用户模式,Monitor(EL3)和Supervisor(EL2),分别用于security扩展和virtualization扩展;;低level向高level切换通过exception的方式转换,有如下exceptions:

    1. Interrupts, page faults etc.
    2. SVC for transition to EL1 (system calls)
    3. HVC for transition to EL2 (hypervisor:超级监督者 calls)
    4. SMC for transition to EL3 (secure monitor call)
    5. Dedicated ELR register for the return address (banked at each EL);

    而高level向低level则通过ERET指令;
    低level的寄存器位宽不能大于高level:E.g. no 64-bit EL0 with 32-bit EL1;


    对异常的处理:

    1. Exception Link Register written on exception entry;
    2. 异常有可能发生任何在exception level,EL1, EL2, and EL3有不同的向量表地址,之前的arm版本只有一个向量表地址;
    3. 向量的区分是根据Exception type(synchronous, IRQ, FIQ or System Error)或者Exception origin (same or lower exception level) and register width;
    4. Syndrome 寄存器提供了exceptions信息;

    AArch32 and AArch64之间切换

    这里写图片描述

    AArch32和AArch64之间的切换只能通过发生异常或者系统Reset来实现,A32 -> T32之间是通过BX指令切换的;

    不同level之间的组合:

    这里写图片描述

    AArch32 /AArch64 relationship

    1. Changes between AArch32 and AArch64 occur on exception/exception return only;
    2. Allows AArch32 applications under AArch64 OS Kernel;
    3. Allows AArch32 guest OS under AArch64 Hypervisor;
    4. Allows AArch32 Secure side with AArch64 Non-secure side



    (二)AArch64 MMU Support


    在ARMv8 64bit出现之前,我们用的都是32位寻址,每个地址单位对应内存一个字节单元(B),所以我们最大的寻址范围为2^32B = 4GB,但是实际当中,内存设备有可能远远大于4GB内存空间,以前是通过LPAE(大物理地址扩展)实现地址的扩展,可以支持最大2^40的地址寻址范围,ARMv8理论上最高可以提供提供了2^64个虚拟地址,但是超过16 Exabyte (2^4 * 2^60)意义并不大,所以选择跟x86一样,可以使用最大支持2^48虚拟地址的寻址范围就足够;

    ARM 32bits下会用TTBR0存储User-Space行程所在的Page Table (也就是0xC0000000以下的存储空间),并用TTBR1存储Kernel Space所在的Page Table (也就是0xC0000000以上的存储空间).

    这里写图片描述

    在ARMv8 64bits架构下,会通过EL1的TTBR0 (ttbr0_el1, in /arch/arm64/mm/proc).存储User-Space行程所在的Page Table,与EL1的TTBR1存储Kernel Space所在的Page Table,并会依据Page Size与32/64bits行程而有不同的存储空间配置. 參考如下圖所示:

    这里写图片描述

    由于ARM 64bit Kernel分页大小为4kb和64kb两种,通过设置TASK_SIZE_64 (/arch/arm64/include/asm/memory.h)来设定,当分页大小为4KB的时候,决定TASK_SIZE_64大小的VA_BITS会等于39,也就是2^39大小的Task空间(=512GB),若分页大小为64KB时,则TASK_SIZE_64对应的VA_BITS等于 42,也就是2^42大小的Task空间(=4TB).

    这里写图片描述

    同时kernel空间也根据分页大小来划分内核空间,可以参考下面的图来区分:
    这里写图片描述

    参考资料:

    ARM(V8) Architecture Reference Manual.pdf

    ARMv8 Technology Preview.pdf

    www.arm.com -cotex-A57介绍

    Linux Support for ARM LPAE 分析

    ARMv8 与 linux 的新手笔记

    ARMv8 架构与指令集.学习笔记

    展开全文
  • [记录]AArch64异常

    千次阅读 2016-11-16 10:11:28
    AArch64 异常SynchronousAsynchronous IRQ FIQ SError Synchronous exceptions include Service call: SVCs, SMCs and HVCs(covered later) Aborts from MMU SP and PC alignment checking Unallocated ...

    AArch64 异常

    Synchronous

    Asynchronous

    - IRQ
    - FIQ
    - SError
    

    Synchronous exceptions include

     - Service call: SVCs, SMCs and HVCs(covered later) 
     - Aborts from MMU 
     - SP and PC alignment checking 
     - Unallocated instructions
    

    SError exceptions include

    Asynchronous data abrots
    

    Taking an exception

    when an exception occurs:

     - SPSR_ELn updated 
     - PSTATE updated (EL stays the same OR gets higher)
     - Return address stared to ELR_ELn 
     - ESR_ELn updated with cause of exception 
     - Branches to the exception table
    

    To return from an exception execute ERET instruction

     - Restores PSTATE from SPSR_ELn 
     - Restores PC from ELR_ELn
    

    ARM从ARMv8开始支持64位架构,当前的ARMv8只有A系列,ARMv8-A架构。
    新增一套arm64位指令集称为A64,之前的32位arm指令集称为A32, thumb指令集称为T32。
    定义AArch64/AArch32两套运行环境(称作Execution state)分别执行64/32位指令集。
    A64和A32指令集的每个指令都是固定4字节的。
    ARMv8的异常与以前的架构做了较大改动,以前的ARM,处理器可以处在多种工作模式(process mode),如 User,FIQ, IRQ, Abort, Undefined,System等,每个模式都是由1/2中相应的中断触发的。实际上粗略分只是两种特权模式(User属于非特权模式,其他的都是特权模式)。

    在ARMv8中User,FIQ, IRQ, Abort, Undefined,System这些模式统统取消,被EL0,EL1,EL2,EL3四种特权特权模式取代(跟之前的特权模式/非特权模式相比,实际上特权级还是增加了的)。与x86的ring0-ring3刚好相反,在这四种模式中EL0是最低权限,一般给用户态程序用的。EL1稍高,一般给内核用的。EL2/EL3分别是Hypervisor(虚拟化相关)和secure monitor(安全相关)的模式,一般linux中是可以不用的。
    因为需要兼容ARMv7,所以User,FIQ, IRQ, Abort, Undefined,System这些中断模式还是需要支持的,在ARMv8中就全部直接映射到EL1模式了(TODO: 应该是有个寄存器记录当前具体哪个模式)。
    ARMv8异常模式如下图(摘自[1])。

    在这里插入图片描述
    不同EL级别之间的转换规则:

    1. EL转换只会发生在 异常发生 或者 异常返回 的时候。
    2. 异常发生时EL级别只能提升或不变。
    3. 异常返回时EL级别只能降低或不变。
    4. EL转换的目标级别称为”目标异常级别”,只能由异常自身特征,或配置系统控制寄存器决定。
    5. 目标异常级别不能使EL0。
    6. 不同的EL级别有些寄存器是不同的,如图(摘自[2])。

    在这里插入图片描述
    Execution state的变化

    1. AArch64提供31个(x0 - x30)64-bit的通用寄存器 提供64位的pc/lr/sp
    2. A32/T32的切换通过BX即可,但A32/A64的切换必须通过异常。
    3. EL0,EL1,EL2,El3之前的切换,分别通过指令svc,hvc,smc。
    4. 若下层系统为32bit(如EL1),则上层只能为32bit(如EL0),反之若下层位64bits,则上层可以为32/64bits。
    展开全文
  • 畅游Aarch64最方便的方法

    千次阅读 2014-08-19 11:51:29
    虽然Aarch64(ARM64)的板子还很难到手、但通过使用qemu就能执行Aarch64的用户空间程序。利用Docker的话,就能很方便的尝试Aarch64的环境。编译也可以执行。

    译至:http://d.hatena.ne.jp/embedded/20140819/p1

    虽然Aarch64(ARM64)的板子还很难到手、但通过使用qemu就能执行Aarch64的用户空间程序。利用Docker的话,就能很方便的尝试Aarch64的环境。编译也可以执行。

    准备

    使用Ubuntu 14.04 (x86_64)的版本。

    首先安装Docker。详细的内容请参考这里

    然后安装QEMU。

     $ sudo apt-get install qemu-user-static
    

    起动

    $ docker run -it ericvh/arm64-ubuntu-dev /bin/bash
    

    只要这样、从dockerhub开始加载aarch64的根文件系统并执行后,就可以输出bash的提示符。

    确认架构。

    root@5031da283529:/# uname -m
    aarch64
    

    gcc也可以使用。

    root@5031da283529:/# gcc -v
    Using built-in specs.
    COLLECT_GCC=/usr/bin/gcc
    COLLECT_LTO_WRAPPER=/usr/lib/gcc/aarch64-linux-gnu/4.8/lto-wrapper
    Target: aarch64-linux-gnu
    Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.8.2-19ubuntu1' --with-bugurl=file:///usr/share/doc/gcc-4.8/README.Bugs --enable-languages=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.8 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.8 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --disable-libmudflap --disable-libitm --disable-libsanitizer --disable-libquadmath --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.8-arm64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.8-arm64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.8-arm64 --with-arch-directory=arm64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-multiarch --disable-werror --enable-checking=release --build=aarch64-linux-gnu --host=aarch64-linux-gnu --target=aarch64-linux-gnu
    Thread model: posix
    gcc version 4.8.2 (Ubuntu/Linaro 4.8.2-19ubuntu1) 
    
    
    root@5031da283529:/root# vi hello.c
    root@5031da283529:/root# gcc hello.c
    root@5031da283529:/root# ./a.out
    Hello, world
    root@5031da283529:/root# file ./a.out 
    ./a.out: ELF 64-bit LSB  executable, ARM aarch64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 3.7.0, BuildID[sha1]=a6ee525387725894f818f789acd9b0203adff657, not stripped
    

    虽然也有gdb、但可惜的是会输出下面的错误,断点无法正常使用。

    qemu: Unsupported syscall: 117
    
    展开全文
  • armv8 ARM64 AARCH64

    万次阅读 2015-05-21 22:32:44
    最近在制作iOS版的CPU Dasher64,针对64位ARMv8架构。ARMv8架构与ARMv7架构比起来,变化非常大。Intel IA-32与Intel64的差别其实不大,基本上就是每条指令多了REX前缀而已~ 从可用寄存器角度来说,程序员可以...
  • ARM,AMD,X86,AArch64的概念

    万次阅读 2019-03-11 16:44:09
    AMD,中文名(超威)超微半导体,是除了英特尔以外最大的x86架构微处理供应商,也是除了英伟达以外仅有的独立图形处理供应商。 x86泛指一系列由英特尔公司开发的处理器的架构,最早为1978年面世的“Intel 8086”CPU...
  • 架构AArch64简介和其他架构对比

    千次阅读 2018-08-11 22:01:57
    ###Date:2017-12-24 转载自:... 查看Android设备的CPU架构信息,可以使用命令来完成: 1、adb shell 2、cat /proc/cpuinfo ...shell@hennessy:/ $ cat /proc/cpuinfo...
  • X86_64平台上利用qemu安装aarch64架构的虚拟机

    万次阅读 多人点赞 2018-01-03 11:37:15
    前一段时间摸索了以下在x86平台上安装arm架构(包括aarch64和armhf)的虚拟机,中间遇到了不少问题。把经验总结下来希望能帮到大家。 1.安装qemu-system-aarch64 2.UEFI固件下载 3.操作系统下载 4.创建...
  • arm64(aarch64)安装centos 7.5.1804

    万次阅读 热门讨论 2018-06-29 15:12:27
    Arm64的centos版本自7.5.1804以后不再和7.4、7.3、7.2等之前的一样直接提供一个rootfs.tar.xz的压缩包,全部变成了ISO的安装文件,因此需要EFI来引导安装,如果Aarch64的cpu用的是uboot就只有干瞪眼了,笔者花了一翻...
  • aarch64服务器GCC软件包:centos7.6已安装测试 使用方法,将所有rpm放置统一目录下 例如:放置目录/usr/linux_GCC下 进入终端: cd /usr/linux_GCC //进入目录 rpm -Uvh *.rpm --nodeps --force //不验证依赖...
  • Aarch64中异常的基本概念 异常发生时硬件做了哪些事情? 异常的处理 Aarch64中异常的基本概念 在aarch64中,将中断、系统调用、数据指令异常等等情况统称为异常。异常会中断当前cpu执行流,转而执行具有更高...
  • centos 7-aarch64如何替换yum源

    千次阅读 2018-12-12 17:29:08
    一、进入yum.repo.d [root@node-01 ~]# cd /etc/yum.repos.d/ [root@node-01 yum.repos.d]# ls CentOS-Base.repo CentOS-Sources.repo 二、备份原yum源 ...[root@node-01 yum.repos.d]# mkdir yum-back ...
  • aarch64平台交叉编译strace工具

    千次阅读 2019-12-19 11:26:37
    aarch64平台交叉编译strace工具
  • 转载自... 主机: ubuntu14.04 64bit 开发板: qemu + aarch64 (参考: http://www.cnblogs.com/pengdonglin137/p/6442583.html) 工具链:  ... aarch64-linux-gnu
  • libsigar-aarch64-linux.so

    2019-08-21 15:12:36
    sigar官方提供的动态库默认不支持aarch64平台。该libsigar-aarch64-linux.so库支持aarch64平台
  • aarch64平台交叉编译ltrace工具

    千次阅读 2019-12-19 15:36:59
    aarch64平台, aarch64-himix100-linux-gcc 交叉编译ltrace工具
  • docker-compose(aarch64)

    2020-07-09 16:18:46
    基于aarch64架构CentOS Linux release 7.6.1810 (AltArch)系统生成的docker-compose程序,弥补当前网络无此资源的空缺。
  • aarch64-linux-gnu交叉编译Qt4.7.3

    千次阅读 2019-05-08 09:31:11
    到 Qt 官网下载合适的 Qt 版本,地址:... 1.环境搭建: 1.安装automake、libtool 和主机上的 Qt 工具: $ sudo apt-get install automake autoconf libtool m4 $ sudo apt-get install libX11-dev libXext...
  • 【汇编优化】之arm64/AARCH64汇编优化

    千次阅读 2018-09-08 16:40:10
    序  本文介绍arm架构64位neon... 本文中无特别说明,arm寄存器均指aarch64寄存器  arm寄存器有31个64位通用寄存器(X0~X30),他们的低32位称为W寄存器(W0~W30),Xn和Wn的对应关系如图:  此图参...
1 2 3 4 5 ... 20
收藏数 11,919
精华内容 4,767
关键字:

aarch64