一种移动终端内核符号表的调试方法和装置的制造方法

文档序号:9452999阅读:191来源:国知局
一种移动终端内核符号表的调试方法和装置的制造方法
【技术领域】
[0001] 本发明涉及测试技术领域,尤其涉及一种移动终端内核符号表的调试方法和装 置。
【背景技术】
[0002] 随着移动互联网与移动终端产业的发展,移动终端上的应用日渐丰富,甚至有超 过电脑终端应用的趋势。不管是安卓(Android)终端研发厂商还是Android应用开发商都 需要对应用程序进行大量的调试工作。
[0003] 但是,基于Linux内核的Android系统复杂而庞大,测试遇到偶发问题的可能性较 大。目前对于偶发问题的调试,主要是增加调试信息后,增大测试力度,尽量复现问题,再抓 取调试信息进行分析,时间和人力占用较大。而在实际情况中,偶发问题较难复现,当需要 调试时一般是增加调试信息后,再次测试,时间周期较长。

【发明内容】

[0004] 有鉴于此,本发明提供了一种移动终端内核符号表的调试方法和装置,能够准确 定位并进行在线更新,节省人力且缩短测试时间。
[0005] 本发明提供了一种移动终端内核符号表的调试方法,包括:在移动终端的内核符 号表中,查找待更新函数的函数地址;新建内核模块,并在新建内核模块中,设置调试信息; 根据待更新函数的函数地址,将待更新函数替换为新建内核模块的函数;根据调试信息,对 新建内核模块进行调试。
[0006] 进一步地,所述内核符号表包括函数和函数地址对应;根据待更新函数,查找对应 的函数地址。
[0007] 进一步地,所述在新建内核模块,具体为:通过静态加载方式新建内核模块, 包括把组件添加进内核文件中,在目录Kconfig文件中增加新代码对应的编译选项,在 Makefile文件中添加编译条目;或者,通过动态加载方式新建内核模块,包括进入Linux 内核,进入/drivers建立文件夹,在文件夹里建立Makefile文件和Kconfig文件;在 Makefile文件中添加出口函数,在Kconfig文件中添加入口函数;配置新建内核模块。
[0008] 进一步地,所述在新建内核模块中,设置调试信息,具体为:采用printkO调试函 数,在新建内核模块中设置调试信息。
[0009] 进一步地,所述根据调试信息,对新建内核模块进行调试,具体为:将新建内核模 块的函数使用insmod命令插入到当前系统中,并根据printk()调试函数中的调试信息,对 新建内核模块进行调试。
[0010] 本发明还提供了一种移动终端内核符号表的调试装置,包括:查找模块,用于在移 动终端的内核符号表中,查找待更新函数的函数地址;新建模块,用于新建内核模块,并在 新建内核模块中,设置调试信息;替换模块,用于根据待更新函数的函数地址,将待更新函 数替换为新建内核模块的函数;调试模块,用于根据调试信息,对新建内核模块进行调试。
[0011] 进一步地,所述新建模块,具体用于:通过静态加载方式或者动态加载方式新建内 核模块;采用printkO调试函数,在新建内核模块中设置调试信息。
[0012] 进一步地,所述调试模块,具体用于:将新建内核模块的函数使用insmod命令插 入到当前系统中,并根据printkO调试函数中的调试信息,对新建内核模块进行调试。
[0013] 和现有技术相比,本发明的有益效果在于:在新建内核模块中,使用Linux内核符 号表,对需要的函数位置进行代码替换,增加调试信息,并将新建的内核模块插入到问题系 统中,针对Linux内核中的偶发问题,实现代码的在线更新调试,方便问题定位,节省了时 间和人力。
【附图说明】
[0014] 图1为本发明所公开的移动终端内核符号表的调试方法的流程示意图。
[0015] 图2为本发明所公开的移动终端内核符号表的调试装置的结构示意图。
【具体实施方式】
[0016] 以下将结合附图所示的【具体实施方式】对本发明进行详细描述,但这些实施方式并 不限制本发明,本领域的普通技术人员根据这些实施方式所做出的结构、方法、或功能上的 变换均包含在本发明的保护范围内。
[0017] 图1为本发明所公开的移动终端内核符号表的调试方法的流程示意图。参照图1, 本发明的移动终端内核符号表的调试方法,包括:
[0018] 步骤101,在移动终端的内核符号表中,查找待更新函数的函数地址。
[0019] 内核符号表是在移动终端的内核内部函数或变量中可供外部引用的函数和变量 的符号表。
[0020] 在本步骤中,内核符号表中一列是函数地址,另一列是函数。如果有需要更新的函 数,则在内核符号表中能够查找到对应的函数地址。
[0021 ] 步骤102,新建内核模块。
[0022] 在本步骤中,Linux内核是模块化组成的,它允许内核在运行时动态地向其中插入 或从中删除代码,代码包括数据结构和函数等。
[0023] 内核模块通常由一组函数和数据结构组成,用来实现一种文件系统、一个驱动程 序或其他内核上层的功能。新建一个内核模块,一般需要包括相关头文件、模块入口函数、 模块出口函数等。
[0024] 可以通过静态加载方式新建内核模块,具体地:把组件都添加进内核文件中,在目 录Kconfig文件中增加新代码对应的编译选项,在Makefile文件中添加编译条目。
[0025] 也可以通过动态加载方式新建内核模块,具体地:进入Linux内核,进入/drivers 建立文件夹,在文件夹里建立Makefile文件和Kconfig文件;在Makefile文件中添加出口 函数,在Kconfig文件中添加入口函数;进入内核配置页面进行配置。
[0026] 新建内核的示例如下:
[0027]
[0028] 步骤103,在新建内核模块中,设置调试信息。
[0029] 由于内核模块是一个不与特定进程相关的功能集合,所以内核代码无法轻易地放 在调试器中执行,而且也很难跟踪。要想复现内核代码中的错误也是相当困难的,因为这种 错误可能导致整个系统崩溃,这样也就破坏了可以用来跟踪它们的现场。
[0030] 在本步骤中,采用printkO调试函数设置调试信息,具体地:在新建内核模块的 代码中的特定位置加入printk()调试函数,能够把调试过程打印到屏幕上,从而可以观察 程序的执行路径和调试的变量、指针等信息。
[0031] 示例如下:
[0032]
[0033] 其中,0xC037A69E为从内核符号表中查找到的,内核中goodix_ts_data数据所在 的地址。
[0034] 步骤104,根据待更新函数的函数地址
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1