U-Boot ARMv8 平台异常处理机制解析

入口点:arch/arm/cpu/armv8/start.S

1. 判断是否定义了钩子,如有则执行,否则往下走。执行save_boot_params,本质就是保存一些寄存器的值。

2. 对齐修复位置无关码的偏移

      假设U-Boot链接时基址为0x10000,但实际加载到0x20000:

      基址偏移 x9 = 0x20000 - 0x10000 = 0x10000。

      若某个重定位项的r_offset = 0x11000(链接时地址),r_addend = 0x200:

      运行时r_offset 修正为0x11000 + 0x10000 = 0x21000。

3. 若定义了CONFIG_SYS_RESET_SCTRL,则执行reset_sctrl,也是一个钩子函数,复位操作相关。

4. 异常向量表配置及EL3常规配置

     a. 异常向量表地址(即vector)存到x0

     b. 判断当前EL几,然后执行对应的分支,以EL3举例

       1)把x0的值,写到vbar_el3。

       2)配置scr_el3 的低4位,包括安全位的设置,以及配置“物理IRQ中断会不会被路由到EL3”“物理 FIQ 中断会不会被路由到EL3”“external aborts和SError中断会不会被路由到EL3”,以上全部配置为“会”。

       3)使能浮点计算;使能单指令多数据。

       4)初始cntfrq_el的值。这个变量是咱们用的定时器的那个频率。在Uboot中,不是测量出来的,是直接写死的。

 5. 配置sctlr,使能指令cache

      c. CR_I,一个宏定义,表示指令cache在sctlr中的bit位。

      d. 通过switch_el宏指令,判断当前是EL几,然后进入相应分支。以el3举例。

      e. 把CR_I写入sctlr,即,使能指令cache。这个指令cache,是EL0和EL1的使能位。

 6. 使能多核之间的数据一致性

      f. 先是isb指令,流水线同步操作。

      g. 然后操作cpuectlr寄存器,bit6使能,即保证多核数据一致性。

 7. 截至这里,cache、TLB都是无效的。执行lowlevel_init

      h. 执行bl lowlevel_init时,bl指令,会把bl后边的指令的地址,存在LR中,以便执行完lowlevel_init的ret时返回。但是由于lowlevel_init中,也会调用bl,导致lr会被覆盖,所以在lowlevel_init中,先存一下LR的值。可以看到,上图最后3行,在执行ret 时,先把x29的值,恢复到lr中,在执行ret。

      i. 如果IRQ被设置为y,则进行中断控制器的配置:branch_if_slave可以判断是否是主核,若是主核,则执行ldr x0, = GICD_BASE 和bl gic_init_secure,然后跳转;若不是主核,则直接跳转。

       1)若是主核,x0存储了中断控制器寄存器基地址。

       2)x0作为参数,调用gic_init_secure:arch/arm/lib/gic_64.S。

       3)上图代码走GICV2分支。先是gicd_ctlr的bit0和bit1置1,表示使能Grp0和Grp1的中断上送。

       4)读取GICD_TYPER中的ITLinesNumber。

         需要了解的是,当ITLinesNumber = 0时,表示最大中断数为32 * (0 + 1) = 32,即 ID 为0 ~ 31。但只有32个中断,就意味着没有SPI(共享中断),如下图,SPI的编号,从32开始。

         所以,cbz w10 1f 指令的含义,是当没有SPI中断时,跳转到1:处,直接返回。

       5)通过循环,将所有中断都划到group1中。

       6)gic_init_secure结束,返回上一层。跳转到gic_ini_secure_percpu去,同时传进去的参数分别是GIC distributor寄存器组的基地址和cpu interface组的基地址。把SGI 和PPI划分到group1(其实在上一个函数里,已经做过一遍了)。使能SGI(多核通信要用);使能通过interface上报中断。

      j. 从核等待主核SGI0中断唤醒。

8. 最后进入_main

