版权声明:本文为博主原创文章。未经博主同意不得转载。

https://blog.csdn.net/qianlong4526888/article/details/27510675

问题1:支持ARMv8的Linux内核异常向量地址在哪?

答:异常向量基地址在0xffffffc000081800。通过查看编译后的linux内核的System.map文件。能确定异常向量表的基地址。通过反汇编生成的支持armv8的linux内核也能够证实。Armv8的异常向量表的定义在内核的arch/arm/kernel/entry.S中,将其摘录例如以下:

/*

 * Exception vectors.

 */

        .macro ventry  label

        .align 7

        b      \label

        .endm

 

        .align 11

ENTRY(vectors)                                                                   

        ventry el1_sync_invalid                //Synchronous EL1t

        ventry el1_irq_invalid                 //IRQ EL1t

        ventry el1_fiq_invalid                 //FIQ EL1t

        ventry el1_error_invalid               //Error EL1t

 

        ventry el1_sync                        //Synchronous EL1h

        ventry el1_irq                         //IRQ EL1h

        ventry el1_fiq_invalid                 //FIQ EL1h

        ventry el1_error_invalid               //Error EL1h

 

        ventry el0_sync                        //Synchronous 64-bit EL0

        ventry el0_irq                         //IRQ 64-bit EL0

        ventry el0_fiq_invalid                 //FIQ 64-bit EL0

        ventry el0_error_invalid               //Error 64-bit EL0

 

#ifdefCONFIG_AARCH32_EMULATION

        ventry el0_sync_compat                 //Synchronous 32-bit EL0

        ventry el0_irq_compat                  //IRQ 32-bit EL0

        ventry el0_fiq_invalid_compat          //FIQ 32-bit EL0

        ventry el0_error_invalid_compat        //Error 32-bit EL0

#else

        ventry el0_sync_invalid                //Synchronous 32-bit EL0

        ventry el0_irq_invalid                 //IRQ 32-bit EL0

        ventry el0_fiq_invalid                 //FIQ 32-bit EL0

        ventry el0_error_invalid               //Error 32-bit EL0

#endif

END(vectors)

问题2:找出TLB中存放的ARMv8的页表格式

答:仅仅找到了页表的格式。TLB中的格式没找到。

ARMv8支持4KB页大小的4级页表转换到64KB页大小的3级页表转换。

下面是从内核源代码的Documentation找到的信息。

AArch64 Linux memory layout:

 

Start                          End                    Size           Use

-----------------------------------------------------------------------

0000000000000000        0000007fffffffff      512GB            user

 

ffffff8000000000    ffffffbbfffeffff         ~240GB            vmalloc

 

ffffffbbffff0000       ffffffbcffffffff   64KB             [guardpage]

 

ffffffbc00000000    ffffffbdffffffff    8GB            vmemmap

 

ffffffbe00000000    ffffffbffbffffff   ~8GB            [guard,future vmmemap]

 

ffffffbffc000000     ffffffbfffffffff    64MB           modules

 

ffffffc000000000    ffffffffffffffff  256GB            memory

 

 

Translation table lookup with 4KB pages:

 

+--------+--------+--------+--------+--------+--------+--------+--------+

|63   56|55    48|47    40|39   32|31    24|23    16|15    8|7      0|

+--------+--------+--------+--------+--------+--------+--------+--------+

 |                 |         |         |         |         |

 |                 |         |         |         |         v

 |                 |         |         |         |  [11:0]  in-page offset

 |                 |         |         |         +-> [20:12] L3 index

 |                 |         |         +-----------> [29:21] L2 index

 |                 |         +---------------------> [38:30] L1index

 |                +------------------------------->[47:39] L0 index (not used)

 +------------------------------------------------->[63] TTBR0/1

 

 

Translation table lookup with 64KB pages:

 

+--------+--------+--------+--------+--------+--------+--------+--------+

|63   56|55    48|47    40|39   32|31    24|23    16|15    8|7      0|

