慢慢欣赏arm64内核启动6 primary_entry之el2_setup代码第三部分
分析代码
解析完虚拟化部分,我们继续分析启动过程中,对中断控制器的处理
#ifdef CONFIG_ARM_GIC_V3/* GICv3 system register access */mrs x0, id_aa64pfr0_el1ubfx x0, x0, #ID_AA64PFR0_GIC_SHIFT, #4cbz x0, 3fmrs_s x0, SYS_ICC_SRE_EL2orr x0, x0, #ICC_SRE_EL2_SRE // Set ICC_SRE_EL2.SRE==1orr x0, x0, #ICC_SRE_EL2_ENABLE // Set ICC_SRE_EL2.Enable==1msr_s SYS_ICC_SRE_EL2, x0isb // Make sure SRE is now setmrs_s x0, SYS_ICC_SRE_EL2 // Read SRE back,tbz x0, #0, 3f // and check that it sticksmsr_s SYS_ICH_HCR_EL2, xzr // Reset ICC_HCR_EL2 to defaults3:
#endif
系统寄存器ID_AA64PFR0_EL1
第3行 ID_AA64PFR0_EL1 表示系统寄存器 AArch64 Processor Feature Register 0
芯片手册这样描述该寄存器:Provides additional information about implemented PE features in AArch64 state
也就是说,该寄存器描述了AArch64下PE的一些附加扩展信息
该寄存器的值被读取到了x0寄存器中
第4行ID_AA64PFR0_GIC_SHIFT的宏定义如下:
#define ID_AA64PFR0_GIC_SHIFT 24
我们从芯片手册查看系统寄存器 id_aa64pfr0_el1 的bit[27:24],其含义如下:
GIC, bits [27:24]
System register GIC interface support. Defined values are:
0b0000 No System register interface to the GIC is supported.
0b0001 System register interface to versions 3.0 and 4.0 of the GIC CPU interface is supported.
All other values are reserved.
bit[27:24]的值如果为1,则表示支持中断控制器的系统控制器接口;如果值为0,则表示不支持中断控制器的系统寄存器接口
该行语句把bit[27:24]提取出来并重新放到了x0寄存器里面
第5行表示,如果刚才提取的值为0,则表示不支持中断控制器系统寄存器的访问,则不需要对中断控制器系统寄存器的配置,直接跳转到第17行,标号3。
如果为0,则继续执行。
中断相关寄存器ICC_SRE_EL2
第7行,ICC_SRE_EL2, Interrupt Controller System Register Enable register (EL2)表示中断控制器使能寄存器
我们把其值获取并存放在x0寄存器中
第8行,ICC_SRE_EL2_SRE 的宏定义如下:
#define ICC_SRE_EL2_SRE (1 << 0)
SRE, bit [0]
System Register Enable.
0b0 The memory-mapped interface must be used. Access at EL2 to any ICH_* or ICC_* register other than ICC_SRE_EL1 or ICC_SRE_EL2, is trapped to EL2.
0b1 The System register interface to the ICH_* registers and the EL1 and EL2 ICC_* registers is enabled for EL2
其中ICH_ 和 ICC_ 寄存器**:这些寄存器是中断控制器(Interrupt Controller)的一部分,用于管理中断和异常。ICH(Interrupt Controller Host)和ICC(Interrupt Controller Client)寄存器集包含了控制中断行为的寄存器。不同的寄存器有不同的功能,比如设置中断优先级、使能或禁用中断等。
ICC_SRE_EL1 和 ICC_SRE_EL2:这两个寄存器是特定于安全性的寄存器,用于控制中断在系统寄存器(System Register)访问时的安全行为。它们分别在EL1(异常级别1,通常用于用户空间和操作系统内核)和EL2级别提供对中断安全行为的控制。
捕获(Trapped):在ARM架构中,当某个操作或访问尝试违反了当前执行级别的权限或规则时,这个操作会被“捕获”。在虚拟化环境中,这通常意味着控制权会被转移到虚拟机监控器(Hypervisor),后者会决定如何处理这个违反情况
也就是说,该寄存器bit[0]如果设置为0,则表示如果我们在EL2级别尝试访问ICH或ICC系列中的任何寄存器(除了ICC_SRE_EL1和ICC_SRE_EL2这两个安全性寄存器),这个访问请求会被捕获,并且控制权会被转移到EL2级别的处理程序(如虚拟机监控器),而不是直接执行该访问操作。这样的设计有助于保护中断控制器的关键寄存器不被不适当或未授权的访问所影响。
如果寄存器bit[0]的值为1,对于EL2级别,通过系统寄存器访问ICH_寄存器以及EL1和EL2级别的ICC_寄存器的系统寄存器接口是被使能的。
该行语句就是将bit[0]设置为1
第9行 ICC_SRE_EL2_ENABLE 的宏定义如下
#define ICC_SRE_EL2_ENABLE (1 << 3)
芯片手册的描述如下:
Enable, bit [3]
Enable. Enables lower Exception level access to ICC_SRE_EL1.
0b0 When EL2 is implemented and enabled in the current Security state, EL1 accesses to ICC_SRE_EL1 trap to EL2.
0b1 EL1 accesses to ICC_SRE_EL1 do not trap to EL2.
意思是,该bit规定了较低级别的异常级别对于 ICC_SRC_EL1 的访问。
如果bit[3]为0,则表示EL1异常级别下如果访问系统寄存器 ICC_SRE_EL1 将陷入到 EL2
如果bit[3]为1,则EL1异常级别下如果访问系统寄存器 ICC_SRE_EL1 不会陷入到 EL2。
简而言之,ICC_SRE_EL2_ENABLE的位[3]是一个控制位,用于决定EL1级别的软件是否可以直接访问ICC_SRE_EL1寄存器,或者其访问是否应该被捕获到EL2级别进行进一步的处理。这在实现虚拟化或安全隔离时非常有用,因为它允许虚拟机监控器控制虚拟机内操作系统对中断安全寄存器的访问。
该行语句将bit[3]设置为1
第10行表示将刚才设置的bit[0]和bit[3]回写到系统寄存器 ICC_SRE_EL2 中。
第12行表示重新读取 ICC_SRE_EL2 寄存器x0
第13行使用tbz指令,该指令的含义如下:
在ARM64架构的上下文中,tbz是一个条件分支指令,全称是“Test and Branch if Zero”。这个指令用于测试一个寄存器中的指定位是否为0,并根据结果决定是否进行分支跳转
也就是说,我们设置完ICC_ SRE_EL2 的bit0]和bit[3]之后,重新读取 ICC_SRE_EL2 寄存器x0之后,判断bit[0]是否为0,如果为0,则跳转到16行,否则继续执行下一行语句
中断相关寄存器ICH_HCR_EL2
第14行涉及到ICH_HCR_EL2,该寄存器全称Interrupt Controller Hyp Control Register,即中断控制器超维控制寄存器,是ARM架构中的一个系统寄存器,特别是在支持虚拟化(如GICv3或更高版本)的ARMv8-A架构中非常关键。这个寄存器用于控制中断控制器(如GIC,即Generic Interrupt Controller)在虚拟化环境下的行为,特别是在处理物理中断和虚拟中断时的交互和路由。
我们在这里将该寄存器清零,后续启动过程中进行初始化。
相关文章:
慢慢欣赏arm64内核启动6 primary_entry之el2_setup代码第三部分
分析代码 解析完虚拟化部分,我们继续分析启动过程中,对中断控制器的处理 #ifdef CONFIG_ARM_GIC_V3/* GICv3 system register access */mrs x0, id_aa64pfr0_el1ubfx x0, x0, #ID_AA64PFR0_GIC_SHIFT, #4cbz x0, 3fmrs_s x0, SYS_ICC_SRE_EL2orr x0, x…...

