论文部分内容阅读
Linux内核代码量大、逻辑关系复杂,因此对内核中的错误进行追溯和调试一直以来都是一件既耗费时间又耗费精力的事情。已有的错误追溯方法和技术种类繁多、效果各异,但几乎都是面向一般的应用程序,很难或者无法适用到Linux内核上,且传统的Linux内核错误调试方法复杂不直观,对使用者要求也高。因此,研究并设计针对Linux内核错误追溯的系统具有一定的研究和实用意义。Linux内核错误按照错误的发生阶段可以分为静态编译错误和动态运行错误。本文首先研究了国内外错误追溯相关技术,分析了各种错误追溯技术的特点,然后分别针对静态编译错误和动态运行错误提出了对应的错误处理方法,并结合已有技术设计并实现了Linux内核错误追溯系统。主要研究内容如下:1、针对静态编译错误,本文选择需要频繁跟随内核进行升级更新的设备驱动进行研究。Linux设备驱动数量众多,在更新过程中会遇到大量编译错误。本文采用静态程序分析技术对不同版本间的Linux内核接口进行了差异分析,并结合历史提交信息检索技术对设备驱动更新错误进行分析和解释,设计并实现了可以对Linux设备驱动更新错误进行追溯的系统。2、针对动态运行错误,本文根据其错误信息少、难以定位的特点提出了一种静态和动态程序分析技术相结合的方法进行错误追溯。静态方面使用静态程序分析技术对Linux内核中的函数调用信息进行收集,并且对单一函数采用静态后向程序切片技术来实现。动态方面,本文使用动态执行信息收集技术对Linux内核的运行过程进行记录,用来在分析过程中还原真实的内核执行流程。两种技术的结合使用可以确保能够对真实运行的函数进行程序切片,使得切片结果更加精确,更加便于开发者调试和追溯运行错误。3、最后对上述两部分分别设计了实验来验证可行性。通过对几个真实的设备驱动进行更新,并使用工具来辅助解决编译问题,成功地将实验中的设备驱动升级到版本较新的Linux内核中。对于运行错误,则通过使用工具分析一个已知的Linux内核错误来验证方法的可行性。