CN103559121A - 基于日志注入的驱动配置调试方法 - Google Patents
基于日志注入的驱动配置调试方法 Download PDFInfo
- Publication number
- CN103559121A CN103559121A CN201310436227.6A CN201310436227A CN103559121A CN 103559121 A CN103559121 A CN 103559121A CN 201310436227 A CN201310436227 A CN 201310436227A CN 103559121 A CN103559121 A CN 103559121A
- Authority
- CN
- China
- Prior art keywords
- configuration
- register
- described step
- drive
- driving
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种基于日志注入的驱动配置调试方法,包括:S1.提取驱动的设备寄存器的配置规范文档;S2.按照所述配置规范文档对驱动进行检测钩子注入;S3.在检测钩子位置添加相关类型的日志函数;S4.运行修改后的驱动,运行时动态监测驱动的运行。本发明基于日志注入的驱动配置调试方法,能够根据配置文档的要求,在驱动中插入检查代码,运行时动态检查驱动配置中的配置参数,出现错误时及时记录并处理错误,从而提高驱动的可靠性。
Description
技术领域
本发明涉及计算机安全防范技术领域,具体涉及一种基于日志注入的驱动配置调试方法。
背景技术
在当前的通用操作系统中,驱动常常以模块的形式加载到内核中运行,并调用了大量的内核扩展。在Linux中,驱动占据了操作系统70%的代码,并且引起的错误是内核代码的3-7倍,在Windows中同样有报告指出,85%的系统崩溃和驱动的错误相关。
驱动以内核扩展的形式运行,大都运行在内核态,因而驱动的可靠性对系统至关重要。但是由于驱动的开发常常和系统开发是分离的,因此内核扩展功能发生的细微改变都可能引起驱动出现不稳定性。另外,许多驱动开发者违反内核扩展使用规范,当操作系统配置发生改变时,该种违例将无法提供正确的功能给驱动程序,可能引起设备不稳定工作,甚至崩溃。
设备本身同样对系统的一些资源存在配置上的约束,以UHCI中的帧基址寄存器为例,从硬件手册[UHCI revision1.1section2.1.5]上可以看出寄存器对低12位要求对齐,在实际写入时必须保证低12位为0,从而使得4KB对齐。
驱动开发者在此处使用内核扩展的内存管理接口时,应注意使用alloc_page或alloc_pages扩展,如果使用kmalloc,则在内存调试开启尾对齐时将可能存在错误。另外,在USB的UHCI驱动,TD的缓冲区要求字节对齐,而QH(队列头)则要求16字节对齐。
根据设备手册要求,填入设备的DMA地址必须是物理内存地址,不能使用内核的线性地址。但是在部分系统实现机制中,内核的1G以 内线性地址和物理地址一致,因此当页表扩充,配置表发生改变时,没有转换的线性内存地址直接填入DMA将可能引起系统崩溃。
由于程序员对自身的程序常常足够自信,测试周期较短,而设备驱动的功能和正确性测试常常依赖于具体的硬件,测试周期短,测试场景偏少,仅仅关心功能实现,而没有过多考虑系统环境配置等相关的功能测试。
因此,根据寄存器要求,静态注入检测钩子,运行时动态检测配置的参数是否满足配置要求是非常有效的错误预防方法,并在出现时及时记录相应的日志,便于开发者快速定位相关错误。
综上所述,一种基于日志注入的驱动配置调试方法是亟待提供的。
发明内容
(一)要解决的技术问题
本发明要解决的技术问题是:如何提供一种基于日志注入的驱动配置调试方法,能够根据配置文档的要求,在驱动中插入检查代码,运行时动态检查驱动配置中的配置参数,出现错误时及时记录并处理错误,从而提高驱动的可靠性。
(二)技术方案
为解决上述问题,本发明提供一种基于日志注入的驱动配置调试方法,包括:S1.提取驱动的设备寄存器的配置规范文档;S2.按照所述配置规范文档对驱动进行检测钩子注入;S3.在检测钩子位置添加相关类型的日志函数;S4.运行修改后的驱动,运行时动态监测驱动的运行。
优选地,所述步骤S4包括:当出现配置异常时,及时捕获异常,并对部分错误进行自动处理,对不能处理的异常,将日志提交开发者。
优选地,所述步骤S1包括:根据驱动要求,对能够控制设备的寄存器配置规范进行分析和提取,将寄存器的配置约束条件提取成规范的可以直接解析的结构化数据。
优选地,将寄存器的配置约束条件提取成规范的可以直接解析的 结构化数据包括:将设备手册中的寄存器约束信息转换为XML文档规范信息,一个寄存器的配置信息对应一条XML记录。
优选地,所述步骤S2包括:在驱动源码中插入检测点,在检测点注入相应的源代码,执行配置参数检查功能。
优选地,所述步骤S3包括:根据插入的检测标记点,在检测标记点通过对参数进行检查,当发现参数不符合所述配置规范文档中规定的配置要求时,将添加日志记录代码。
优选地,所述步骤S4包括:在系统的正常运行过程中,实现设备管理功能时,利用驱动对设备的寄存器进行初始化配置,动态运行时根据插入的检测钩子对配置参数进行检查。
优选地,所述步骤S4包括:对寄存器进行配置时,若配置参数不满足设备规格文档中的要求,及时发现该类错误,并记录相应的日志信息。
优选地,所述步骤S4包括:当定位到错误后,将错误进行处理,按照文档中定义的错误的严重性,对于引起设备严重错误的情况记录出错信息后,直接返回错误给上层调用。
(三)有益效果
本发明基于日志注入的驱动配置调试方法,能够根据配置文档的要求,在驱动中插入检查代码,运行时动态检查驱动配置中的配置参数,出现错误时及时记录并处理错误,从而提高驱动的可靠性。
附图说明
图1为依照本发明一种实施方式的基于日志注入的驱动配置调试方法的流程示意图。
具体实施方式
下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
本发明提供了一种基于日志注入的驱动配置调试方法,包括:
S1.提取驱动的设备寄存器等配置规范文档;
S2.按照驱动配置文档对驱动进行检测钩子注入;
S3.在检测钩子位置添加相关类型的日志函数;
S4.运行修改后的驱动,运行时动态监测驱动的运行,出现配置异常时,能够及时捕获异常,并对部分错误进行自动处理,对不能处理的异常,将日志提交开发者,方便驱动开发者快速定位程序的错误。
其中,所述步骤S1包括:
根据驱动要求,对能够控制设备的寄存器配置规范进行分析和提取,将寄存器的配置约束条件提取成规范的可以直接解析的结构化数据。
其中,所述步骤S1包括:
将设备手册中的寄存器约束信息转换为XML文档等规范信息,一个寄存器的配置信息对应一条XML记录。
其中,所述步骤S2包括:
检测钩子是指在驱动源码中插入检测点,在检测点可以注入相应的源代码,执行配置参数检查等功能。
其中,所述步骤S3包括:
根据S2中插入的检测标记点,在检测标记点通过对参数进行检查,当发现参数不符合S1中所述的文档规范中规定的配置要求时,此时将添加日志记录代码。
其中,所述步骤S4包括:
在系统的正常运行过程中,实现设备管理功能时,会利用驱动对设备的寄存器进行初始化配置,动态运行时根据S2、S3插入的检测钩子对配置参数进行检查。
其中,所述步骤S4包括:
配置异常在此处是指,对寄存器等进行配置时,配置参数不满足设备规格文档中的要求,及时发现该类错误,并记录相应的日志信息。
其中,所述步骤S4包括:
当定位到错误后,此时需要将错误进行处理,按照文档中定义的错误的严重性,对于引起设备严重错误的情况记录出错信息后,直接返回错误给上层调用。所述不能处理的异常是指,不可预知的一些错误,可能引起设备出现问题的错误,针对该类错误,记录出错的日志信息供开发人员查看,便于定位错误。
如图1所示,本发明提供的基于日志注入的驱动配置调试方法,结合USB控制器驱动的帧基址寄存器的操作进行解释,主要包括以下步骤:
S1.从UHCI设备手册中提取关于USB控制器的帧基址寄存器的约束信息。从硬件手册[UHCI revision1.1section2.1.5]上可以看出寄存器(FLBASEADD)对低12位要求对齐,在实际写入时必须保证低12位为0,从而使得4KB对齐。将约束信息转换成的结构化数据如下所示:
<USBFLBASEADD address=’%UHCI_BAR_BASE%+08H’,type=’UINT_32’,kind=‘W’,mask=0x0000001F>
S2.根据寄存器的名字FLBASEADD,寻找该寄存器在驱动中被配置的位置,找到在源码中的位置,并根据S1中的mask值,插入检测钩子if(uhci->frame_dma_handle&mask!=0)。
S3.在检测钩子位置继续插入相应的日志信息,插入的日志为InsertLog(FILE,ROW,ERROR VALUE,TYPE)。即插入日志记录的内容包括,驱动文件路径,在文件中的行数,以及出现的值和类型。InsertLog将调用printk实现日志输出功能。
S4.当设备的驱动加载时,将会执行configure_hc函数,对帧基址寄存器配置之前将执行参数检测if(uhci->frame_dma_handle&mask!=0),正常时则继续执行配置。若出现错误,则会调用InsertLog函数记录错误的日志信息。从而,开发人员通过查看日志能够快速定位并找出错误原因。
结合上述描述,针对不同驱动寄存器配置要求,分离出配置的规 格文档,然后按照XML文档对驱动源码添加检测钩子,并增加日志注入函数入口,实现驱动的配置检查功能。
以下是驱动配置实例的源代码:
以下是驱动配置实例按照该方法实现的伪代码:
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和替换,这些改进和替换也应视为本发明的保护范围。
Claims (9)
1.一种基于日志注入的驱动配置调试方法,其特征在于,包括:
S1.提取驱动的设备寄存器的配置规范文档;
S2.按照所述配置规范文档对驱动进行检测钩子注入;
S3.在检测钩子位置添加相关类型的日志函数;
S4.运行修改后的驱动,运行时动态监测驱动的运行。
2.根据权利要求1所述的方法,其特征在于,所述步骤S4包括:当出现配置异常时,及时捕获异常,并对部分错误进行自动处理,对不能处理的异常,将日志提交开发者。
3.根据权利要求1或2所述的方法,其特征在于,所述步骤S1包括:
根据驱动要求,对能够控制设备的寄存器配置规范进行分析和提取,将寄存器的配置约束条件提取成规范的可以直接解析的结构化数据。
4.根据权利要求3所述的方法,其特征在于,将寄存器的配置约束条件提取成规范的可以直接解析的结构化数据包括:
将设备手册中的寄存器约束信息转换为XML文档规范信息,一个寄存器的配置信息对应一条XML记录。
5.根据权利要求1或2所述的方法,其特征在于,所述步骤S2包括:
在驱动源码中插入检测点,在检测点注入相应的源代码,执行配置参数检查功能。
6.根据权利要求5所述的方法,其特征在于,所述步骤S3包括:
根据插入的检测标记点,在检测标记点通过对参数进行检查,当发现参数不符合所述配置规范文档中规定的配置要求时,将添加日志记录代码。
7.根据权利要求1或2所述的方法,其特征在于,所述步骤S4包括:
在系统的正常运行过程中,实现设备管理功能时,利用驱动对设备的寄存器进行初始化配置,动态运行时根据插入的检测钩子对配置参数进行检查。
8.根据权利要求2所述的方法,其特征在于,所述步骤S4包括:
对寄存器进行配置时,若配置参数不满足设备规格文档中的要求,及时发现该类错误,并记录相应的日志信息。
9.根据权利要求2或8所述的方法,其特征在于,所述步骤S4包括:
当定位到错误后,将错误进行处理,按照文档中定义的错误的严重性,对于引起设备严重错误的情况记录出错信息后,直接返回错误给上层调用。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310436227.6A CN103559121B (zh) | 2013-09-23 | 2013-09-23 | 基于日志注入的驱动配置调试方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310436227.6A CN103559121B (zh) | 2013-09-23 | 2013-09-23 | 基于日志注入的驱动配置调试方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103559121A true CN103559121A (zh) | 2014-02-05 |
CN103559121B CN103559121B (zh) | 2016-09-21 |
Family
ID=50013372
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310436227.6A Active CN103559121B (zh) | 2013-09-23 | 2013-09-23 | 基于日志注入的驱动配置调试方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103559121B (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104317723A (zh) * | 2014-11-14 | 2015-01-28 | 清华大学 | 一种驱动程序运行信息的跟踪方法及系统 |
CN106227672A (zh) * | 2016-08-10 | 2016-12-14 | 中车株洲电力机车研究所有限公司 | 一种嵌入式应用程序故障捕捉及处理方法 |
CN109240736A (zh) * | 2018-07-28 | 2019-01-18 | 安徽捷兴信息安全技术有限公司 | 一种基于Dalvik指令的应用日志注入方法及系统 |
CN110471832A (zh) * | 2019-06-25 | 2019-11-19 | 平安科技(深圳)有限公司 | 程序运行的处理方法、装置及计算机可读存储介质 |
CN110806962A (zh) * | 2019-11-06 | 2020-02-18 | 星环信息科技(上海)有限公司 | 日志级别的预测方法、设备及存储介质 |
CN111522708A (zh) * | 2020-04-10 | 2020-08-11 | 星环信息科技(上海)有限公司 | 一种日志记录方法、计算机设备及存储介质 |
CN112527265A (zh) * | 2019-09-19 | 2021-03-19 | 深圳Tcl数字技术有限公司 | 一种日志自动注入的方法和计算机设备 |
CN113553578A (zh) * | 2021-07-08 | 2021-10-26 | 北京奇艺世纪科技有限公司 | 一种日志打印响应方法、装置、电子设备和存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1752943A (zh) * | 2004-09-23 | 2006-03-29 | 乐金电子(中国)研究开发中心有限公司 | 具有源程序追踪功能的移动通信终端及其控制方法 |
US20090103902A1 (en) * | 2006-03-24 | 2009-04-23 | Matsushita Electric Industrial Co., Ltd. | Reproduction device, debug device, system lsi, and program |
-
2013
- 2013-09-23 CN CN201310436227.6A patent/CN103559121B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1752943A (zh) * | 2004-09-23 | 2006-03-29 | 乐金电子(中国)研究开发中心有限公司 | 具有源程序追踪功能的移动通信终端及其控制方法 |
US20090103902A1 (en) * | 2006-03-24 | 2009-04-23 | Matsushita Electric Industrial Co., Ltd. | Reproduction device, debug device, system lsi, and program |
Non-Patent Citations (1)
Title |
---|
魏东等: "利用日志钩子函数实现windows系统信息的捕获", 《昆明理工大学学报》, vol. 27, no. 4, 31 August 2002 (2002-08-31), pages 86 - 89 * |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104317723B (zh) * | 2014-11-14 | 2017-02-22 | 清华大学 | 一种驱动程序运行信息的跟踪方法及系统 |
CN104317723A (zh) * | 2014-11-14 | 2015-01-28 | 清华大学 | 一种驱动程序运行信息的跟踪方法及系统 |
CN106227672A (zh) * | 2016-08-10 | 2016-12-14 | 中车株洲电力机车研究所有限公司 | 一种嵌入式应用程序故障捕捉及处理方法 |
CN106227672B (zh) * | 2016-08-10 | 2019-07-09 | 中车株洲电力机车研究所有限公司 | 一种嵌入式应用程序故障捕捉及处理方法 |
CN109240736A (zh) * | 2018-07-28 | 2019-01-18 | 安徽捷兴信息安全技术有限公司 | 一种基于Dalvik指令的应用日志注入方法及系统 |
CN110471832A (zh) * | 2019-06-25 | 2019-11-19 | 平安科技(深圳)有限公司 | 程序运行的处理方法、装置及计算机可读存储介质 |
CN110471832B (zh) * | 2019-06-25 | 2024-05-07 | 平安科技(深圳)有限公司 | 程序运行的处理方法、装置及计算机可读存储介质 |
CN112527265A (zh) * | 2019-09-19 | 2021-03-19 | 深圳Tcl数字技术有限公司 | 一种日志自动注入的方法和计算机设备 |
CN110806962A (zh) * | 2019-11-06 | 2020-02-18 | 星环信息科技(上海)有限公司 | 日志级别的预测方法、设备及存储介质 |
CN110806962B (zh) * | 2019-11-06 | 2021-04-16 | 星环信息科技(上海)股份有限公司 | 日志级别的预测方法、设备及存储介质 |
CN111522708B (zh) * | 2020-04-10 | 2021-08-24 | 星环信息科技(上海)股份有限公司 | 一种日志记录方法、计算机设备及存储介质 |
CN111522708A (zh) * | 2020-04-10 | 2020-08-11 | 星环信息科技(上海)有限公司 | 一种日志记录方法、计算机设备及存储介质 |
CN113553578A (zh) * | 2021-07-08 | 2021-10-26 | 北京奇艺世纪科技有限公司 | 一种日志打印响应方法、装置、电子设备和存储介质 |
CN113553578B (zh) * | 2021-07-08 | 2024-04-12 | 北京奇艺世纪科技有限公司 | 一种日志打印响应方法、装置、电子设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN103559121B (zh) | 2016-09-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103559121A (zh) | 基于日志注入的驱动配置调试方法 | |
CN109583200B (zh) | 一种基于动态污点传播的程序异常分析方法 | |
CN110704304B (zh) | 一种应用程序测试方法、装置、存储介质和服务器 | |
US8250543B2 (en) | Software tracing | |
US8037459B2 (en) | Recovery from nested exceptions in an instrumentation routine | |
KR101019209B1 (ko) | 임베디드 소프트웨어의 인터페이스 자동 추출 장치 및 그방법 | |
US7882495B2 (en) | Bounded program failure analysis and correction | |
US20080256517A1 (en) | Method and System for Automatically Generating Unit Test Cases Which Can Reproduce Runtime Problems | |
US20120331449A1 (en) | Device, method and computer program product for evaluating a debugger script | |
CN103186461A (zh) | 一种现场数据的保存方法和恢复方法以及相关装置 | |
WO2002052411A9 (en) | Computer software run-time analysis systems and methods | |
US20140068350A1 (en) | Self-checking system and method using same | |
EP3063692B1 (en) | Virtual machine introspection | |
US20080276129A1 (en) | Software tracing | |
US20070083792A1 (en) | System and method for error detection and reporting | |
CN112925524A (zh) | 一种检测驱动程序中不安全直接存储器访问的方法及装置 | |
US20020073359A1 (en) | System and method for high priority machine check analysis | |
US7657792B2 (en) | Identifying race conditions involving asynchronous memory updates | |
CN115757099A (zh) | 平台固件保护恢复功能自动测试方法和装置 | |
CN115756935A (zh) | 嵌入式软件系统的异常故障定位方法、装置及设备 | |
CN107885648B (zh) | 一种生成测试报告的方法和装置 | |
Höller et al. | Evaluation of diverse compiling for software-fault detection | |
JP2009223714A (ja) | 演算回路及び演算回路の異常解析方法 | |
US10922023B2 (en) | Method for accessing code SRAM and electronic device | |
US9448903B2 (en) | Multiple test type analysis for a test case using test case metadata |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |