一个查看armv8系统寄存器-值-含义的方式

找到解压后的SysReg_xml_v86A-2019-12目录

wget https://developer.arm.com/-/media/developer/products/architecture/armv8-a-architecture/2019-12/SysReg_xml_v86A-2019-12.tar.gz
wget https://developer.arm.com/-/media/developer/products/architecture/armv8-a-architecture/2019-12/A64_ISA_xml_v86A-2019-12.tar.gz
wget https://developer.arm.com/-/media/developer/products/architecture/armv8-a-architecture/2019-12/AArch32_ISA_xml_v86A-2019-12.tar.gz

tar zxf A64_ISA_xml_v86A-2019-12.tar.gz
tar zxf AArch32_ISA_xml_v86A-2019-12.tar.gz
tar zxf SysReg_xml_v86A-2019-12.tar.gz

替换脚本中的dir_path路径

from xml.dom.minidom import parseString
import sys
import os
import re

GREEN = '\033[32m'
RED = '\033[31m'
YELLOW = '\033[33m'
END_COLOR = '\033[0m'


def print_red(content):
    print(RED + content + END_COLOR)


def print_green(content):
    print(GREEN + content + END_COLOR)


def print_yellow(content):
    print(YELLOW + content + END_COLOR)


def bit_32(value):
    result = str(bin(int(value)).replace("0b", "").zfill(32))
    reversed_content = ''.join(reversed(result))
    return reversed_content


def bit_64(value):
    result = str(bin(int(value)).replace("0b", "").zfill(64))
    reversed_content = ''.join(reversed(result))
    return reversed_content

def parse_system_register_xml(file_path, register_value):
    f = open(file_path)
    lines = f.read()
    xml_string = lines.replace("<arm-defined-word>", "").replace("</arm-defined-word>", "").replace("<binarynumber>", '').\
        replace("</binarynumber>", "").replace("<instruction>", '').replace("</instruction>", '')

    xml_string = re.sub("<register_link[\w\W]*?>", '', xml_string)
    xml_string = re.sub("</register_link>", '', xml_string)

    dom = parseString(xml_string)
    data = dom.documentElement
    field = data.getElementsByTagName('field')
    # 获取该寄存器的bit长度
    bit_len = int(data.getElementsByTagName('fields')[0].getAttribute('length'))
    content = "Not value"
    if bit_len == 64:
        content = bit_64(register_value)
    elif bit_len == 32:
        content = bit_32(register_value)

    for field_signal in field:
        print("------------------------------------------------------------------------------------------------")
        id = field_signal.getAttribute('id')
        # print(str(id))
        field_name = field_signal.getElementsByTagName('field_name')[0].childNodes[0].nodeValue
        field_msb = field_signal.getElementsByTagName('field_msb')[0].childNodes[0].nodeValue
        field_lsb = field_signal.getElementsByTagName('field_lsb')[0].childNodes[0].nodeValue
        int_field_msb = int(field_msb)
        int_field_lsb = int(field_lsb)
        field_description = field_signal.getElementsByTagName('field_description')[0].getElementsByTagName('para')[0].childNodes[0].nodeValue
        print_yellow(str(id).strip() + "\t" + str(field_description).strip())
        value = '0b' + ''.join(reversed(content[int_field_lsb:int_field_msb+1]))
        # 解析赋值
        field_value = field_signal.getElementsByTagName('field_values')[0]
        field_value_instances = field_value.getElementsByTagName('field_value_instance')
        for field_value_instance in field_value_instances:
            field_value = field_value_instance.getElementsByTagName('field_value')[0].childNodes[0].nodeValue
            field_value_description = field_value_instance.getElementsByTagName('field_value_description')[0].getElementsByTagName('para')[0].childNodes[0].nodeValue
            if field_value == value:
                if field_value == '0b0' or field_value == '0b00':
                    print_red("\t" + field_value + " :\t" + field_value_description)
                else:
                    print_green("\t" + field_value + " :\t" + field_value_description)



def search_file(arch, register_name):
    dir_path = "/Users/showme/workspace/tools/mra_tools/v8.6/SysReg_xml_v86A-2019-12"
    return dir_path + "/" + arch + "-" + register_name + ".xml"