异常触发时,根据异常的类型(SE同步异常、irq中断、fiq快速中断等),硬件会跳转到vector 的偏移。比如,IRQ跳转到vector+0x80*5,其实就是,vector中的条目,每个条目按128字节对齐(align 7),所以就是,每个条目最多128字节。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/diannao/84698.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql安装教程--笔记

一、Windows 系统安装 方法1:使用 MySQL Installer(推荐) 1. 下载安装包 访问 MySQL 官网下载页面,选择 MySQL Installer for Windows。 2. 运行安装程序 双击下载的 .msi 文件,选择安装类型: ◦ Developer…

投资策略规划最优决策分析

目录 一、投资策略规划问题详细 二、存在最优投资策略:每年都将所有钱投入到单一投资产品中 (一)状态转移方程 (二)初始条件与最优策略 (三)证明最优策略总是将所有钱投入到单一投资产品中…

NGINX HTTP/3 实验指南安装、配置与调优

一、HTTP/3 简介 基于 QUIC:在 UDP 之上实现的多路复用传输,内置拥塞控制与前向纠错,无需三次握手即可恢复连接。零 RTT 重连:借助 TLS 1.3,实现连接恢复时的 0-RTT 数据发送(视底层库支持)。多…

编程日志5.28

string赋值操作 算法: #include<iostream> using namespace std; int main() { //1.字符串常量的赋值 string s1; s1 = "英雄哪里出来"; cout << s1 << endl; //2.字符串变量的赋值 string s2; s2 = s1; cout <…

AE的ai图层导到Ai

AE的ai图层导到ai 解决方法: 1、打开ai软件&#xff0c;不用新建&#xff0c;留在那就行。 2、在AE里选中任意一个ai文件图层&#xff0c;只需同时按住ctrl和英文字母键&#xff0c;图层就会自动全部导入到ai中 英文字母键的详情可以参考&#xff1a;http://www.yayihouse.co…

【Springboot+LangChain4j】Springboot项目集成LangChain4j(下)

前置条件&#xff1a;根据上篇文章完成springboot初步集成LangChain4j 【SpringbootLangChain4j】根据LangChain4j官方文档&#xff0c;三分钟完成Springboot项目集成LangChain4j&#xff08;上&#xff09;-CSDN博客 但是接口方法中&#xff0c;关于大模型的配置都是写死的&a…

好坏质检分类实战(异常数据检测、降维、KNN模型分类、混淆矩阵进行模型评估)

任务 好坏质检分类实战 task: 1、基于 data_class_raw.csv 数据&#xff0c;根据高斯分布概率密度函数&#xff0c;寻找异常点并剔除 2、基于 data_class_processed.csv 数据&#xff0c;进行 PCA 处理&#xff0c;确定重要数据维度及成分 3、完成数据分离&#xff0c;数据分离…

以少学习:通过无标签数据从大型语言模型进行知识蒸馏

Learning with Less: Knowledge Distillation from Large Language Models via Unlabeled Data 发表&#xff1a;NNACL-Findings 2025 机构&#xff1a;密歇根州立大学 Abstract 在实际的自然语言处理&#xff08;NLP&#xff09;应用中&#xff0c;大型语言模型&#xff08…

EasyExcel使用

EasyExcel 简介 EasyExcel 是阿里巴巴开源的一个基于 Java 的简单、省内存的读写 Excel 工具。在处理大量数据时&#xff0c;它能极大地减少内存占用&#xff0c;提高性能。下面从依赖配置、模板使用到代码调用&#xff0c;进行详细介绍。 添加依赖 若要在项目里使用 EasyEx…

文件类型汇总

一、文档类文件 Microsoft Office 文档&#xff1a;.doc、.docx&#xff08;Word 文档&#xff09;、.xls、.xlsx&#xff08;Excel 表格&#xff09;、.ppt、.pptx&#xff08;PowerPoint 演示文稿&#xff09; OpenOffice/LibreOffice 文档&#xff1a;.odt&#xff08;文字…

