本发明专利技术提供一种驱动函数用户态调试系统和方法,基于Linux系统,所述驱动函数的用户态调试系统包括指令接收模块和分析处理内核模块;所述接收模块用于接收用户指令,并将所述用户指令写入所述分析处理内核模块;其中,用户指令包括驱动函数名和函数参数,所述分析处理内核模块用于将字符设备注册在内核上,并解析处理所述用户指令,获取驱动函数的内存地址,通过内存地址和函数参数调用所述用户指令对应的驱动函数。通过本发明专利技术的驱动函数用户态调试系统和方法,驱动函数开发人员不用修改程序代码,不重新编译程序,不重新运行程序,就可在BUG现场直接收集数据和查找BUG原因,提高了解BUG的效率。
【技术实现步骤摘要】
本专利技术涉及一种Linux的调试驱动函数的方法,特别是涉及一种基于Linux的驱动函数用户态调试系统和方法。
技术介绍
基于Linux下的驱动开发是最具技术含量的科技工作之一,驱动软件的编写中,最主要的是BUG的解决,其中核心在于错误和/或漏洞(BUG)的定位。对于任何一位驱动函数的开发者来说,最急迫的问题之一就是如何完成调试。现在Linux下驱动函数的代码量越来越大,复杂程度越来越高。这给Liunx下的驱动函数的调试,带来了极大的不便。并且,Linux的驱动函数的调试工具却发展缓慢,单步调试、实时监控都不是容易的事。并且,Linux系统有两种运行状态:用户态和内核态,内核态的特权级别高于用户态。在用户态不能直接调用内核函数,而驱动代码属于内核态,因此用户态不能直接调用驱动函数。目前,驱动函数开发者对驱动函数进行调试主要是依靠驱动(或内核)打印相关数据结构或者运行状态的统计信息,根据这些打印信息判断BUG出现的原因和位置。Linux提供给驱动函数开发者的打印驱动(或内核)信息的方法主要有以下两种:1、内核打印:开发者可以在可疑的位置用函数printk打印数据信息;2、访问虚拟文件系统:用户可以通过访问虚拟文件系统/proc目录下的文件读取进程和内核的运行信息。其中,内核打印是最原始的驱动函数调试方法,哪里需要打印,就在哪里添加函数printk代码,但是,只要新添加了代码,就必须对程序重新编译和运行,这样也就没有办法在BUG出现的现场进行调试,这对于一些出现概率极小、难以复制的BUG来说,是极其不方便的,而访问虚拟文件系统虽然较之内核打印的方法稳定性和可靠性都得到了提高,但是这种方法不能传入参数。因此,对于一些需要传入参数进行调试的驱动函数就不能适用了。
技术实现思路
鉴于以上所述现有技术的缺点,本专利技术的目的在于提供,用于解决现有技术中无法在用户态进行驱动函数调试,且调试驱动函数时无法输入参数的问题。为实现上述目的及其他相关目的,本专利技术提供一种驱动函数用户态调试系统,基于Linux,所述驱动函数的用户态调试系统包括指令接收模块和分析处理内核模块;所述接收模块用于接收用户指令,并将所述用户指令写入所述分析处理内核模块;所述分析处理内核模块用于将字符设备注册在内核上,并分析处理所述用户指令,以调用所述用户指令所对应的驱动函数。可选地,所述用户指令包括驱动函数名和函数参数。可选地,所述指令接收模块包括输入子模块和传递子模块;所述输入子模块用于输入所述用户指令;所述传递子模块用于打开所述字符设备,并将通过所述输入子模块输入的所述用户指令传递给所述分析处理内核模块。可选地,所述指令接收模块还包括校验子模块,用于校验通过所述输入子模块输入的所述用户指令中是否含有非法字符:如果有,则打印错误信息并退出;如果没有,则返回至所述传递子模块,将所述用户指令传递给所述分析处理内核模块。可选地,所述分析处理内核模块包括:用于在内核上注册或注销所述字符设备的注册注销子模块;用于配置所述字符设备的配置子模块;以及,用于解析所述用户指令,获取所述驱动函数的内存地址,并依据所述内存地址调用所述驱动函数的分析处理子模块。可选地,所述分析处理内核模块还包括用于加载或卸载所述分析处理内核模块的加卸载子模块。可选地,所述分析处理子模块是通过如下步骤完成所述驱动函数的调用的:解析所述用户指令中的驱动函数名和函数参数,并对所述函数参数进行格式转换;根据所述驱动函数名查找内核函数符号表获取所述驱动函数的所述内存地址;通过所述内存地址和所述函数参数直接调用所述驱动函数。本专利技术还公开了一种驱动函数用户态调试方法,基于Linux,包括:加载分析处理内核模块;在内核上注册字符设备,并配置所述字符设备;通过指令接收模块输入用户指令,并传输至所述分析处理内核模块;其中,所述用户指令包括驱动函数名和函数参数;解析所述用户指令,获取驱动函数的内存地址,并依据所述内存地址和所述函数参数直接调用所述驱动函数。可选地,所述通过指令接收子模块输入用户指令,并传输至所述分析处理内核模块还包括对输入的所述用户指令进行校验,判断所述用户指令中是否含有非法字符:如果有,则打印错误信息并退出;如果没有,则返回。可选地,所述驱动函数用户态调试方法还包括:在所述驱动函数调用结束后,卸载所述分析处理内核模块;在内核上注销所述字符设备。如上所述,本专利技术的,在Linux用户态下,从命令行直接输入用户指令(包括驱动函数名和函数参数),即可直接调用指定的驱动函数,从而完成驱动函数的现场调试。通过本专利技术的驱动函数用户态调试系统和方法,驱动函数开发人员不用修改程序代码,不用重新编译程序,不用重新运行程序,就可在BUG现场直接收集数据和查找BUG原因,提高了解BUG的效率。【附图说明】图1显示为本专利技术实施例公开的一种驱动函数用户态调试系统的结构示意图。图2显示为本专利技术实施例公开的一种驱动函数用户态调试方法的流程示意图。元件标号说明100指令接收模块110输入子模块120校验子模块130传递子模块200分析处理内核模块210加卸载子模块220注册注销子模块230配置子模块240分析处理子模块S21 ?S26 步骤【具体实施方式】以下通过特定的具体实例说明本专利技术的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本专利技术的其他优点与功效。本专利技术还可以通过另外不同的【具体实施方式】加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本专利技术的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。需要说明的是,以下实施例中所提供的图示仅以示意方式说明本专利技术的基本构想,遂图示中仅显示与本专利技术中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。实施例一本实施例公开了一种基于Linux的驱动函数用户态调试系统,用于调试驱动函数,查找和定位驱动函数的BUG。如图1所示,本实施例的驱动函数用户态调试系统包括:指令接收模块100和分析处理内核模块200。指令接收模块100用于接收用户指令,其工作在用户态,把接收到的用户指令传递至分析处理内核模块200。其中,用户指令包括驱动函数名和函数参数。分析处理内核模块200从指令接收模块100接收到用户指令后,解析出用户指令的驱动函数名和函数参数;根据驱动函数名查找内核函数符号表,得到驱动函数的内存地址,最后根据内存地址和函数参数调用该驱动函数,实现调试的功能。其中,指令接收模块100包括输入子模块110、校验子模块120和传递子模块130 ;其中,输入子模块110用于输入用户指令;校验子模块120用于对输入子模块110输入的用户指令进行校验,判断用户指令是否含有非法字符:如果含有非法字符,表示用户指令是无效的,则打印错误信息并退出;如果没有非法字符,则表示用户指令有效;传递子模块130用于打开字符设备,并将用户指令传递至分析处理内核模块。在本实施例中,指令接收模块100为工作在用户态的应用程序,其包括main主函数、parse_cmd函数和do_cmd函数。其中,main主函数是该应用程序的入口函数。本文档来自技高网...
【技术保护点】
一种驱动函数用户态调试系统,基于Linux,其特征在于,所述驱动函数的用户态调试系统包括指令接收模块和分析处理内核模块;所述接收模块用于接收用户指令,并将所述用户指令写入所述分析处理内核模块;所述分析处理内核模块用于将字符设备注册在内核上,并分析处理所述用户指令,以调用所述用户指令所对应的驱动函数。
【技术特征摘要】
【专利技术属性】
技术研发人员:江素华,
申请(专利权)人:上海斐讯数据通信技术有限公司,
类型:发明
国别省市:上海;31
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。