一种Linux下读写寄存器的方法及工具技术

技术编号:18913349 阅读:26 留言:0更新日期:2018-09-12 02:54
本申请公开了一种Linux下读写寄存器的方法及工具。该方法包括:从应用层获取指定寄存器的参数;对指定寄存器的参数进行解析,并根据寄存器位宽将解析后的数据分别传输至内核层;将指定寄存器的物理地址重映射到内核的线程空间;在内核层根据指定寄存器的读写接口对指定寄存器进行读写;将对指定寄存器读写的结果返回至应用层。该读写寄存器的工具包括regeditor模块和ker_rw模块。本申请中读写寄存器的工具,能够在不同的寄存器之间跨平台使用,有利于提高其通用性。采用本申请中的方法对寄存器进行读写,能够为项目调试提供一些关键的调试信息,有利于缩短问题的定位时间,有利于提高项目调试的效率。

A method and tool for reading and writing registers under Linux

This application discloses a method and tool for reading and writing registers under Linux. The method includes: obtaining the parameters of the specified register from the application layer; parsing the parameters of the specified register, and transferring the parsed data to the kernel layer according to the register bit width; remapping the physical address of the specified register to the thread space of the kernel; and matching the parameters of the specified register according to the read-write interface of the specified register in the kernel layer. The specified register is read and written; the result of the read and write of the specified register is returned to the application layer. The tools for reading and writing registers include regeditor module and ker_rw module. The tool for reading and writing registers in this application can be used across platforms between different registers, which is beneficial to improving their versatility. Using the method in this application to read and write registers can provide some key debugging information for project debugging, which is conducive to shortening the problem location time and improving the efficiency of project debugging.

