当前位置: 首页 > 专利查询>清华大学专利>正文

一种驱动程序运行信息的跟踪方法及系统技术方案

技术编号:10960771 阅读:113 留言:0更新日期:2015-01-28 13:03
本发明专利技术提供了一种驱动程序运行信息的跟踪方法及系统,该方法包括:获取驱动程序的源代码;使用LLVM框架对所述源代码进行编译,并在编译后的代码中插装用于获取驱动程序的运行信息的第一代码,得到插装后的中间代码;使用LLVM框架编译所述中间代码,得到对应的汇编文件;使用GCC编译器对所述汇编文件进行编译,并对编译得到的第一目标文件和包括第二代码的第二目标文件进行编译链接,得到驱动程序文件;其中,所述第二代码用于根据所述第一代码获取的驱动程序的运行信息生成记录文件。本发明专利技术能够在驱动程序正常运行的情况下自动地根据驱动程序的运行信息生成记录文件,有助于减小测试人员的实际工作量,提高测试效率。

【技术实现步骤摘要】
一种驱动程序运行信息的跟踪方法及系统
本专利技术涉及软件测试
,具体涉及一种驱动程序运行信息的跟踪方法及系统。
技术介绍
在计算机的操作系统中,驱动程序是操作系统内核与硬件设备通信的桥梁,往往运行在内核态。程序员在设计应用程序时,往往假设驱动程序不会发生错误。但是由于驱动程序编写者对设备手册理解不足、内核接口使用不当、或是系统资源使用不规范等原因,驱动程序中往往存在大量的错误。例如,WindowsXP系统中85%的系统错误是驱动程序导致的,并且Linux系统中驱动程序引发的错误是内核的7倍左右。因此,有必要对驱动程序进行严格的调试和测试,以避免其错误的发生。作为调试和测试驱动程序过程中的重要一环,跟踪驱动程序运行信息通常都采用测试人员人工注入代码的方式实现。虽然这种方式可以应对复杂多变的测试环境,也可以直观地获取驱动程序的运行信息,但是这给测试人员带来的实际工作量可能是非常巨大的,不利于测试效率的提升。
技术实现思路
针对现有技术中的缺陷,本专利技术提供一种驱动程序运行信息的跟踪方法及系统,能够在驱动程序正常运行的情况下自动地根据驱动程序的运行信息生成记录文件,有助于减小测试人员的实际工作量,提高测试效率。第一方面,本专利技术提供了一种驱动程序运行信息的跟踪方法,该方法包括:获取驱动程序的源代码;使用LLVM框架对所述源代码进行编译,并在编译后的代码中插装用于获取驱动程序的运行信息的第一代码,得到插装后的中间代码;使用LLVM框架编译所述中间代码,得到对应的汇编文件;使用GCC编译器对所述汇编文件进行编译,并对编译得到的第一目标文件和包括第二代码的第二目标文件进行编译链接,得到驱动程序文件;其中,所述第二代码用于根据所述第一代码获取的驱动程序的运行信息生成记录文件。优选地,每当驱动程序运行至一待记录运行信息的函数时,所述第二代码用于执行以下步骤:施加自旋锁并屏蔽中断;记录所述第一代码获取的驱动程序的运行信息;解除自旋锁并开启中断。优选地,所述记录所述第一代码获取的驱动程序的运行信息的步骤,包括:将所述第一代码获取的驱动程序的运行信息写入缓存区;若缓存区已满,则将缓存区的所有数据移至一存储节点,并将该存储节点插入一缓存队列的尾部。优选地,所述第二代码还用于在驱动程序运行时建立一写文件线程,以使该写文件线程周期性地将所述缓存队列中所有存储节点中的数据按照队列顺序写入所述记录文件的尾部。优选地,所述驱动程序的运行信息包括所述驱动程序中任意多个函数的函数名、数据类型、参数值和返回值中的任意多项。第二方面,本专利技术还提供了一种驱动程序运行信息的跟踪系统,包括:获取单元,用于获取驱动程序的源代码;LLVM插装单元,用于使用LLVM框架对所述获取单元所获取的源代码进行编译,并在编译后的代码中插装用于获取驱动程序的运行信息的第一代码,得到插装后的中间代码;LLVM汇编单元,用于使用LLVM框架编译所述LLVM插装单元得到的中间代码,得到对应的汇编文件;GCC编译单元,用于使用GCC编译器对所述LLVM汇编单元得到的汇编文件进行编译,并对编译得到的第一目标文件和包括第二代码的第二目标文件进行编译链接,得到驱动程序文件;所述第二代码用于根据所述第一代码获取的驱动程序的运行信息生成记录文件。优选地,每当驱动程序运行至一待记录运行信息的函数时,所述第二代码具体用于:施加自旋锁并屏蔽中断;记录所述第一代码获取的驱动程序的运行信息;解除自旋锁并开启中断。优选地,每当驱动程序运行至一待记录运行信息的函数时,所述第二代码具体用于:施加自旋锁并屏蔽中断;将所述第一代码获取的驱动程序的运行信息写入缓存区;若缓存区已满,则将缓存区的所有数据移至一存储节点,并将该存储节点插入一缓存队列的尾部;解除自旋锁并开启中断。优选地,所述第二代码还用于在驱动程序运行时建立一写文件线程,以使该写文件线程周期性地将所述缓存队列中所有存储节点中的数据按照队列顺序写入所述记录文件的尾部。优选地,所述驱动程序的运行信息包括所述驱动程序中任意多个函数的函数名、数据类型、参数值和返回值中的任意多项。由上述技术方案可知,本专利技术通过在驱动程序中插装用于获取驱动程序的运行信息的第一代码,并利用第二代码记录第一代码获取的驱动程序的运行信息并生成记录文件,使得在运行驱动程序文件时可以自动地根据运行信息生成记录文件供测试人员查看,而不需要测试人员人工注入代码并调试运行,因此有助于减小测试人员的实际工作量,提高测试效率。当然,实施本专利技术的任一产品或方法并不一定需要同时达到以上所述的所有优点。附图说明为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单的介绍,显而易见地,下面描述中的附图是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1是本专利技术一个实施例中一种驱动程序运行信息的跟踪方法的流程示意图;图2是本专利技术一个实施例中驱动程序运行时跟踪方法在处理中断时的工作示意图;图3是本专利技术一个实施例中一种驱动程序文件的具体编译流程示意图;图4是本专利技术一个实施例中一种驱动程序运行信息的跟踪方法总体结构示意图;图5是本专利技术一个实施例中一种驱动程序运行信息的跟踪系统的结构框图。具体实施方式为使本专利技术实施例的目的、技术方案和优点更加清楚,下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。驱动程序(DeviceDriver)全称为设备驱动程序,是一种可以使计算机和设备通信的特殊程序,可以说相当于硬件的接口,操作系统只有通过这个接口,才能控制硬件设备的工作,假如某设备的驱动程序未能正确安装,该设备便不能正常工作。通常情况下,驱动程序实质上是运行在操作系统内核态的代码化指令序列,因而驱动程序的运行信息就涉及到程序所调用的函数、所使用的变量、以及所调用的资源等等。图1示出了本专利技术一个实施例中一种驱动程序运行信息的跟踪方法的流程示意图。参见图1,该方法包括:步骤101:获取驱动程序的源代码;步骤102:使用LLVM框架对所述源代码进行编译,并在编译后的代码中插装用于获取驱动程序的运行信息的第一代码,得到插装后的中间代码;步骤103:使用LLVM框架编译所述中间代码,得到对应的汇编文件;步骤104:使用GCC编译器对所述汇编文件进行编译,并对编译得到的第一目标文件和包括第二代码的第二目标文件进行编译链接,得到驱动程序文件;其中,所述第二代码用于根据所述第一代码获取的驱动程序的运行信息生成记录文件。需要说明的是,LLVM是现有技术中以C++编写而成的构架编译器(compiler)的框架系统,GCC(GNUCompilerCollection,GNU编译器套装)是现有技术中一套由GNU工程开发的支持多种编程语言的编译器。传统的Linux驱动程序可以由GCC编译器直接编译,但本专利技术实施例为了使最终得到的驱动程序文件可以正常地运行,对传统驱动程序的编译链进行了改变,使得LLVM编译器架构能够正常本文档来自技高网...
一种驱动程序运行信息的跟踪方法及系统

