ARM深入理解-5.3-通往内核的大门(异常向量表_AArch32)

简介: ARM深入理解-5.3-通往内核的大门(异常向量表_AArch32)
  • 1 建立异常向量表
  • 2 示例
  • 3 使能中断


异常的初始化就是建立异常向量表并使能异步异常(可以理解为中断)的过程。


1 建立异常向量表


在ARMv8架构的AArch32状态下启动处理器的时候,SCTLR.V决定了reset向量的位置,这与AArch64状态下是不同的(AArch64状态下,reset不再是向量表的一部分):

  • SCTLR.V=0,处理器从0x00000000启动;
  • SCTLR.V=0,处理器从0xFFFF0000启动。

可以通过硬件输入管脚VINITHI设置SCTLR.V的复位值。

除了reset向量之外,其余的异常都要通过异常向量表进行查找,而这些向量表的位置可以通过可编程向量表基地址寄存器进行用户自定义。通俗的讲,就是这些异常向量表放在任何位置都可以,你只需要把它的起始基地址写入到基地址寄存器中,处理器的硬件自动就能找到。这类表有4个,分别是:

  • 向量表基地址寄存器(VBAR)(安全模式使用);
  • Monitor向量表基地址寄存器(MVBAR);
  • Hyp向量表基地址寄存器(HVBAR);
  • VBAR(非安全模式使用);


2 示例


  • 示例1:展示了一个典型的32位状态下的向量表,包含reset和其它异常


.balign 0x20
vector_table_base_address:
B reset_handler
B undefined_handler
B svc_handler
B prefetch_handler
B data_handler
NOP
B IRQ_handler
// 还可以把FIQ handler的代码添加在这儿

4个向量表中的表项可以不同。具体可以参考ARM® Architecture Reference Manual ARMv8, for ARMv8-A architecture规范中的Exception vectors and the exception base address部分内容。

必须初始化4个向量表,也就是在使用向量表之前,需要设置4个向量表基地址寄存器。向量表的基地址必须是32字节对齐的。

  • 示例2:展示了reset之后,如何初始化VBARMVBAR
LDR R1, =secure_vector_table_base_address
MCR P15, 0, R1, C12, C0, 0      // 初始化VBAR(Secure)
LDR R1, =monitor_vector_table_base_address
MCR P15, 0, R1, C12, C0, 1      // 初始化MVBAR


3 使能中断


异常分为异步和同步异常,异步异常通俗的讲就是我们常规意义上的中断,同步异常就是我们常规意义上的异常

异步异常包括abortIRQFIQ,我们称之为广义上的中断。reset之后,可以通过设置CPSR.{A,I,F}标志位进行屏蔽。因此,如果想要捕获 abortIRQFIQ,必须将CPSR.{A,I,F}标志位清零。

另外,为了使能中断,还必须要初始化外部中断控制器(GIC),发送中断信号给处理器。关于GIC控制器的初始化可以参考GICv2或v3相关手册。

  • 示例3:展示了如何使能abortIRQFIQ
// 使能异步abort、中断和快速中断
CPSIE aif
  • CPSIE快速开关中断的命令:a,异步abort;i,中断;f,快速中断。需要注意的是,该命令只是通知处理器不接收中断信号而异,并没有控制GIC通用中断控制器,中断该发生还是发生。

上期主题:通往内核的大门(异常向量表_AArch64)

下期主题:分门别类处理异常

相关文章
|
Linux 网络安全 开发工具
内核实验(二):自定义一个迷你Linux ARM系统,基于Kernel v5.15.102, Busybox,Qemu
本文介绍了如何基于Linux Kernel 5.15.102版本和BusyBox创建一个自定义的迷你Linux ARM系统,并使用QEMU进行启动和调试,包括内核和BusyBox的编译配置、根文件系统的制作以及运行QEMU时的命令和参数设置。
1052 0
内核实验(二):自定义一个迷你Linux ARM系统,基于Kernel v5.15.102, Busybox,Qemu
|
Go 开发工具 git
在Qemu+ARM上运行Minix3内核
在Qemu+ARM上运行Minix3内核
|
NoSQL Linux 开发工具
百度搜索:蓝易云【VSCode+GDB+Qemu调试ARM64 linux内核教程。】
请注意,根据你的具体环境和需求,上述步骤可能会有所调整和修改。建议参考相关文档和资源,以获得更详细的配置和调试指南。
238 0
|
传感器 资源调度 安全
ARM异常
ARM异常
230 0
|
NoSQL 安全 Linux
ARM深入理解-hypervisor调试方法一(异常寄存器分析)
ARM深入理解-hypervisor调试方法一(异常寄存器分析)
|
存储 人工智能
ARM深入理解-5.2-通往内核的大门(异常向量表_AArch64)
ARM深入理解-5.2-通往内核的大门(异常向量表_AArch64)
|
4月前
|
存储 机器学习/深度学习 数据库
阿里云服务器X86/ARM/GPU/裸金属/超算五大架构技术特点、场景适配参考
在云计算技术飞速发展的当下,云计算已经渗透到各个行业,成为企业数字化转型的关键驱动力。选择合适的云服务器架构对于提升业务效率、降低成本至关重要。阿里云提供了多样化的云服务器架构选择,包括X86计算、ARM计算、GPU/FPGA/ASIC、弹性裸金属服务器以及高性能计算等。本文将深入解析这些架构的特点、优势及适用场景,以供大家了解和选择参考。
780 61
|
4月前
|
消息中间件 数据可视化 Kafka
docker arm架构部署kafka要点
本内容介绍了基于 Docker 的容器化解决方案,包含以下部分: 1. **Docker 容器管理**:通过 Portainer 可视化管理工具实现对主节点和代理节点的统一管理。 2. **Kafka 可视化工具**:部署 Kafka-UI 以图形化方式监控和管理 Kafka 集群,支持动态配置功能, 3. **Kafka 安装与配置**:基于 Bitnami Kafka 镜像,提供完整的 Kafka 集群配置示例,涵盖 KRaft 模式、性能调优参数及数据持久化设置,适用于高可用生产环境。 以上方案适合 ARM64 架构,为用户提供了一站式的容器化管理和消息队列解决方案。
302 10
|
5月前
|
存储 机器学习/深度学习 算法
阿里云X86/ARM/GPU/裸金属/超算等五大服务器架构技术特点、场景适配与选型策略
在我们选购阿里云服务器的时候,云服务器架构有X86计算、ARM计算、GPU/FPGA/ASIC、弹性裸金属服务器、高性能计算可选,有的用户并不清楚他们之间有何区别。本文将深入解析这些架构的特点、优势及适用场景,帮助用户更好地根据实际需求做出选择。
|
7月前
|
弹性计算 编解码 运维
飞天技术沙龙回顾:业务创新新选择,倚天 Arm 架构深入探讨
飞天技术沙龙回顾:业务创新新选择,倚天 Arm 架构深入探讨
108 1

热门文章

最新文章