初谈Linux多线程--线程控制
文章目录 线程的概述理解线程Linux中的线程重新理解的进程Windows的线程线程的优点线程的缺点理解线程调度成本低 进程VS线程 线程控制创建线程等待线程线程函数传参线程的返回值新线程的返回值新线程返回值错误返回值为类对象 创建多线程线程的终止线程的分离pthread_detach 线…...
文件工具类 - FileUtils
Slf4j Component public class FileUtils {/*** 文件夹复制到指定的文件夹*/SneakyThrowspublic static void copyDir(File source, File target) {if (!target.exists()) {boolean mkdirs target.mkdirs();}if (source.isDirectory()) {File[] files source.listFiles();if …...
Kafka源码剖析-Producer基于内存缓存池分配ByteBuffer
文章目录 在将消息发送到内存缓中区之前做的准备工作发送消息前的准备工作代码示例源码分析1. **消息序列化**2. **元数据准备**3. **分区选择**4. **批处理准备**总结大致浏览一下源码中将消息写入内存缓冲的运行流程源码分析1. **消息序列化和创建记录批次**2. **确定分区**3…...
实习十九:学习笔记
上午 1、构建vue发行版本 [rootserver ~]# cd eleme_web/ [rootserver eleme_web]# npm run buid //项目未执行时运行该命令,创建发行版本 [rootserver eleme_web]# cd dist/ //dist中包含发行版本的所有文件 [rootserver dist]# ls css favicon.ico i…...

OrionX:革新GPU资源管理,助力AI开发团队高效运作
您的AI开发团队是否经常陷入这样的窘境: 人多卡少,GPU资源难以满足每个成员的需求? 当开发环境中需要变更GPU卡配置时,流程繁琐不堪,不得不关闭容器、重新配置再重启? 是否曾因GPU卡分配后未被充分利用而…...

RabbitMQ发送者重连、发送者确认
RabbitMQ发送者重连、发送者确认 一、发送者重连 spring:rabbitmq:connection-timeout: 1s #设置MQ的连接超时时间template:retry:enabled: true #开启超时重试机制initial-interval: 1000ms #失败后的初始等待时间multiplier: 1 #失败后下次的等待时长倍数,下次等…...

请转告HPC计算AI计算单位,选对存储事半功倍
U.2 NVMe全闪混合统一存储GS 5000U是Infortrend产品中一款高性能机型。得益于搭载强劲的第五代IntelXeon处理器,以及支持PCIe 5.0、NVMe-oF、100GbE等多种特点,GS 5000U单台块级性能可达50 GB/s的读、20 GB/s的写,以及1300K的IOPS;…...

[GYCTF2020]Blacklist1
打开题目 判断注入类型,输入1试试 输入2 输入1 判断为字符型注入 堆叠查询2;show databases;# 然后来输入2; show tables;#来查看数据库的表 然后我们通过FlagHere表来查看列输入2;show columns from FlagHere;# 来查看列 、 重新构造payload:0;HAND…...

Blackcat V2.2付费会员制WordPress资源站主题
Blackcat-付费会员制WordPress资源站主题,该主题是基于简约实用的主题选项框架 Codestar Framework 进行开发的功能强大的付费会员制主题,该主题尤其适合用于搭建付费下载资源网站,比如素材站、软件站、视频教程站等付费资源下载网站。 集成…...
动手学强化学习 第 18 章 离线强化学习 训练代码
基于 https://github.com/boyu-ai/Hands-on-RL/blob/main/%E7%AC%AC18%E7%AB%A0-%E7%A6%BB%E7%BA%BF%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0.ipynb 理论 离线强化学习 修改了警告和报错 运行环境 Debian GNU/Linux 12 Python 3.9.19 torch 2.0.1 gym 0.26.2 运行代码 CQL.…...
Python笔试面试题AI答之面向对象常考知识点
Python面向对象面试题面试题覆盖了Python面向对象编程(OOP)的多个重要概念和技巧,包括元类(Metaclass)、自省(Introspection)、面向切面编程(AOP)和装饰器、重载…...
面试经典算法150题系列-数组/字符串操作之买卖股票最佳时机
买卖股票最佳时机 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从这笔交易…...

安装jdk和tomcat
安装nodejs 1.安装nodejs,这是一个jdk一样的软件运行环境 yum -y list installed|grep epel yum -y install nodejs node -v 2.下载对应的nodejs软件npm yum -y install npm npm -v npm set config .....淘宝镜像 3.安装vue/cli command line interface 命令行接…...
mongodb 备份还原
### 加入 MongoDB 官方 repositoryecho [mongodb-org-4.4] nameMongoDB Repository baseurlhttps://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.4/x86_64/ gpgcheck1 enabled1 gpgkeyhttps://www.mongodb.org/static/pgp/server-4.4.asc| tee /etc/yum.repos.d/mo…...

day27——homework
1、使用两个线程完成两个文件的拷贝,分支线程1拷贝前一半,分支线程2拷贝后一半,主线程回收两个分支线程的资源 #include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <fcntl.h> #include <uni…...

shell脚本自动化部署
1、自动化部署DNS [rootweb ~]# vim dns.sh [roottomcat ~]# yum -y install bind-utils [roottomcat ~]# echo "nameserver 192.168.8.132" > /etc/resolv.conf [roottomcat ~]# nslookup www.a.com 2、自动化部署rsync [rootweb ~]# vim rsync.sh [rootweb ~]# …...

C语言| 文件操作详解(二)
目录 四、有关文件的随机读写函数 4.1 fseek 4.2 ftell 4.3 rewind 五、判定文件读取结束的标准与读写文件中途发生错误的解决办法 5.1 判定文件读取结束的标准 5.2 函数ferror与feof 5.2.1 函数ferror 5.2.2 函数feof 在上一章中,我们主要介绍了文件类型…...

保证项目如期上线,测试人能做些什么?
要保证项目按照正常进度发布,需要整个研发团队齐心协力。 有很多原因都可能会造成项目延期。 1、产品经理频繁修改需求 2、开发团队存在技术难题 3、测试团队测不完 今天我想跟大家聊一下,测试团队如何保证项目按期上线,以及在这个过程中可能…...
【杂谈】在大学如何学得计算机知识,浅谈大一经验总结
大学新生的入门经验简谈 我想在学习编程这条路上,很多同学感到些许困惑,摸爬滚打一年,转眼就要进入大二学习了,下面浅谈个人经验与反思总结。倘若说你是迷茫的,希望这点经验对你有帮助;但倘若你有更好的建…...

label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...

定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...