+--------+--------+--------+--------+--------+--------+--------+--------+

 |                 |    |               |              |

 |                 |    |               |              v

 |                 |    |               |            [15:0]  in-page offset

 |                 |    |               +----------> [28:16] L3 index

 |                 |    +--------------------------> [41:29] L2index (only 38:29 used)

 |                +-------------------------------> [47:42] L1 index (not used)

 +------------------------------------------------->[63] TTBR0/1

问题3:ARMv8中重要的控制寄存器的各位的意思是什么?

答:源代码中没找到对ARMv8控制寄存器的具体描写叙述。

1.     关于SPSR,该寄存器是CPSR的副本,当在不同模式间转换时,该寄存器保存CPSR的内容,用于状态恢复。

在arch/arm64/include/asm/ptrace.h中找到AArch64的spsr寄存器某些位的定义。经过与ARMv7的对照发现。下面定义的位于ARMv7中定义的位意义同样。

/*AArch64 SPSR bits */

#definePSR_F_BIT  0x00000040

#definePSR_I_BIT   0x00000080

#definePSR_A_BIT  0x00000100

#definePSR_D_BIT  0x00000200

#definePSR_Q_BIT 0x08000000

#definePSR_V_BIT  0x10000000

#definePSR_C_BIT  0x20000000

#definePSR_Z_BIT  0x40000000

#define PSR_N_BIT 0x80000000

2.     ARMv8中的系统控制寄存器有多个。但与ARMv7不同的是:ARMv8中抛弃了“协处理器”的概念,进而就没了MCR,MRC类的指令,见參考资料[3],其系统控制都是通过MSR。MRS类指令进行。通过阅读Linux内核源代码发现。基本的控制寄存器有:

hcr_el2:el2中的hypervisor配置寄存器

cnthctl_el2:可配置通用时钟

另外还有,vmpidr_el2;vpidr_el2;sctlr_el1:cptr_el2;hstr_el2;spsr_el2。vbar_el1;ttbr0_el1;ttbr1_el1;sctlr_el1

參考资料

[1] ARMv8的编译器binutils,结构体aarch64_opcode_table定义见line 1208

p=jk/arm64/binutils.git;a=blob;f=opcodes/aarch64-tbl.h;h=d360b1406718257da86050f5b3a760cd02196250;hb=aarch64" rel="nofollow">http://kernel.ubuntu.com/git?p=jk/arm64/binutils.git;a=blob;f=opcodes/aarch64-tbl.h;h=d360b1406718257da86050f5b3a760cd02196250;hb=aarch64

[2] 结构体aarch64_opcode定义。line451

http://kernel.ubuntu.com/git?p=jk/arm64/binutils.git;a=blob;f=include/opcode/aarch64.h;h=98529954ea098349eb16572d4915f4edbd2e7b5d;hb=aarch64

[3] 《ARMv8 InstructionSet Overview 》page11

 

 