OpenCV CUDA模块图像处理------颜色空间处理之拜耳模式去马赛克函数demosaicing()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 该函数用于在 GPU 上执行拜耳图像&#xff08;Bayer Pattern&#xff09;的去马赛克操作&#xff08;Demosaicing&#xff09;&#xff0c;将单通…

Linux: 守护进程

Linux&#xff1a; 守护进程 &#xff08;一&#xff09;前台进程和后台进程前台进程后台进程 &#xff08;二&#xff09;会话、进程组、进程的关系&#xff08;三&#xff09;守护进程创建守护进程 &#xff08;一&#xff09;前台进程和后台进程 前台进程 前台进程是指当前…

6.4.5_关键路径

AOE网&#xff1a; 用EEdge表示活动&#xff0c;AOV网是用Vertex顶点表示活动 仅有一个入度0的顶点叫开始顶点(源点)&#xff0c;出度0的顶点叫结束顶点(汇点) 各条边表示活动&#xff0c;边上的权值表示完成该活动的开销&#xff0c;各顶点表示事件&#xff0c;事件是就发生…

Oracle 的 TX、TM、UL 锁对比

Oracle 的 TX、TM、UL 锁对比 Oracle 数据库中的这三种锁机制在并发控制中扮演着不同角色&#xff0c;以下是它们的对比分析&#xff1a; 一、基本特性对比 特性TX (事务锁)TM (DML锁)UL (用户锁)锁类型行级锁表级锁应用级自定义锁作用范围保护数据行变更保护表结构不被修改…

Kruskal-Wallis检验 vs. 多次Wilcoxon检验:多重比较-spss

在补充图6中&#xff0c;对喉镜形态分类、病理类型和病程使用 Wilcoxon秩和检验&#xff08;Mann-Whitney U检验&#xff09; 结合 Bonferroni校正&#xff0c;而非 Kruskal-Wallis检验加Dunn’s检验&#xff0c;原因如下&#xff1a; 1. 方法选择的依据 (1) 变量类型与比较组…

vue3+element-plus el-date-picker日期、年份筛选设置本周、本月、近3年等快捷筛选

一、页面代码&#xff1a; <template> <!-- 日期范围筛选框 --> <el-date-picker v-model"dateRange" value-format"YYYY-MM-DD" type"daterange" range-separator"至" start-placeholder"开始日期" end-…

MySQL 关于用户的权限信息查看

1: 先连接mysql : [rootxx ~]# mysql -u admin -p -h 8.8.8.8 -P 3306 Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 38 Server version: 8.0.41 Source distribution Copyright (c) 2000, 2025, Oracle and/or …

C++ STL stack容器使用详解

一、stack容器概述 stack容器适配器是C标准模板库(STL)中实现后进先出(LIFO)数据结构的重要组件&#xff0c;它通过封装底层容器&#xff08;如deque/vector/list&#xff09;提供栈操作接口。 二、stack核心操作详解 1. 容器构造方式 // 默认使用deque存储元素 stack<i…

科技趋势分析系统 BBC (Big Bang of Computing)

科技趋势分析系统 BBC (Big Bang of Computing) 技术文档 1. 项目概述 BBC (Big Bang of Computing) 是一个基于 arXiv 论文数据的科技趋势分析系统&#xff0c;旨在通过分析海量的学术文献&#xff0c;结合大语言模型&#xff08;LLM&#xff09;进行增强分析&#xff0c;提…

尚硅谷redis7 55-57 redis主从复制之理论简介

55 redis主从复制之理论简介 定义 Redis 主从复制&#xff08;Master-Slave Replication&#xff09;是 Redis 提供的一种数据冗余和高可用机制&#xff0c;可以让一个 Redis 主节点的数据复制到一个或多个从节点&#xff0c;实现读写分离、容灾备份等功能。 主节点&#xff…