【ARM系列】ARM Development Studio 2021 FVP调试Startup代码

您所在的位置:网站首页 dosbox使用debug 【ARM系列】ARM Development Studio 2021 FVP调试Startup代码

【ARM系列】ARM Development Studio 2021 FVP调试Startup代码

#【ARM系列】ARM Development Studio 2021 FVP调试Startup代码| 来源: 网络整理| 查看: 265

本文目录 前言导入工程代码分析Run工程Core的运行1.第一条指令2.EL等级切换3.el1_primaryd分支:4.el1_secondary分支5.MainApp的执行

前言

ARM Development Studio 2021是一款集开发、调试、性能追踪等功能的高性能IDE,这款IDE可以配合DStream仿真器对arm嵌入式平台进行高效开发。其中,ARM FVP是arm提供的一个固定虚拟平台,在没有RTL EMU的情况下可以快速调试软件,加快软件的开发进度。在我们安装DS2021的时候已经自带了一部分FVP,如果你需要使用其他的FVP,可以去ARM官网购买下载。

本文主要介绍使用FVP_Base_Neoverse-N1x4来调试Neoverse N1 Multi-core Startup Code的流程。Startup程序由汇编和C语言实现,同时采用Arm Compiler 6工具链进行编译链接。Startup代码包含vector table,reset handler,cache/mmu configuration,interrupt contorller(GICv3) initialization ,NEON support。并通过一个多核-素数生层器程序来进行说明。

导入工程

在安装ARM Development Studio 2021软件时,自带了一些工程用例,此处通过import将bare-metal工程startup_Neoverse_N1导入到软件中。下图是工程文件导入界面和编译后工程文件介绍。 在这里插入图片描述

代码分析

此处只对代码流程做简单分析,后续会单独出一篇文章对Startup代码做详细配置分析。

1.所有4个core默认启动状态是AArch64 EL3,这段Startup代码在EL3等级会进行一些基础初始化配置操作:设置VBAR,各EL等级的系统寄存器配置,每个core的EL3_STACK空间分配,GIC的配置,EL等级的切换(EL3->EL1N)。 2.切换到EL1后会进行App_STACK分配,使能floating point,无效掉EL1的cache/TLB,设置Translation Table Base的地址,内存属性等。 3.上面两段公共程序执行完成后,会根据CPU ID进行分支选择。

CPU1/2/3会执行el1_secondary代码:完成SGI中断初始化配置,并执行“wfi”进入低功耗状态,直至CPU0使用中断将它们唤醒,被唤醒后配置mmu和cache的使能,然后跳转到MainApp。CPU 0作为主核会执行el1_primary代码,包括MMU的配置,__main中完成C语言run_time环境(scatterloading)的初始化,向main()的跳转,并在main中发出SGI-15去唤醒CPU1/2/3和timer的初始化操作,最后跳转到MainApp()。进入MainApp后,程序通过一个多核素数生成程序,完成核的调度并行仿真。 Run工程

通过Run—>Debug Configurations…进行工程配置 1.在Generic Arm C/C++ Application中选中startup_Neoverse_N1x4,在右侧Connection界面,选择Neoverse N1x4 SMP,表示进行4核调试。 在这里插入图片描述 2.在Files窗口,选用默认路径文件,该文件是通过编译后生成的可执行文件。 在这里插入图片描述 3.在Debugger窗口,选择Debug from entry point 在这里插入图片描述

Core的运行 1.第一条指令

按照上述步骤配置完成后点击Debug后,程序会自动跳转到下图中的第一条指令,可以通过F6通过逐步执行的方式观察CPU的运行步骤,过程中可以通过查看对应的寄存器的值的变化进行沉浸式体验。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/76a8d5f674f64e6084110114eceb7ee4.png

2.EL等级切换

可以通过设置断点的方式,观察el等级的切换过程以及CPU状态的变化。将断点设置在drop_to_el1处,然后采用单步执行的方式继续向下执行,会观测到CPU的状态从EL3h切换到了EL1h 在这里插入图片描述

3.el1_primaryd分支:

CPU0进入el1_primaryd分支执行,配置完成mmu页表的配置并跳转到__main,执行 __scatterload和rt_entry,然后进入main()中初始化Primes并配置产生SGI中断唤醒CPU1/2/3,完成timer的初始化,最后进入MainApp程序。 在这里插入图片描述

4.el1_secondary分支

CPU1/2/3会进入el1_secondary分支,完成GIC相关配置后通过wfi进入低功耗模式,等待CPU0通过SGI中断被唤醒。 在这里插入图片描述 CPU1/2/3等待中断被唤醒后,会使能MMU和Cache,然后进入MainApp中执行C函数 在这里插入图片描述

5.MainApp的执行

在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3