[发明专利]一种UEFI固件富调试的方法有效
申请号: | 202010758588.2 | 申请日: | 2020-07-31 |
公开(公告)号: | CN112069056B | 公开(公告)日: | 2023-09-01 |
发明(设计)人: | 沈飞;谭健;王艺璇;徐锋;张辰;李聪 | 申请(专利权)人: | 江苏航天龙梦信息技术有限公司 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 苏州诚逸知识产权代理事务所(特殊普通合伙) 32313 | 代理人: | 曹孝陈 |
地址: | 215500 *** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 uefi 固件富 调试 方法 | ||
本发明公开了一种UEFI固件富调试的方法,具体步骤包括:S1、UEFI固件启动;S2、UEFI固件记录模块装载信息;S3、UEFI固件记录版本信息;S4、UEFI固件记录异常上下文信息;S5、EJTAG下载固件记录的内存数据;S6、查找定位异常原因。本发明当基于UEFI的固件死机时,能有效定位到异常的模块,定位到模块异常的代码段,便于找到代码问题,便于确认死机原因。
技术领域
本发明涉及计算机技术领域,特别是涉及一种UEFI固件富调试的方法。
背景技术
统一可扩展固件接口(英语:Unified Extensible Firmware Interface,缩写UEFI)是一种个人电脑系统规格,用来定义操作系统与系统固件之间的软件界面,作为BIOS的替代方案。可扩展固件接口负责加电自检(POST)、联系操作系统以及提供连接操作系统与硬件的接口。UEFI与传统BIOS的显著区别就是UEFI是用模块化,C语言风格的参数堆栈传递方式,动态链接的形式构建的系统,较BIOS而言更易于实现,容错和纠错特性更强。
由于UEFI有模块化支持动态装载模块这一特点,导致UEFI的模块装载地址在每次开机运行时都有可能是不同的,当固件死机时就无法定位异常模块,不方便定位问题。
发明内容
本发明的任务在于提供一种UEFI固件富调试的方法,有效解决固件调试过程中固件死机无法定位死机原因的问题。
为实现上述目的,本发明提供一种UEFI固件富调试的方法,具体步骤为:
S1、UEFI固件启动;
S2、UEFI固件记录模块装载信息;
S3、UEFI固件记录版本信息;
S4、UEFI固件记录异常上下文信息;
S5、EJTAG下载固件记录的内存数据;
S6、查找定位异常原因。
进一步的,所述固件有专用的内存空间,具体是以0x900000000f000000地址开始的16M内存地址空间,用于储存步骤S2、S3、S4所述信息。
进一步的,所述UEFI固件为固化在主板flash中的程序,其核心代码中增加了用于记录S2、S3、S4所述信息的记录代码。
进一步的,所述固件基于UEFI框架,所述UEFI框架构建时分为PEI阶段和DXE阶段。
进一步的,步骤S2中,记录代码负责记录模块装载信息,所述模块装载信息包括PEI阶段模块装载地址和DXE阶段模块装载地址,分别以“PMIS”、“DMIS”为签名开头,储存于固件专用的内存空间。
进一步的,步骤S4中,记录代码负责记录异常上下文信息,所述异常上下文信息指发生异常时CPU通用寄存器和协处理器的数据,以“EXIS”签名开头。
进一步的,所述EJTAG支持代码级调试,使用EJTAG下载0x900000000f000000地址开始的16M固件专用的内存空间数据。
进一步的,步骤S6所述查找定位异常原因的步骤如下:
S6A、使用解析工具, 解析EJTAG下载的固件专用内存空间数据,依次通过签名字符串定位PEI阶段和DXE阶段模块装载地址,版本信息和异常上下文信息,结合模块装载地址和异常上下文中的EPC定位异常模块;
S6B、通过反汇编模块定位到模块异常的代码段。
本发明的有益效果是:当基于UEFI的固件死机时,能有效定位到异常的模块,定位到模块异常的代码段,便于找到代码问题,便于确认死机原因。
附图说明
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于江苏航天龙梦信息技术有限公司,未经江苏航天龙梦信息技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202010758588.2/2.html,转载请声明来源钻瓜专利网。