def do(arch, register_name, register_value):
    file_path = search_file(arch, register_name)
    if not os.path.exists(file_path):
        print_red("file not found")
        exit(0)
    parse_system_register_xml(file_path, register_value)


def help():
    print("use: ./main.py AArch32|AArch64 register_name hex_register_value")
    print("use: ./main.py 32|64 register_name hex_register_value")
    exit(0)


if __name__ == '__main__':
    if len(sys.argv) != 4:
        help()

    arch = ""
    if "32" in str(sys.argv[1]):
        arch = "AArch32"
    elif "64" in str(sys.argv[1]):
        arch = "AArch64"
    else:
        help()

    register_name = str(sys.argv[2]).lower()
    register_value = int(sys.argv[3], 16)
    do(arch, register_name, register_value)

运行

python3 ./parse_xml.py AArch64 SCTLR_EL3 0x30C50830

在这里插入图片描述

参考

https://github.com/alastairreid/mra_tools
https://github.com/lelegard/arm-cpusysregs
https://github.com/ashwio/arm64-sysreg-lib

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

k8s中cert-manager管理https证书

前言 目前https是刚需,但证书又很贵,虽然阿里云有免费的,但没有泛域名证书,每有一个子域名就要申请一个证书,有效期1年,1年一到全都的更换,太麻烦了。经过搜索,发现了自动更新证书神器cert-manager;当然cert-manager是基于k8s的。 安装采用Helm方式 Chart地址: ht…

在没有鼠标或键盘的情况下在 Mac 上如何启用蓝牙?

通过这个技巧&#xff0c;小编将向您展示几种无需鼠标或键盘即可在 Mac 上重新启用蓝牙的方法。如果您想开始使用蓝牙配件&#xff0c;但还没有连接&#xff0c;这会很有用。 无需鼠标即可启用蓝牙 蓝牙是iPhone、iPad和 Mac 的标准配置。它确保您可以无线使用各种配件&#…

京东物流基于 StarRocks 的数据分析平台建设

作者&#xff1a;京东物流 数据专家 刘敬斌 小编导读&#xff1a; 京东集团 2007 年开始自建物流&#xff0c;2017 年 4 月正式成立京东物流集团&#xff0c;截至目前&#xff0c;京东物流已经构建了一套全面的智能物流系统&#xff0c;实现服务自动化、运营数字化及决策智能化…

OpenGL 入门(九)—Material(材质)和 光照贴图

文章目录 材质设置材质光的属性脚本实现 光照贴图漫反射贴图高光反射贴图 材质 材质本质是一个数据集&#xff0c;主要功能就是给渲染器提供数据和光照算法。 如果我们想要在OpenGL中模拟多种类型的物体&#xff0c;我们必须针对每种表面定义不同的材质(Material)属性。 我们…

Java on VS Code 2024年1月更新|JDK 21支持!测试覆盖率功能最新体验!

作者&#xff1a;Nick Zhu - Senior Program Manager, Developer Division At Microsoft 排版&#xff1a;Alan Wang 大家好&#xff0c;欢迎来到 Visual Studio Code for Java 2024年的第一期更新&#xff01;提前祝愿大家春节快乐&#xff01;在本博客中&#xff0c;我们将有…

C++:深入剖析默认参数

看下列代码执行结果&#xff0c;你猜一猜会输出什么&#xff1f; #include<iostream> using namespace std; struct A {virtual void fun(int a 10) {cout << "A,a"<<a;} }; struct B :public A {void fun(int a 5) {cout <<"B,a&qu…

初入外贸行业,拓展客户怎么做?这篇文章教会您

作为外贸小白&#xff0c;您是否为找不到合适的客户而苦恼&#xff1f;您是否想要拥有更多的订单和收入&#xff1f;如果您的答案是肯定的&#xff0c;那么您就需要学会如何通过CRM系统拓展目标客户。下面来说说&#xff0c;外贸小白怎么扩展目标客户&#xff1f; 1、搜集客户…