【技术实现步骤摘要】
一种Linux下读写寄存器的方法及工具
本申请涉及寄存器调试
,特别是涉及一种Linux下读写寄存器的方法及工具。
技术介绍
项目开发调试中,经常会遇到上层业务逻辑触发硬件寄存器读写的情况,而寄存器状态是软件对硬件施加影响后的硬件现场记录。项目调试过程中,一个问题的出现可能来自上层业务、底层驱动、硬件设计或对端逻辑中的任何一方。这时,通过对硬件寄存器进行读写,获取到硬件寄存器的状态信息,就可以定位出问题出在哪里,并进一步配合细节调试。因此,项目开发调试过程中,如果出现I/O异常,就有监测/改写寄存器的调试需求。目前,常用的硬件寄存器读写方法主要是采用/dev/mem设备节点编写读写寄存器的工具。具体地,通过编程生成/dev/mem设备文件,然后通过/dev/mem设备文件以及mmap函数,将硬件寄存器的地址映射到用户空间,直接在应用层对硬件寄存器进行读写操作。然而,目前常用的硬件读写寄存器的工具及其实现方法中,/dev/mem设备文件与硬件寄存器工具所在平台的总线位宽有关,不同的/dev/mem设备文件适用于不用总线位宽的平台,如:在32位ARM平台上编译得到的硬件读写寄存器的工具,拿到64位X86平台上就不能使用。因此,目前常用的硬件读写寄存器的工具不具备跨平台的通用性,使用起来非常不方便,不便于推广。
技术实现思路
本申请提供了一种Linux下读写寄存器的方法及工具,以解决现有技术中硬件读写寄存器的工具不具备跨平台的通用性的问题。为了解决上述技术问题,本申请实施例公开了如下技术方案:一种Linux下读写寄存器的方法,所述方法包括:从应用层获取指定寄存器的参数,所述参数包括:寄存器位宽、物理地址以及待读取数据的个数,或,寄存器位宽、物理地址以及待写入的寄存器值;对指定寄存器的参数进行解析,并根据寄存器位宽将解析后的数据分别传输至内核层;将指定寄存器的物理地址重映射到内核的线程空间;在内核层根据指定寄存器的读写接口对指定寄存器进行读写;将对指定寄存器读写的结果返回至应用层。可选地,所述方法还包括:将对指定寄存器读写的结果返回至应用层后,对指定寄存器的物理地址解除重映射。可选地,从应用层获取指定寄存器的参数之后,所述方法还包括:对所获取的指定寄存器的参数进行检测,判断所述参数是否符合预设的参数输入规则;如果是,对指定寄存器的参数进行解析;如果否,通过调用print_usage()函数,打印参数输入规则至应用层,直到所获取的参数符合要求为止。可选地,在内核层根据指定寄存器的读写接口对指定寄存器进行读写时,根据当前指定寄存器的硬件逻辑设置一超时时间,用于控制指定寄存器的工作状态。可选地,所述在内核层根据指定寄存器的读写接口对指定寄存器进行读写时,根据当前的指定寄存器的硬件逻辑设置一超时时间,用于控制指定寄存器的工作状态,包括:判断当前的指定寄存器是否处于工作状态;如果是,根据当前的指定寄存器的硬件逻辑设置一超时时间,直到指定寄存器处于空闲状态时开始读写;如果否,直接在内核层根据指定寄存器的读写接口对指定寄存器进行读写。一种Linux下读写寄存器的工具,所述读写寄存器的工具包括:regeditor模块和ker_rw模块;所述regeditor模块面向应用层,用于获取指定寄存器的参数,其中,所述参数包括:寄存器位宽、物理地址以及待读取数据的个数,或,寄存器位宽、物理地址以及待写入的寄存器值;所述regeditor模块,还用于对指定寄存器的参数进行解析,并根据寄存器位宽将解析后的数据分别传输至ker_rw模块;所述ker_rw模块面向内核层,用于将指定寄存器的物理地址重映射到ker_rw模块内核的线程空间,并根据指定寄存器的读写接口对指定寄存器进行读写;所述ker_rw模块,还用于将对指定寄存器读写的结果返回至regeditor模块。可选地,所述regeditor模块,还用于对所获取的指定寄存器的参数进行检测,判断所述参数是否符合预设的参数输入规则。可选地,所述ker_rw模块,还用于将对指定寄存器读写的结果返回至regeditor模块后,对指定寄存器的物理地址解除重映射。可选地,所述ker_rw模块中设置有延时单元,用于在内核层根据指定寄存器的读写接口对指定寄存器进行读写时,根据当前的指定寄存器的硬件逻辑设置一超时时间,用于控制指定寄存器的工作状态。可选地,所述读写寄存器的工具包括:一面向应用层的可执行文件和一面向内核层的.ko文件。本申请的实施例提供的技术方案可以包括以下有益效果:本申请提供一种Linux下读写寄存器的方法,该方法主要通过面向应用层和内核层进行编程,来实现对寄存器的读写。其中,首先从应用层获取指定寄存器的参数;其次对指定寄存器的参数进行解析,并根据寄存器位宽将解析后的数据分别传输至内核层;然后,在内核层中,将指定寄存器的物理地址重映射到内核的线程空间,并在内核层根据指定寄存器的读写接口对指定寄存器进行读写;最后,将对指定寄存器读写的结果返回至应用层,以作为调试用的关键信息供工作人员查看。本申请中对寄存器的参数解析后,是根据寄存器位宽将解析后的数据分别传输至内核层,且在内核层根据指定寄存器的读写接口对指定寄存器进行读写,能够使本申请中读写寄存器的方法应用于不同位宽的寄存器,从而使本方法能够在不同的寄存器之间跨平台使用,有利于提高其通用性。而且,本方法涉及应用层和内核层两部分的编程,深入应用层和内核层对寄存器进行读写,从而对寄存器的状态进行跟踪记录,能够为项目调试提供一些关键的调试信息,有利于缩短问题的定位时间,有利于提高项目调试的效率。另外,本申请的一个实施例中还包括:在内核层根据指定寄存器的读写接口对指定寄存器进行读写时,根据当前指定寄存器的硬件逻辑设置一超时时间,用于控制指定寄存器的工作状态。当指定寄存器当前处于工作状态时,设置一超时时间,直到其处于空闲状态时再进行读写。超时时间的设置,能够根据指定寄存器当前的工作状态灵活调整读写工作,从而能够使本方法兼顾更多的读写情形。本申请还提供一种Linux下读写寄存器的工具。该工具主要包括regeditor模块和ker_rw模块,其中regeditor模块面向应用层,用于获取指定寄存器的参数,还用于对指定寄存器的参数进行解析,并根据寄存器位宽将解析后的数据分别传输至ker_rw模块;ker_rw模块面向内核层,用于将指定寄存器的物理地址重映射到ker_rw模块内核的线程空间,并根据指定寄存器的读写接口对指定寄存器进行读写,还用于将对指定寄存器读写的结果返回至regeditor模块。本申请实施例中的regeditor模块,是根据寄存器位宽将解析后的数据分别传输至ker_rw模块,而且ker_rw模块根据指定寄存器的读写接口对指定寄存器进行读写,因此,能够使得本申请适用于不同位宽的寄存器,实现跨平台兼容性,有利于提高本申请实施例的通用性。应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。附图说明为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。本文档来自技高网...