【技术保护点】
一种驱动程序运行信息的跟踪方法,其特征在于,该方法包括:获取驱动程序的源代码;使用LLVM框架对所述源代码进行编译,并在编译后的代码中插装用于获取驱动程序的运行信息的第一代码,得到插装后的中间代码;使用LLVM框架编译所述中间代码,得到对应的汇编文件;使用GCC编译器对所述汇编文件进行编译,并对编译得到的第一目标文件和包括第二代码的第二目标文件进行编译链接,得到驱动程序文件;其中,所述第二代码用于根据所述第一代码获取的驱动程序的运行信息生成记录文件。

【技术特征摘要】
1.一种驱动程序运行信息的跟踪方法,其特征在于,该方法包括:获取驱动程序的源代码;使用LLVM框架对所述源代码进行编译,并在编译后的代码中插装用于获取驱动程序的运行信息的第一代码,得到插装后的中间代码;使用LLVM框架编译所述中间代码,得到对应的汇编文件;使用GCC编译器对所述汇编文件进行编译,并对编译得到的第一目标文件和包括第二代码的第二目标文件进行编译链接,得到驱动程序文件;其中,所述第二代码用于根据所述第一代码获取的驱动程序的运行信息生成记录文件,每当驱动程序运行至一待记录运行信息的函数时,所述第二代码用于执行以下步骤:施加自旋锁并屏蔽中断;记录所述第一代码获取的驱动程序的运行信息;解除自旋锁并开启中断。2.根据权利要求1所述的方法,其特征在于,所述记录所述第一代码获取的驱动程序的运行信息的步骤,包括:将所述第一代码获取的驱动程序的运行信息写入缓存区;若缓存区已满,则将缓存区的所有数据移至一存储节点,并将该存储节点插入一缓存队列的尾部。3.根据权利要求2所述的方法,其特征在于,所述第二代码还用于在驱动程序运行时建立一写文件线程,以使该写文件线程周期性地将所述缓存队列中所有存储节点中的数据按照队列顺序写入所述记录文件的尾部。4.根据权利要求1至3中任意一项所述的方法,其特征在于,所述驱动程序的运行信息包括所述驱动程序中任意多个函数的函数名、数据类型、参数值和返回值中的任意多项。5.一种驱动程序运行信息的跟踪系统,其特征在于,包括:获取单元,用于获取驱动程序的源...

【专利技术属性】
技术研发人员:胡事民白家驹刘虎球
申请(专利权)人:清华大学
类型:发明
国别省市:北京;11

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

1