建议收藏!操作系统基础:文件系统实现【上】

&#x1f308;个人主页&#xff1a;godspeed_lucip &#x1f525; 系列专栏&#xff1a;OS从基础到进阶 &#x1f3c6;&#x1f3c6;本文完整PDF源文件请翻阅至文章底部下载。&#x1f3c6;&#x1f3c6; ⚔️1 文件系统的层次结构&#x1f527;1.1 总览&#x1f527;1.2 例子…

《动手学深度学习(PyTorch版)》笔记7.3

注&#xff1a;书中对代码的讲解并不详细&#xff0c;本文对很多细节做了详细注释。另外&#xff0c;书上的源代码是在Jupyter Notebook上运行的&#xff0c;较为分散&#xff0c;本文将代码集中起来&#xff0c;并加以完善&#xff0c;全部用vscode在python 3.9.18下测试通过&…

25.云原生ArgoCD高级之app of apps模式

文章目录 app of apps 模式介绍app如何管理apphelm方式管理kustomize方式管理 app of apps 模式介绍 通过一个app来管理其他app&#xff0c;当有多个项目要发布创建多个app比较麻烦&#xff0c;此时可以创建一个管理app&#xff0c;管理app创建后会创建其他app。比较适合项目环…

Windows显示空的可移动磁盘的解决方案

123  大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式…

stack_queue:三个关键注意事项解析

一、stack与容器 template<class T, class Container> class stack { private:Container _con; };Container 为容器&#xff0c;在实例化创建对象时&#xff0c;我们可以传 vector<T> 或 list<T> 等作为栈的底层。 举例&#xff1a; int main() {stack<i…

【css】css国际色标卡卡板-收藏

CSS3 国际标准色卡板 - 踏得网

C++——位图与布隆过滤器

目录 一&#xff0c;位图 1.1 关于大量数据的问题 1.2 位图概念 1.3 位图模拟实现 1.4 位图的应用 1.5 位图优缺点 二&#xff0c;布隆过滤器 2.1 一些场景 2.2 布隆过滤器概念 2.3 布隆过滤器模拟实现和测试 2.4 布隆过滤器查找 2.5 布隆过滤器删除 2.6 布隆过滤器优…

Arduino 串口绘图仪简单使用

1、工具所在位置 串口绘图仪实际上是从预设的串口获取值并将其绘制在xy轴图每获取到一组数据向左滑动一个单位&#xff0c;读取数据的速度起快&#xff0c;滑动就越快。 Y轴代表来自串口的值&#xff0c;可以是单个也可以是一组 。在读取串口数据时遇到"\n"&#xf…

Redis缓存过期淘汰策略详讲

前言 查看redis最大占用内存 1&#xff09;命令查看 config get memory2&#xff09;进入redis配置文件&#xff0c;查看maxmemory vim /myredis/redis.conf3&#xff09;redis默认内存多少可用 如果不设置最大内存大小或者设置最大内存大小为0&#xff0c;在64位操作系统…

【开源】SpringBoot框架开发高校学生管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 学生管理模块2.2 学院课程模块2.3 学生选课模块2.4 成绩管理模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 学生表3.2.2 学院课程表3.2.3 学生选课表3.2.4 学生成绩表 四、系统展示五、核心代码5.1 查询课程5.2 新…

牛客——牛可乐的翻转游戏(状压,dfs)

链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 题目描述 牛可乐发明了一种新型的翻转游戏&#xff01; 在一个有 nnn 行 mmm 列的棋盘上&#xff0c;每个格子摆放有一枚棋子&#xff0c;每一枚棋子的颜色要么是黑色&#xff0c;要么是白色。…

CentOS 8 安装配置 Hadoop3.3.6 伪分布式安装方式(适用于开发和调试)

1.配置服务器ssh免密登录&#xff0c;否则后面启动会报错&#xff1a;尝试通过SSH连接到主机出现认证错误的提示 配置服务器ssh免密登录&#xff1a; 1.生成SSH密钥对&#xff08;如果尚未生成&#xff09;&#xff1a; 执行下面的命令生成密钥对&#xff0c;一直回车即可 ssh…