【技术保护点】
1.一种Linux下读写寄存器的方法,其特征在于,所述方法包括:从应用层获取指定寄存器的参数,所述参数包括:寄存器位宽、物理地址以及待读取数据的个数,或,寄存器位宽、物理地址以及待写入的寄存器值;对指定寄存器的参数进行解析,并根据寄存器位宽将解析后的数据分别传输至内核层;将指定寄存器的物理地址重映射到内核的线程空间;在内核层根据指定寄存器的读写接口对指定寄存器进行读写;将对指定寄存器读写的结果返回至应用层。

【技术特征摘要】
1.一种Linux下读写寄存器的方法,其特征在于,所述方法包括:从应用层获取指定寄存器的参数,所述参数包括:寄存器位宽、物理地址以及待读取数据的个数,或,寄存器位宽、物理地址以及待写入的寄存器值;对指定寄存器的参数进行解析,并根据寄存器位宽将解析后的数据分别传输至内核层;将指定寄存器的物理地址重映射到内核的线程空间;在内核层根据指定寄存器的读写接口对指定寄存器进行读写;将对指定寄存器读写的结果返回至应用层。2.根据权利要求1所述的一种Linux下读写寄存器的方法,其特征在于,所述方法还包括:将对指定寄存器读写的结果返回至应用层后,对指定寄存器的物理地址解除重映射。3.根据权利要求1所述的一种Linux下读写寄存器的方法,其特征在于,从应用层获取指定寄存器的参数之后,所述方法还包括:对所获取的指定寄存器的参数进行检测,判断所述参数是否符合预设的参数输入规则;如果是,对指定寄存器的参数进行解析;如果否,通过调用print_usage()函数,打印参数输入规则至应用层,直到所获取的参数符合要求为止。4.根据权利要求1-3中任意一项所述的一种Linux下读写寄存器的方法,其特征在于,在内核层根据指定寄存器的读写接口对指定寄存器进行读写时,根据当前指定寄存器的硬件逻辑设置一超时时间,用于控制指定寄存器的工作状态。5.根据权利要求4所述的一种Linux下读写寄存器的方法,其特征在于,所述在内核层根据指定寄存器的读写接口对指定寄存器进行读写时,根据当前的指定寄存器的硬件逻辑设置一超时时间,用于控制指定寄存器的工作状态,包括:判断当前的指定寄存器是否处于工作状态;如果是,根据当前的指定寄存器的硬件逻辑设置一超时时间,直到指定寄存器处于空闲状态时开始读写;如果否,...

【专利技术属性】
技术研发人员:王鹏
申请(专利权)人:郑州云海信息技术有限公司
类型:发明
国别省市:河南,41

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1