一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种linux系统下显卡故障快速复现的方法与流程

2022-02-22 08:33:02 来源:中国专利 TAG:


1.本技术涉及显卡故障复现技术领域,尤其涉及一种linux系统下显卡故障快速复现的方法。


背景技术:

2.显卡是个人计算机的基础组成部分之一,将计算机系统需要的显示信息进行转换,并向显示器提供逐行或隔行扫描信号,控制显示器的正确显示。显卡读取cpu存储在系统内存上的显示指令进行绘图计算,并将计算结果输出到显存。因为显卡具有独立的存储单元、计算单元、逻辑控制单元,所以当显示系统出现故障,尤其是当故障指向显卡时,故障调试起来非常困难。
3.近年来,随着芯片以及各种硬件的不断发展,对基础软件尤其是操作系统适配硬件的需求越来越越多,在此过程中显示系统在实际应用中出现的问题也越来越多。基于硬件平台的操作系统显示问题调试,尤其是与显卡交互的部分,对于开源显卡驱动由于得不到硬件厂商的技术支持的问题,目前没有好用的调试方法。由于gpu内部处理结果无法向操作系统报告更多有用的信息,当出现类似于“gpu lockup”导致显示器黑屏时,无法了解是由于显卡驱动、显卡硬件还是操作系统核心导致的显示问题,导致对于此类问题的定位就无从下手。


技术实现要素:

