论文研究-基于嵌入式Linux的内核错误跟踪技术 .pdf

所需积分/C币:9 2019-08-16 10:17:48 407KB .PDF
18
收藏 收藏
举报

基于嵌入式Linux的内核错误跟踪技术,黎亮,傅一帆,为提高操作系统的可靠性,其中一个措施是在内核发生错误时把整个内存映像记录下来,以供分析改进。但嵌入式应用要求出错复位后重
山国武技文在线 http://www.paper.edu.cn 发生处理器异常 根据异常类型自动 执行异常处理代码 预取异常处理 数据异常处理 du preletchAborl ( du DalaAbort() 一处理器在本次异常前是一 一处理點在本次异常前是一 否处于用户态 执行相关的处理,如 执行相应的处理,给 建立页表等 应用浧序发送信号等 返回到正常调度执 行流程 执行清理工作 进入死循环,内 核冻结,等待复位 图2 Linux内核对异常的处理过程 3.LCRT机制的设计与实现 通过对 Linux内核代码的分析可知 Linux内核本身提供了一种“内核通知机制s}”,并 预定义了“內核事件通知链”使得Liux内核扩展廾发人员可以通过这些预定义的内核事件通 知链在特定的内核事件发生吋执行附加的处理沇程。通过对inuⅸx内核源代码的研究,发现 对于上文中提到的“严重的不可恢复的内核异常”,预定义了个通知链和通知点使得在发生 Linux内核崩溃之后,可以在 Linux内核的 panic函数中预定义的一个“内核崩溃通知链8” 上挂接ICRT机制来获得 Linux内核崩溃现场的一些信息并记录到非易失性存储器中以便分 析引起 Linux内核崩溃的原因 3.1涉及的要点简介 LCRT札制的设计和实现基于如下特定的机制 (1)编译器选项与内核依赖 Linux内核及相应的驱动程序都采用GNU吵的的开源编译器GCc编译,为了结合LCRT 机制来方便的提耿信息和记录信息,需要采用特定的gcc编译器选项米编译 Linux内核和相 关的驱动程序以及应用程序。用到的选项为:- moke- function- - namc,使用这个选项编译 出的二进制程序中可以包含C语言函数名称的信息,方便函数调用链冋溯时记录信息的可 读怛 (2) Linux内核 notify chain机制8 山国利技记文在线 http://www.paper.edu.cn Linx内核提供‘通知锩”玏能,并预定义了个内核崩溃通知链,在 Linux内核的异常处理 例程判断出系统进入“不可恢复”状态时,会沿预定义的通知链顺序调用注册到相应链中的通 知函数 (3)函数调用的栈布局 Linux内核的绝大部分由C语言实现,而且C语言也多用来进行 Linux内核开发。 Linux内 核及使用LKM扩展而加入Linuⅸx内核执行环境的代码是有规律可循的,这些代码在执行过 程中产生的栈布局和这些规律的代码相关联。比如这些函数在执行函数体之前会保存本函数 调用后的返回地址,休存本函数被调用时传递过来的参数,休存调用本函数的函数所拥有的 栈帧的栈底。 32LCRT机制的设计思想 LCRT机制分为Linⅸ内核模块部分和 Linux用户程序部分。内核模块部分的设 计采用了 Linux内核模坎的模式而不是直接修改 Linux内核,这样设计降低了 Linux内核和 LCRT机制之间的耦合度,同时满足了 Linux内核和LCRT机制独立升级完善的便利性。用 户程序部分完成从非易失性存储器中读取、清除LCRT机制保存的信息等相关功能。 在LCRT机制的设计中,针对嵌入式系统的特点,做出的设计决策有 ①将对」解决和定位问题最具辅助意义的凶数调用关系链记录卜来; ②为了不占用过多的存储空间,有选择性的将函数调用序列上的函数各自用到的栈内容 保存起来,而不是保存全部内存 ③将记录的信息保存到非易失性存储器中,这样既达到了掉电保存的目的,又达到了缩 短写入时间的目的 ICRT机制的设计有以下六个方面: 设计 Linux内核模块,动态的加载LCRT机制,尽量少的修改 Linux内核代码 2.在相应的预定义的 Linux内核通知链上挂接LCRT的通知函数 3.在LCRT机制的通知处理函数中进行堆栈回溯得到函数调用信息 4.记录回溯到的凶数调用信息和堆栈空间内容到非易失性存储器 5.开发用户空间的L具,可以从非易失性存储器中读取保存的信息 3.3LCRT机制的实现 CRT机制的实现参照上文3.2节的设计思想,分部分予以实现。限于篇幅,本文不过 多涉及 Linux内核模块的原理和实现相关的细节。仅仅给出LCRT机制的内核模块实现伪代 用伪代码描述LCRT机制的加载函数如下图3所小: 山国武技文在线 http://www.paper.edu.cn int Icrt init( void) rIn ifier. n"); bt nvram ptr(volatile unsigned char M)ioremap nocache(BT NVRAM BASE, BT NVRAM LENGTH bt nvram index+=sizeof(struct bt info tr BT NVRAM LENGTID) notifier chain register( &panic notifier list, &my panic block ); turn 0- 图3LCRT内核模块加载函数的伪码实现 LCRT机制的通知处理函数完成函数调用关系回溯,得到函数名称,函数栈内容等工作, 限于篇幅,在这里用仍代码说明如下图4所小: void ll bt information (struct pt regs pr) 变量定义等初始化工作 do reglisl-*(unsigned long")( Inylp-8) 从函数栈帧的顶邹获取函数开始执行时保存的寄存器信息 /从函数的代码区中取得函薮的名称 /从函数的栈咴里取出函数执行函数休代码之前保存的函数参数信息 /人本函数的栈帧中得到调川本函数的代妈所在位置和调川本函数的函数栈帧的栈底 whilei(直到函数调用链的链头 /取得函数调用栈啊的内容 填充信息记录的记录头部 将上面的循环中取得的信息保你到丰易失性行储器中 write lo nvram((void *)bi nvram_ plr, &bt record header, sizeof(bt in fo D); 图4通知处理函数的伪码示例 4.验证评估LCRT机制 41部署LCRT机制 部署LCRT机制,使LCRT机制发挥作用前需要做的相关工作有 针对目标 Linux内核编译ICRT机制的 Linux內核模块部分 将LCRT机制的的内核模块部分载入 Linux内核 42实验结果 山国利技记文在线 http://www.paper.edu.cn 为了实验LCRT机制的作用效果,构造ˆ会造成Linuⅸx内核崩溃的设备驱动模块 记这个内核驱动模块为 buggy. ko。列出 buggy. ko中会引起 Linux内核崩溃的代码如下图所 irqreturn t my timer interrupt(int irq, void*dev id, struct pt regs k re 确认硬件状态并清除中状态 ifqujiffies 5000)3 void* ill pointer=NUll (unsig d long川 ill pointers=0: ujiffics++; return IRQ HANDLED 说明:上文中用粗体标出的代码即为产生bug的代码。 图5公引起 Linux內核崩溃的屮断处理函数示例 从图4可以看岀,这个错误是对空指针进行解析而造成的。在一个中断处理函数中如 果发生对空指针的解析,将会引起 Linux内核的崩溃 在部署完成LCRT机制的嵌入式 linux系统上将这个 buggy. ko载入 Linux内核,使得 图4所示的中断处理程序得以运行,LCRI机制可以将相关的信息保存到非易大性存储器中, 在系统复位之后,通过LCRT机制的用户空间工具,可以将保存的信息读取出来。实验结果 显示,可以得到函数调用链信息如下图6所示: my panic handler notifier call chain panIc do kerne fault lo exit 「导致系统宕机 的函数 do page fault do data abort my_ timer Interrupt asm do IRQ do level IrQ 图6LCRT机制记录下的函数调用链 图5中标注出来的即为图4中错误的中断处理函数。也就是真正引起系统宕机的“罪魁 祸首”。而记录下的所有信息仅仅占用了不到1K的存储空间,写入非易失性存储器所耗用 的时间控制在50亳秒以内。在使用少量空间和少量时间的情况下记录下的信息对于查找问 题和解决问题都有较大的帮助。 通过实验得出结论,在LCRT机制的作用,嵌入式 Linux系统中隐减的可能会导致 -6 山国武技文在线 http://www.paper.edu.cn 系统宕杋的软件缺陷可以快速的被定位到。这就为后续的故障解决和软件完善提供了关键的 辅助信息。对嵌入式 Linux内核而言,即是为提髙Lix内核的稳定性和可靠性提供了帮助 5.结论 在基于am的嵌入式 Linux应用中,开发LCRT机制来记录系统内核发生崩溃时引起 崩溃的函数调用链和栈信息到非易失性存储器中。截全目前为止,LCRT机制的可以汜求基 于arm的嵌入式 Linux内核发生崩溃时的函数调用链信息,可直接得到函数名称;可以得到 数调用链中单个凼数被调用时的参数信息,凼数调用链中的函数各自的栈帧信息。这些记 录下来的信息对于完善发展基于arm的嵌入式 Linux应用具有重要的辅助意义 参考文献 [1 MICHAEL M. SWIFT, BRIANN. BERSHAD, and HENRY M. LE Y (University of Washington ImprovingthereliabilityofCommodityoPeratingSystems[ol].http://nooks.cs.washington.edu/nooks-tocs.pdf 205年 IBM Global Services, Linux Education. LKCD Installation and Configuration[oli http://iKcd.sourceforge.net/doc/lkedtutorialpdf2006f 3 Vivek Cioyal, Eric W Biederman, I lariprasad Nellitheertha Kdump, A Kexec-based Kernel Crash Dumping Mechanism[ol].http://se.sourceforge.net/kdump/documentation/ols2o05-kdump-paper.pdf20054f [4 JonaThan CORBET, ALESSANDRO rubinI greg Kroah-HarTman Linux Device Drivers, Third edition[M.魏永明.北京:中国电力出版社,2005. [5 LinSys Soft Technologies Pvt Ltd KGDB Documentation[OL] http:/gdb.linsyssoft.com/downloads/kgdb-2/kgdbdocufull-2.4.pdf2006p [6]LinusTorvaldsRussellKing.LinuxKernelSourceCode.http://lxr.linuxno/linux/arch/arm/mm/fault.c1997 [7] Karim Yagbmou构建嵌入式 Linux系统[M]北京:中国电力出版社,2004年 8] Claudia Salzberg rodriguez Gordon Fischer; Steven smolski. Linux内核编程必读(英文版)[M].北京:机 械工业出版社,2006年 [9]http://www.gnu.org/ [1o]http:/gcc.gnu.org/onlinedocs/gcc-3.3.6/gcci [l] Arthur griffith, GCc技术参考大全[M]胡恩华北京:清华大学出版社,2004年 L】2」 Richard McDougall.lim Mauro. Solaris内核结构(英文版第二版)M北京:机械业出版社,2007年 3] Richard mcdougalljim mauro, Brendan Gregg. Solaris性能与工具(英文版)[M]北京:机械工业出版社 2007牛 」 Marshall Kirk McKusick( george V.Neville-. Neil freeRS操作系统设计与实现M」张辉北京:人民邮电 出版社,2006年 [15] Mark e. RusSinovich, David a solomon.深入解析 Windows操作系统(第4版)[M]潘爱民北京:电子工 业出版社,2007年 [16 IEC INTERNATIONAL 61508-1 STANDARD Functional safcty of clectrical clcctronic /programmable electronic safety-related systems- Part 1: General requirements, 1998-12 山国武技文在线 http://www.paper.edu.cn Embedded linux Kernel fault Trace Technology Li Liang, Fu Yifan National Computer System Engineering Research Institule of China, Beijing(100083) abstract a tidy linux kernel crash information record mechanism that save function call chain and function stack is developed accordingly. The information recorded by this tidy mechanisIm can be used to location the problem efficiently. The tidy record storage satisfies fast reset also Keywords: Linux Kernel, Crash dump, Embedded System 作者简介: 黎亮(1981-),男,陕西人,硕士生,华北计算机系统工程研究所,硏究方向为嵌入式方 向 傅一帆(1954-),男,北京人,研究员级髙级工程师,硕士生导师,华北计算机系统工程硏 究所,研究方向为软件系统安全,E-mail:ivan737@ Sina. com

...展开详情
试读 8P 论文研究-基于嵌入式Linux的内核错误跟踪技术 .pdf
立即下载 低至0.43元/次 身份认证VIP会员低至7折
一个资源只可评论一次,评论内容不能少于5个字
您会向同学/朋友/同事推荐我们的CSDN下载吗?
谢谢参与!您的真实评价是我们改进的动力~
关注 私信
上传资源赚钱or赚积分
最新推荐
论文研究-基于嵌入式Linux的内核错误跟踪技术 .pdf 9积分/C币 立即下载
1/8
论文研究-基于嵌入式Linux的内核错误跟踪技术 .pdf第1页
论文研究-基于嵌入式Linux的内核错误跟踪技术 .pdf第2页

试读结束, 可继续读1页

9积分/C币 立即下载 >