历史上的今天
返回首页

历史上的今天

今天是:2025年06月04日(星期三)

正在发生

2020年06月04日 | 关于ARMv8另外几个问题

2020-06-04 来源:elecfans

问题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


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

推荐阅读

史海拾趣

Ethertronics公司的发展小趣事

Ethertronics公司的发展故事一:技术突破与初创期

Ethertronics公司成立于XXXX年,由一群热衷于无线通信技术创新的工程师共同创立。在创立初期,公司就瞄准了天线技术的未来发展方向,致力于研发高性能、多频段、小型化的天线产品。通过不断的技术创新和实验,Ethertronics成功开发出了一系列具有革命性的天线产品,这些产品不仅性能卓越,而且体积小巧,可以广泛应用于各种电子设备中。这些技术突破为公司赢得了业界的广泛认可,也为公司的后续发展奠定了坚实的基础。

Ethertronics公司的发展故事二:市场拓展与合作伙伴关系

随着技术的不断成熟和产品的不断完善,Ethertronics开始积极拓展市场。公司与多家知名电子设备制造商建立了长期稳定的合作伙伴关系,为其提供定制化的天线解决方案。通过与这些合作伙伴的紧密合作,Ethertronics的产品逐渐打入了主流市场,并被广泛应用于智能手机、平板电脑、笔记本电脑等各种电子设备中。这些合作伙伴的信任和支持,为公司的发展提供了强大的动力。

Ethertronics公司的发展故事三:持续创新与研发投入

作为一家以技术为核心的公司,Ethertronics始终将创新作为公司发展的核心动力。公司不断加大对研发的投入,积极引进和培养高素质的研发人才,不断推出具有竞争力的新产品。同时,公司还与多家高校和科研机构建立了紧密的合作关系,共同开展技术研究和创新。这些持续的创新和研发投入,使Ethertronics在天线技术领域始终保持领先地位。

Ethertronics公司的发展故事四:国际化战略与全球布局

随着全球市场的不断开放和竞争的加剧,Ethertronics开始实施国际化战略,积极拓展海外市场。公司在全球范围内建立了多个研发中心和销售机构,与当地的合作伙伴建立了紧密的合作关系。通过这些机构,Ethertronics能够更好地了解当地市场需求和竞争态势,为客户提供更加优质和高效的服务。同时,公司的国际化战略也为其带来了更多的商业机会和发展空间。

Ethertronics公司的发展故事五:社会责任与可持续发展

作为一家有着高度社会责任感的企业,Ethertronics始终将可持续发展作为公司发展的重要目标。公司积极倡导环保和节能的理念,致力于开发更加环保和节能的产品。同时,公司还积极参与各种公益活动和社会责任项目,为社会做出积极贡献。这些举措不仅提升了公司的品牌形象和社会声誉,也为公司的长期发展奠定了更加坚实的基础。

Antelec公司的发展小趣事

随着技术的不断成熟和产品的不断完善,Antelec公司开始积极寻求市场拓展。公司通过与国内外知名企业和研究机构建立合作关系,将产品成功应用于多个领域,如通信、半导体制造和航空航天等。同时,公司还积极参加各类行业展会和论坛,加强了与行业内外的交流与合作。

台湾固锝(GD)公司的发展小趣事
避免输入功率过大导致放大器过热。
诚润电子(CHEVRON)公司的发展小趣事

随着公司业务的不断发展,诚润电子开始积极拓展海外市场。他们通过参加国际展会、与海外客户建立合作关系等方式,逐渐将产品推向全球。在这个过程中,诚润电子不仅提升了自身的品牌知名度,还积累了丰富的国际市场经验。如今,诚润电子的产品已经出口到多个国家和地区,成为了全球电子保护元件领域的重要供应商之一。

AntennaHome公司的发展小趣事

AntennaHome公司深知技术创新是企业持续发展的根本动力。因此,公司始终坚持将研发作为企业的核心战略。公司不断加大对研发的投入力度,引进先进的研发设备和人才,同时积极与高校和研究机构开展合作。这些举措使得公司在天线技术领域始终保持领先地位,为公司的长远发展提供了有力保障。

这五个故事展示了AntennaHome公司在电子行业中的发展历程,从创业初期的技术创新到与国际大厂的合作,再到应对行业变革的挑战、参与国际展会以及持续投入研发,每一步都体现了公司的努力和坚持。

Great American Electronics公司的发展小趣事

随着5G技术的快速发展,电子行业迎来了新的变革。AntennaHome公司面临着来自行业内外的巨大挑战。为了应对这一变革,公司加大了对5G天线技术的研发力度,同时积极调整产品结构和市场策略。经过一段时间的努力,公司成功推出了多款适应5G时代需求的新型天线产品,为公司的持续发展奠定了坚实的基础。

问答坊 | AI 解惑

5口以太网交换机原理图

哥们今天刚按照实物反推出的,主芯片为DM9081的5口以太网交换机原理图.PROTEL99SE格式. [ 本帖最后由 西门 于 2009-5-12 18:31 编辑 ]…

查看全部问答>

关于OP07

哪位可以给我讲讲这电路上面的二极管是什么作用啊,特别是为什么要在OP07反馈和输出端加上IN4148…

查看全部问答>

一种用N+1条线实现矩阵键盘的方法

键盘输入作为最常用的输入设备仍有其不可替代的作用。下面首先对传统键盘作一个简单的介绍。 (1)传统键盘的介绍键盘的结构通常有两种形式:线性键盘和矩阵键盘。在不同的场合下,这两种键盘均得到了广泛的应用。线性键盘由若干个独立的按键组成, ...…

查看全部问答>

Platform Builder 4.2中自带的S3C2410BSP可以用于S3C2440么?

Platform Builder 4.2中自带的S3C2410 BSP可以用于S3C2440么? 或者哪里有下载用于S3C2440 BSP for PB4.2的?…

查看全部问答>

我做了一块485通讯板子,帮我看看?

     专业做单片机软硬件开发                地址:哈尔滨市 南岗区 会展中心             ...…

查看全部问答>

学习之MSP430中断

中断是MSP430微处理器的一大特色,有效地利用中断可以简化程序和提高执行效率。 MS430 的中断比较多,几乎每个外围模块都能够产生中断。MSP430 可以在没有事件发生时进入低功耗状态,事件发生时,通过中断唤醒CPU ,事件处理完毕后,CPU 再次进 ...…

查看全部问答>

UDA1341驱动问题

有人用FPGA驱动过UDA1341吗?UDA1341芯片的L3MODE,L3CLOCK.L3DATA三个信号引脚对AD,DA有影响吗?…

查看全部问答>

ADuC7061中断方式实现串口通信

/******************************* * name: * function: * return: ********************************/ #include \"string.h\" #include \"global.h\" #include \"function.h\" #include #include unsigned char UartDataRecevice; un ...…

查看全部问答>

STM32之RCC寄存器组概略

初触STM32,一堆的寄存器可谓是头大,今天闲得蛋疼,理了下RCC寄存器组,共10个寄存器,虽然没有记下来,但是基本知道该寄存器组的作用。这里也没具体列出哪个寄存器的某一位是啥作用,但是一眼看去基本知道这个寄存器是可以设置哪些项的,这样也能 ...…

查看全部问答>

有人熟悉这块单片机板子么?Inter 8086的

在大四毕业季后,俺和同学去淘学长们遗留的“废品”。得此物,一查PDF,什么上世纪70年代的PDF,板子上印的是2009年做的。茫然呀…

查看全部问答>