4.本技术提供一种linux系统下显卡故障快速复现的方法,能够快速复现显卡故障导致的显示问题。
5.有鉴于此,本技术提供了一种linux系统下显卡故障快速复现的方法,包括以下步骤:步骤s1、构建linux操作系统内核编译环境;步骤s2、编写调试代码,包括get_inject.c文件和测试项test(),所述get_inject.c文件中的代码包括用于生成用户层向显卡驱动注入测试参数的sysfs文件,以及用于显卡驱动获取用户层注入的测试参数的get_inject()函数,所述测试项test()在显卡驱动中需要复现以及调试显卡故障的位置设置,用于调用get_inject()函数获取用户层注入的测试参数和根据参数进行测试操作;步骤s3、在测试项test()中调用get_inject()获取用户层注入的测试参数并且根据测试参数进行测试。
6.可选地,所述步骤s1构建内核编译环境的步骤包括:在linux操作系统中安装内核源码包;根据源码包安装后产生的spec文件,从linux操作系统yum源安装编译依赖。
7.可选地,用于生成用户层向显卡驱动注入测试参数的sysfs文件的代码位于get_inject.c文件中。
8.可选地,所述sysfs文件系统通过系统调用向显卡驱动注入测试参数。
9.可选地,所述显卡驱动通过环形命令流和gpu进行通信。
10.可选地,所述测试项test()预先在显卡驱动中的添加位置包括设置在显卡驱动的初始化过程中、设置在渲染命令流解析的过程中、设置在存储渲染命令流的内存分配过程中以及设置在cpu向显卡写渲染命令的过程中。从以上技术方案可以看出,本技术具有以下优点:本发明一种linux系统下显卡故障快速复现的方法,利用linux内核提供的sysfs文件系统向显卡驱动注入测试参数,根据不同的测试参数可以在显卡驱动中根据需要进行各种调试。本发明首先要构建linux操作系统内核编译环境,然后编写向显卡驱动注入测试参数的源代码文件,最后在显卡驱动中需要复现、调试显卡故障的位置添加测试项,在测试项中获取测试参数并进行各种调试。采用本发明可以动态调试linux系统显卡驱动各个功能模块,快速复现显卡故障。对于类似于“gpu lockup”这一类复现故障概率很低的问题,往往要在严苛的环境下进行长时间的测试才能复现故障,可以利用本发明动态改变显卡驱动的环形缓冲区中的显示命令以及原始渲染数据,快速复现出此类概率很低的显卡故障。本发明的灵活之处在与可以在显卡驱动中需要复现、调试显卡故障的位置设置测试项,并且根据测试要求提供测试参数,可以在操作系统运行的过程中动态测试显卡故障。也可以通过脚本进行大量的自动化测试以及问题调试,大大的提高问题解决的效率。
附图说明
11.为了更清楚地表达说明本发明实施例的技术方案,下面将对实施例描述所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
12.图1为本说明书实施例中linux系统下显卡故障快速复现的方法的步骤示意图;图2为本说明书实施例中内核系统调用流程图;图3为本说明书实施例中显卡驱动与gpu通信流程图。
具体实施方式
13.为了使本技术领域的人员更好地理解本技术方案,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
14.本技术实施例适用于基于国产硬件平台的linux操作系统,硬件平台包括但不限于飞腾、龙芯、申威等架构。下面,以国产中标麒麟操作系统为例,对本技术的方法做出详细介绍。
15.参见图1,本发明的技术方案包括以下步骤:步骤s1,在国产中标麒麟操作系统(以下称中标麒麟操作系统)上构建中标麒麟操作系统内核编译环境。本实施例使用龙芯处理器作为硬件平台,其他硬件平台做相应的调整即可,方法是:
1、在中标麒麟操作系统上下载中标麒麟操作系统内核源码包,本实施例使用kernel-3.10.0-3.nd7.17.src.rpm,使用rpm软件安装源码包。
16.2、使用yum软件根据源码包安装后产生的spec文件,从中标麒麟操作系统yum源安装编译依赖。
17.步骤s2,编写调试代码,也即显卡故障快速复现方法的代码get_inject.c文件。方法是:1、在get_inject.c文件中使用中标麒麟操作系统内核数据结kobj_attribute向用户层提供可编辑的多个具有不同名字的sysfs文件,在用户层编辑此sysfs文件向显卡驱动注入测试参数。测试参数可以根据实际情况灵活定义,即可以是0或1之类的实现开关功能,也可以是一串显卡渲染命令字符串,或者其他功能的测试参数。在本实施例中通过代码生成一个名为error的sysfs文件,error的值是0或1。
18.2、在get_inject.c文件中定义用于显卡驱动获取用户层注入的测试参数的get_inject()函数,在get_inject()函数中可以做一些参数的类型转换、错误检查等额外的功能。在本实施例中get_inject()函数返回步骤1中error文件的值。
19.3、在显卡驱动中需要复现、调试显卡故障的位置设置测试项test()。此测试项test()中包括两部分内容:一,调用get_inject()函数获取用户层注入的测试参数;二,根据参数进行测试操作。此测试项test()可以设置在显卡驱动任何怀疑有问题的地方,具体包含不限于以下位置:一,设置在显卡驱动的初始化过程中;二,设置在渲染命令流解析的过程中;三,设置在存储渲染命令流的内存分配过程中;四、设置在cpu向显卡写渲染命令的过程中。在本实施例中,在cpu通过环形命令缓冲区向显卡写渲染命令时设置测试项test(),在测试项test()中调用get_inject()函数获取用户层注入的测试参数即步骤2中error的值,如果error的值是1时,将当前渲染命令的值置为空。
20.参见图2,sysfs文件系统通过系统调用向中标麒麟操作系统内核传递数据,系统调用是内核向用户层暴露的与内核通信的一种方法,首先,应用程序能直接调用的是系统提供的api,然后相应的api就会将相应的系统调用号保存到eax寄存器中,进入到中断处理函数中,这个时候就进入到了内核态了。在中断处理函数中就会调用与系统调用号相对应的那个系统调用。系统调用处理完后,将会返回到中断处理函数,返回值保存在eax寄存器中。从中断处理函数中返回到api,依旧是把返回值保存到eax寄存器中。这个时候就从内核态恢复成用户态。在api中从eax中取出值,做相应的判断返回不同的值,用以表示操作完成情况。
21.步骤s3,在测试项test()中调用get_inject()获取用户层注入的测试参数并且根据测试参数进行测试,以此快速复现显卡故障。在本实施例中,当用户层注入参数即2步骤中error的值为1时触发此测试项test()时,观察测试现象,以此判断错误的显卡渲染命令会导致什么样的显卡故障,以此快速复现显卡故障。
22.参见图3,显卡驱动与gpu主要通过环形命令缓冲区进行通信。在显卡驱动中,cpu解析通过libdrm传送来自用户层(例如浏览器)的渲染命令,并将解析后的渲染命令写入环形命令缓冲区。gpu从环形命令缓冲区读取渲染命令,并且根据渲染命令进行绘图计算,并将计算结果输出到显存,显示器扫描显存中的显示数据并且显示到屏幕上。在此过程中可以在显卡驱动中修改渲染命令验证、调试gpu故障。
23.本发明一种linux系统下显卡故障快速复现的方法,利用linux内核提供的sysfs文件系统向显卡驱动注入测试参数,根据不同的测试参数可以在显卡驱动中根据需要进行各种调试。本发明首先要构建linux操作系统内核编译环境,然后编写向显卡驱动注入测试参数的源代码文件,最后在显卡驱动中需要复现、调试显卡故障的位置添加测试项,在测试项中获取测试参数并进行各种调试。采用本发明可以动态调试linux系统显卡驱动各个功能模块,快速复现显卡故障。对于类似于“gpu lockup”这一类复现故障概率很低的问题,往往要在严苛的环境下进行长时间的测试才能复现故障,可以利用本发明动态改变显卡驱动的环形缓冲区中的显示命令以及原始渲染数据,快速复现出此类概率很低的显卡故障。本发明的灵活之处在与可以在显卡驱动中需要复现、调试显卡故障的位置设置测试项,并且根据测试要求提供测试参数,可以在操作系统运行的过程中动态测试显卡故障。也可以通过脚本进行大量的自动化测试以及问题调试,大大的提高问题解决的效率。
24.本发明的实现方案基于中标麒麟操作系统的开发环境,对基于linux内核的操作系统都能实现很好的效果,因此该方案支持国产飞腾、龙芯、申威等架构。
25.所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述方法实施例中的对应过程,可以参考前述系统实施例中的具体工作过程,作用和效果也相同,在此不再赘述。
26.本技术的说明书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本技术的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
27.在本技术所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
28.以上所述,以上实施例仅用以说明本技术的技术方案,而非对其限制;尽管参照前述实施例对本技术进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本技术各实施例技术方案的精神和范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献