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下读写寄存器的方法,所述方法包括:从应用层获取指定寄存 ...
【技术保护点】
1.一种Linux下读写寄存器的方法,其特征在于,所述方法包括:从应用层获取指定寄存器的参数,所述参数包括:寄存器位宽、物理地址以及待读取数据的个数,或,寄存器位宽、物理地址以及待写入的寄存器值;对指定寄存器的参数进行解析,并根据寄存器位宽将解析后的数据分别传输至内核层;将指定寄存器的物理地址重映射到内核的线程空间;在内核层根据指定寄存器的读写接口对指定寄存器进行读写;将对指定寄存器读写的结果返回至应用层。
【技术特征摘要】
1.一种Linux下读写寄存器的方法,其特征在于,所述方法包括:从应用层获取指定寄存器的参数,所述参数包括:寄存器位宽、物理地址以及待读取数据的个数,或,寄存器位宽、物理地址以及待写入的寄存器值;对指定寄存器的参数进行解析,并根据寄存器位宽将解析后的数据分别传输至内核层;将指定寄存器的物理地址重映射到内核的线程空间;在内核层根据指定寄存器的读写接口对指定寄存器进行读写;将对指定寄存器读写的结果返回至应用层。2.根据权利要求1所述的一种Linux下读写寄存器的方法,其特征在于,所述方法还包括:将对指定寄存器读写的结果返回至应用层后,对指定寄存器的物理地址解除重映射。3.根据权利要求1所述的一种Linux下读写寄存器的方法,其特征在于,从应用层获取指定寄存器的参数之后,所述方法还包括:对所获取的指定寄存器的参数进行检测,判断所述参数是否符合预设的参数输入规则;如果是,对指定寄存器的参数进行解析;如果否,通过调用print_usage()函数,打印参数输入规则至应用层,直到所获取的参数符合要求为止。4.根据权利要求1-3中任意一项所述的一种Linux下读写寄存器的方法,其特征在于,在内核层根据指定寄存器的读写接口对指定寄存器进行读写时,根据当前指定寄存器的硬件逻辑设置一超时时间,用于控制指定寄存器的工作状态。5.根据权利要求4所述的一种Linux下读写寄存器的方法,其特征在于,所述在内核层根据指定寄存器的读写接口对指定寄存器进行读写时,根据当前的指定寄存器的硬件逻辑设置一超时时间,用于控制指定寄存器的工作状态,包括:判断当前的指定寄存器是否处于工作状态;如果是,根据当前的指定寄存器的硬件逻辑设置一超时时间,直到指定寄存器处于空闲状态时开始读写;如果否,...
【专利技术属性】
技术研发人员:王鹏,
申请(专利权)人:郑州云海信息技术有限公司,
类型:发明
国别省市:河南,41
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。