关于ARMv8另外几个问题的更多相关文章

  1. armv8(aarch64)linux内核中flush_dcache_all函数详细分析【转】

    转自:http://blog.csdn.net/qianlong4526888/article/details/12062809 版权声明:本文为博主原创文章,未经博主允许不得转载. /* *  __ ...

  2. armv8(aarch64)linux内核中flush_dcache_all函数详细分析

    /* *  __flush_dcache_all() *  Flush the wholeD-cache. * Corrupted registers: x0-x7, x9-x11 */ ENTRY( ...

  3. ARMv8 Linux内核源代码分析:__flush_dcache_all()

    1.1 /* *  __flush_dcache_all() *  Flush the wholeD-cache. * Corrupted registers: x0-x7, x9-x11 */ EN ...

  4. ARMv8 Linux内核head.S源码分析

    ARMv8Linux内核head.S主要工作内容: 1. 从el2特权级退回到el1 2. 确认处理器类型 3. 计算内核镜像的起始物理地址及物理地址与虚拟地址之间的偏移 4. 验证设备树的地址是否有 ...

  5. ARMv8 Linux内核异常处理过程分析

    NOTE:为了方便大家阅读,制作了PDF版文档.下载请猛戳这里 老样子,为了赚点积分下载其它人的文件,下载以上资料须要资源分2分. 假设没有积分请留言全部文档,留下邮箱就可以. 看了Linaro提供的 ...

  6. ARMV8体系结构简介

    armv8 1.前言 本文的主要内容来源于ARMV8白皮书v5,对ARMV8做一个概述.包含如下的内容: 首先从背景谈起,讲述ARM的发展历程: 之后介绍ARMV8体系结构的基本特征: 介绍A64指令 ...

  7. armv8 memory translation

    AArch32,arm的32bit架构: AArch64,arm的64bit架构: ARMv8.2-LPA,是armv8.2中的新feature,扩大了IPA和PA的支持范围,从48bit扩展到52b ...

  8. ARMV8 datasheet学习笔记5:异常模型

    1.前言 2.异常类型描述 见 ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(1)-EL/ET/ST 一文 3. 异常处理路由对比 AArch32.AArch64架 ...

  9. ARMV8 datasheet学习笔记4:AArch64系统级体系结构之VMSA

    1. 前言 2. VMSA概述 2.1 ARMv8 VMSA naming VMSAv8 整个转换机中,地址转换有一个或两个stage VMSAv8-32 由运行AArch32的异常级别来管理 VMS ...

  10. ARMV8 datasheet学习笔记4:AArch64系统级体系结构之存储模型

    1.前言 关于存储系统体系架构,可以概述如下: 存储系统体系结构的形式 VMSA 存储属性   2. 存储系统体系结构 2.1.    地址空间 指令地址空间溢出 指令地址计算((address_of ...

随机推荐

  1. ubuntu下mysql远程连接和访问慢的解决方法

    原本连接很快的mysql服务器,连接速度奇慢.以前几十毫秒的连接现在完成一次要近5秒钟,在排除了网络问题后,只有从mysql下手.原来每次访问db,mysql就会试图去解析来访问的机器的domain ...

  2. talk is cheap, show me the code——dcgan,wgan,wgan-gp的tensorflow实现

    最近学习了生成对抗网络(GAN),基于几个经典GAN网络结构做了些小实验,包括dcgan,wgan,wgan-gp.坦率的说,wgan,wgan-gp论文的原理还是有点小复杂,我也没有完全看明白,因此 ...

  3. iOS SQLite 数据库迁移

    本文转载至 http://www.jianshu.com/p/c19dd08697bd 最近不得不考虑关于数据库迁移的问题,原先用了种很不好的处理方式(每次版本升级就删除本地数据库,太傻),于是开始考 ...

  4. File /hbase/.tmp/hbase.version could only be replicated to 0 nodes instead of minReplication (=1).

    File /hbase/.tmp/hbase.version could only be replicated to 0 nodes instead of minReplication (=1). 这 ...

  5. Python实现C代码统计工具(二)

    目录 Python实现C代码统计工具(二) 声明 一. 问题提出 二. 代码实现 三. 效果验证 Python实现C代码统计工具(二) 标签: Python 代码统计 声明 本文将对<Pytho ...

  6. 【本周面试题】第2周 - js单线程和异步相关问题

    硬性知识点考察: 为什么js是单线程的? 因为js设计最初是为了操作dom而生,如果是多线程的,当多个线程同时修改一个dom时就会产生冲突,所以设计成单线程,一次只能做一件事. 既然是单线程为什么要有 ...

  7. iPhone 上你可能还不知道的小技巧

    用了这么久的 iPhone,这些技巧你可能都还不知道哦. 1.怎么用耳机切歌? 将耳机的话筒部位的中间(平时暂停用的,按一下)连按两下 即可. 连按两下,下一首. 连按三下,上一首. 2.摇一摇,相当 ...

  8. 欢迎访问新博客(pfzheng.tech)

    这两天折腾了几天的服务器,搞了一个临时的个人博客. 最先入手的域名pfzheng.tech,但是发现竟然不支持备案.天哪,我做错了什么,只好再买域名.新域名pfzheng.cn正在备案中. 新博客基于 ...

  9. Django之ORM版学员管理系统

    班级表 表结构 class Class(models.Model): id = models.AutoField(primary_key=True) # 主键 cname = models.CharF ...

  10. 【mysql】---php链接数据库---【巷子】

    一.创建public文件 <?php //第一件事情连接数据库 header("content-type:text/html;charset=utf8"); //服务器地址 ...