论文部分内容阅读
Linux自1991年第一次对外发布以来,借助于网络以及全世界自由和开源爱好者的共同努力,发展到今天已成为使用最多的一种类UNIX操作系统。Linux广泛用于桌面系统,大型服务器以及超级计算机中,同时也活跃在移动电话、个人数字助理、媒体播放器、消费性电子产品以及航空航天等嵌入式系统中。 Linux内核由一组不和特定进程相关的功能组成,这给关于内核的编程调试带来了独特的挑战。内核代码的错误可能导致整个系统崩溃同时很难重现。调试是编程人员不乐意但又没有法避免的问题,内核调试又因为其特殊性为多数编程人员所头疼。本文介绍了一种基于Kexec内核崩溃转储机制Kdump。文中详细地介绍了Kdump的原理及其在Arm上的实现。Kdump在Linux系统崩溃时,利用Kexec的快速重启机制,跳过引导程序部分,直接加载捕获内核,在捕获内核的上下文保存系统内核的内存映象。保存的转储文件在/proc系统下,可以直接分析,也可以拷贝到其他的机器上做后期的分析与调查,而崩溃的机器可以迅速重启再重新投入使用。转储文件通常为ELF格式,对很多体系架构上的ELF格式的转储文件的分析现已经在GDB和红帽的Crash工具上得到了支持。本文在GDB的基础上开发了一种嵌入Lua脚本的转储文件分析工具。这个工具扩展了Lua的函数库,利用转储文件中的内存信息和可执行文件中保存的调试信息,可以直观地获得当前的PC指针,各个线程的调用栈,局部变量,其他寄存器值等信息,可以列出全局变量特别是重要的数据结构的信息,同时支持利用脚本来增加新关注的变量的信息输出,也可以灵活地扩展和应用到其他的功能上。Kdump有着内核崩溃转储机制共同的特点:能保存系统崩溃时的内存映象,崩溃的机器可以马上恢复投入使用而保存的内存映象可在其他的调试机器上进行后期的分析。同时Kdump又有其独有的特点:可以最低限度地减少对内核代码的入侵,具有极高的可靠性,在众多体系架构上都得到了支持,易于维护,易于使用,转储的内容和目标也很具灵活性等等。这些特点使得Kdump对系统异常特别是产品级的系统异常分析调试特别实用。而本文嵌入脚本的转储文件分析工具,可以简化调试步骤,加快系统崩溃问题的解决。