CN118035030A - 一种基于Uboot的操作***故障监控方法 - Google Patents
一种基于Uboot的操作***故障监控方法 Download PDFInfo
- Publication number
- CN118035030A CN118035030A CN202311828055.7A CN202311828055A CN118035030A CN 118035030 A CN118035030 A CN 118035030A CN 202311828055 A CN202311828055 A CN 202311828055A CN 118035030 A CN118035030 A CN 118035030A
- Authority
- CN
- China
- Prior art keywords
- fault
- operating system
- uboot
- information
- cpu
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000012544 monitoring process Methods 0.000 title claims abstract description 71
- 238000000034 method Methods 0.000 title claims abstract description 43
- 230000009471 action Effects 0.000 claims abstract description 33
- 230000008569 process Effects 0.000 claims description 20
- 230000015556 catabolic process Effects 0.000 claims description 2
- 230000006870 function Effects 0.000 description 6
- 230000007246 mechanism Effects 0.000 description 4
- 238000010586 diagram Methods 0.000 description 3
- 230000006872 improvement Effects 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 230000010365 information processing Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明提供了一种基于Uboot的操作***故障监控方法,包括:操作***上电后,CPU主核将通过Uboot获得的操作***的内核起始地址传递至一个CPU从核,使该CPU从核执行操作***的初始化任务,所述CPU主核执行Uboot的故障监控任务;操作***初始化后执行故障监控代理线程,故障监控代理线程采集操作***的故障信息并存储至故障信息存储域中;Uboot的故障监控任务从故障信息存储域中读取故障信息,对故障信息解析得到故障类型,执行故障处理表中与故障类型匹配的故障处理动作进行故障处理。本发明的方法可以保证Uboot与操作***同时运行,互不干扰,简化了操作***故障定位,提高***的可靠性。
Description
技术领域
本发明属于计算机***软件领域,涉及操作***在运行时故障信息处理技术,具体涉及一种基于Uboot(引导加载程序)的操作***故障监控方法。
背景技术
操作***在运行过程中,可能产生各种类型的故障,由于操作***本身自带异常处理机制,其可以对运行中的故障进行简单、固定的处理,如通过输出提示信息方式进行故障处理。但是在遇到严重故障,例如发生***崩溃、死锁、死循环等时,操作***通常会处于卡死状态,仅仅依赖操作***自带的异常处理机制并不能有效的定位和处理操作***故障。
因此,需要设计一种在操作***出现各种类型故障时都可以进行准确定位和处理的方法。
发明内容
为了解决操作***在出现严重故障时,仅依靠操作***自身携带的异常处理机制不能有效的定位和处理故操作***故障的技术问题,本发明公开了一种基于Uboot的操作***故障监控方法。
实现发明目的的技术方案如下:一种基于Uboot的操作***故障监控方法,包括:
S100、操作***上电后,CPU主核将通过Uboot获得的所述操作***的内核起始地址传递至一个CPU从核,使该所述CPU从核执行所述操作***的初始化任务,所述CPU主核执行所述Uboot的故障监控任务;
S200、所述操作***初始化后执行故障监控代理线程,所述故障监控代理线程采集所述操作***的故障信息,将所述故障信息存储至故障信息存储域中;
S400、所述Uboot的故障监控任务从所述故障信息存储域中读取所述故障信息,对所述故障信息解析得到故障类型,执行故障处理表中与所述故障类型匹配的故障处理动作进行故障处理。
进一步地,上述步骤S400中,所述故障类型包括死锁、死循环、***崩溃、非法内存地址访问和内存泄露。
进一步地,上述基于Uboot的操作***故障监控方法,还包括:
S300、对每种所述故障类型定义故障处理动作,建立所述故障处理表,所述故障处理表中定义有与每种所述故障类型匹配的所述故障处理动作。
更进一步地,上述步骤S300中,所述故障处理动作包括第一故障处理动作和第二故障处理动作,所述第一故障处理动作对应的所述故障类型包括死锁、死循环、非法内存地址访问和内存泄露,所述第二故障处理动作对应的所述故障类型包括***崩溃。
更进一步地,所述第一故障处理动作包括输出并存储错误提示信息,所述故障监控代理线程根据接收的所述错误提示信息对发生所述故障信息的进程进行重启或关闭;
所述第二故障处理动作包括所述Uboot的故障监控任务从操作***内存中加载操作***镜像,对所述操作***执行初始化操作。
优选地,所述错误提示信息包括错误进程ID、进程调用栈和CPU寄存器内容。
进一步地,上述步骤S200中,所述故障监控代理线程采集所述操作***的故障信息,包括:
S210、对每个所述CPU从核定义per-cpu变量;所述故障监控代理线程实时采集所述操作***中每个所述CPU从核的每个进程执行的时间,当发生***时钟中断时对所述per-cpu变量加1,或者当所述CPU从核发生进程切换时对所述per-cpu变量清零;当判断所述per-cpu变量的值大于给定阈值时,输出CPU从核死锁或死循环信息;
S220、所述故障监控代理线程实时采集所述操作***的心跳信息,若在设定周期内未采集到的所述心跳信息时,输出***崩溃信息;
S230、所述故障监控代理线程实时采集所述操作***中每个任务的内存占用值,若某个任务的所述内存占用值大于设定阈值时,输出内存泄露信息。
进一步地,上述步骤S400中,所述对所述故障信息解析得到故障类型,包括:
当所述Uboot的故障监控任务解析所述故障信息的类型为所述CPU从核死锁或死循环信息时,判断所述故障类型为操作***死锁或死循环;
当所述Uboot的故障监控任务解析所述故障信息的类型为所述***崩溃信息时,判断所述故障类型为操作***崩溃;
当所述Uboot的故障监控任务解析所述故障信息的类型为所述内存泄露信息时,判断所述故障类型为操作***内存泄露。
与现有技术相比,本说明书实施例采用的上述至少一个技术方案能够达到的有益效果至少包括:本发明公开的基于Uboot的操作***故障监控方法,在操作***电时,运行Uboot的CPU主核完成操作***的加载后,不使Uboot退出而是由CPU主核继续执行Uboot的故障监控任务,通过Uboot的故障监控任务对操作***的故障监控代理线程采集的故障信息进行判断并进行故障处理。本发明的方法可以保证Uboot与操作***同时运行,互不干扰,简化了操作***故障定位,提高***的可靠性。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1为本发明实施例公开的基于Uboot的操作***故障监控方法的流程图;
图2为本发明实施例公开的硬件资源划分的示意图;
图3为本发明实施例公开的操作***上电和初始化的示意图;
图4为本发明实施例公开的故障处理表中定义的故障处理动作的示意图。
具体实施方式
下面结合附图对本申请实施例进行详细描述。
以下通过特定的具体实例说明本申请的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本申请的其它优点与功效。显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。本申请还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本申请的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例的特征可以相互组合。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
本发明实施例提供了一种基于Uboot的操作***故障监控方法,参见图1所示,包括:
S100、操作***上电后,CPU主核将通过Uboot获得的所述操作***的内核起始地址传递至一个CPU从核,使该所述CPU从核执行所述操作***的初始化任务,所述CPU主核执行所述Uboot的故障监控任务;
一般来说Uboot作为引导加载程序,其功能包括:对硬件设备进行最底层的初始化,如内存控制器初始化、CPU物理地址划分、设备资源分配、引导加载操作***运行,完成这些功能后Uboot退出运行,资源***作***回收。本发明创新性的对Uboot进行改进,参见图3所示,在Uboot完成已有的功能后不退出继续进行运行,通过Uboot监控操作***运行故障、记录故障信息和执行用户定义的故障处理过程,以解决操作***故障定位、记录和处理问题。
具体实施时,对Uboot进行以下几方面的改进,使其具有监控操作***运行故障、记录故障信息和执行用户定义的故障处理过程的功能:
(1)增加故障处理任务,Uboot引导完操作***后并不退出,而是继续执行故障处理任务,故障处理任务的功能是从下述故障信息存储域中读取和解析故障信息,以获取故障类型,根据下述故障处理表中的故障处理动作,进行相应的故障处理;
(2)修改OS引导方式,Uboot执行过程通常由CPU主核运行,其它CPU从核都处于空转状态,其它CPU从核等待CPU主核唤醒;当Uboot加载完成操作***后,CPU主核通过核间中断将操作***执行的起始地址发送给其中一个CPU从核,由该CPU从核执行操作***初始化,而CPU主核继续执行Uboot中的故障处理任务。
S200、所述操作***初始化后执行故障监控代理线程,所述故障监控代理线程采集所述操作***的故障信息,将所述故障信息存储至故障信息存储域中。
具体实施时,操作***本身自带异常处理机制,其可以检测常见的故障,例如非法内存地址访问,并输出提示信息,但是其不能检测死锁、死循环、内存泄露等难发现的故障,也不能对***崩溃这种严重故障进行处理,因此本发明在操作***中增加故障监控代理线程,由故障监控代理线程负责故障收集操作***故障信息,包括死锁、死循环、内存泄露、操作***崩溃。
具体实施时,由于Uboot加载完操作***后不退出,要保证Uboot与操作***同时运行在一个硬件平台上而不互相干扰,就需要对硬件资源进行分割,如图2所示,本发明对硬件资源和物理内存进行划分,硬件资源包括CPU核(CPU0至CPUN)、物理内存、存储设备(存储设备0和存储设备1)和外设(串口、网络)。本发明中,将物理内存划分为Uboot运行域、故障信息存储域和Linux操作***运行域。其中,故障信息存储域用于存放故障信息,操***中的故障监控代理线程把故障信息存放在该故障信息存储域,Uboot的故障监控任务从故障信息存储域中提取故障信息,两者是一对生产者-与消费者关系,因此采用循环缓冲区技术保证双方互斥访问。
具体实施时,所述故障监控代理线程采集所述操作***的故障信息,包括:
S210、对每个所述CPU从核定义per-cpu变量;所述故障监控代理线程实时采集所述操作***中每个所述CPU从核的每个进程执行的时间,当发生***时钟中断时对所述per-cpu变量加1,或者当所述CPU从核发生进程切换时对所述per-cpu变量清零;当判断所述per-cpu变量的值大于给定阈值(如60秒)时,输出CPU从核死锁或死循环信息。
S220、所述故障监控代理线程实时采集所述操作***的心跳信息(心跳信息是一个标识信息),若在设定周期内未采集到的所述心跳信息时,输出操作***故障信息;例如,在超过一个周期Uboot故障处理任务仍未收到操作***的心跳信息,则此时判定操作***发生了崩溃的故障。
S230、所述故障监控代理线程实时采集所述操作***中每个任务的内存占用值,若某个任务的所述内存占用值大于设定阈值时,输出内存泄露信息。
S400、所述Uboot的故障监控任务从所述故障信息存储域中读取所述故障信息,对所述故障信息解析得到故障类型,执行故障处理表中与所述故障类型匹配的故障处理动作进行故障处理。
具体实施时,所述故障类型包括死锁、死循环、***崩溃、非法内存地址访问和内存泄露。
具体实施时,所述对所述故障信息解析得到故障类型,包括:
S410、当所述Uboot的故障监控任务解析所述故障信息的类型为所述CPU从核死锁或死循环信息时,判断所述故障类型为操作***发生死锁或死循环;
S420、当所述Uboot的故障监控任务解析所述故障信息的类型为所述***崩溃信息时,判断所述故障类型为操作***崩溃;
S430、当所述Uboot的故障监控任务解析所述故障信息的类型为所述内存故障信息时,判断所述故障类型为操作***内存泄露。
在本发明一个改进的实施例中,对Uboot的改进还包括增加故障处理表,通过对操作***可能出现的故障进行分类,并每类故障定义默认的处理方式,或者用户自己的定义处理方式。具体实施时,上述基于Uboot的操作***故障监控方法,还包括:
S300、对每种所述故障类型定义故障处理动作,建立所述故障处理表,所述故障处理表中定义有与每种所述故障类型匹配的所述故障处理动作。
其中,所述故障处理动作包括第一故障处理动作和第二故障处理动作,所述第一故障处理动作对应的所述故障类型包括死锁、死循环、非法内存地址访问和内存泄露,所述第二故障处理动作对应的所述故障类型包括***崩溃。
如图4所示,所述第一故障处理动作包括输出并存储错误提示信息,所述故障监控代理线程根据接收的所述错误提示信息对发生所述故障信息的进程进行重启或关闭,所述错误提示信息包括错误进程ID、进程调用栈和CPU寄存器内容;
所述第二故障处理动作包括所述Uboot的故障监控任务从操作***内存中加载操作***镜像,对所述操作***执行初始化操作。
本发明的基于Uboot的操作***故障监控方法,通过对操作***的故障进行实时监控、存储和处理,创新性的利用Uboot监控操作***故障状态,通过对Uboot功能进行改造,对硬件资源进行分割,保证Uboot和操作***同时运行,互不干扰,Uboot在加载完操作***后并不释放资源、退出运行,而是执行操作***故障监控任务,解决了操作***运行过程中故障的实时采集、存储和处理问题,提高了操作***运行的可靠性。以简化操作***故障定位,提高***的可靠性。
显然,本领域的技术人员应该明白,上述的本发明实施例的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明实施例不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明实施例可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (8)
1.一种基于Uboot的操作***故障监控方法,其特征在于,包括:
操作***上电后,CPU主核将通过Uboot获得的所述操作***的内核起始地址传递至一个CPU从核,使该所述CPU从核执行所述操作***的初始化任务,所述CPU主核执行所述Uboot的故障监控任务;
所述操作***初始化后执行故障监控代理线程,所述故障监控代理线程采集所述操作***的故障信息,将所述故障信息存储至故障信息存储域中;
所述Uboot的故障监控任务从所述故障信息存储域中读取所述故障信息,对所述故障信息解析得到故障类型,执行故障处理表中与所述故障类型匹配的故障处理动作进行故障处理。
2.根据权利要求1所述的基于Uboot的操作***故障监控方法,其特征在于,所述故障类型包括死锁、死循环、***崩溃、非法内存地址访问和内存泄露。
3.根据权利要求1所述的基于Uboot的操作***故障监控方法,其特征在于,还包括:
对每种所述故障类型定义故障处理动作,建立所述故障处理表,所述故障处理表中定义有与每种所述故障类型匹配的所述故障处理动作。
4.根据权利要求3所述的基于Uboot的操作***故障监控方法,其特征在于,所述故障处理动作包括第一故障处理动作和第二故障处理动作,所述第一故障处理动作对应的所述故障类型包括死锁、死循环、非法内存地址访问和内存泄露,所述第二故障处理动作对应的所述故障类型包括***崩溃。
5.根据权利要求4所述的基于Uboot的操作***故障监控方法,其特征在于,所述第一故障处理动作包括输出并存储错误提示信息,所述故障监控代理线程根据接收的所述错误提示信息对发生所述故障信息的进程进行重启或关闭;
所述第二故障处理动作包括所述Uboot的故障监控任务从操作***内存中加载操作***镜像,对所述操作***执行初始化操作。
6.根据权利要求5所述的基于Uboot的操作***故障监控方法,其特征在于,所述错误提示信息包括错误进程ID、进程调用栈和CPU寄存器内容。
7.根据权利要求1所述的基于Uboot的操作***故障监控方法,其特征在于,所述故障监控代理线程采集所述操作***的故障信息,包括:
对每个所述CPU从核定义per-cpu变量;所述故障监控代理线程实时采集所述操作***中每个所述CPU从核的每个进程执行的时间,当发生***时钟中断时对所述per-cpu变量加1,或者当所述CPU从核发生进程切换时对所述per-cpu变量清零;当判断所述per-cpu变量的值大于给定阈值时,输出CPU从核死锁或死循环信息;
所述故障监控代理线程实时采集所述操作***的心跳信息,若在设定周期内未采集到的所述心跳信息时,输出操作***崩溃信息;
所述故障监控代理线程实时采集所述操作***中每个任务的内存占用值,若某个任务的所述内存占用值大于设定阈值时,输出内存泄露信息。
8.根据权利要求7所述的基于Uboot的操作***故障监控方法,其特征在于,所述对所述故障信息解析得到故障类型,包括:
当所述Uboot的故障监控任务解析所述故障信息的类型为所述CPU从核死锁或死循环信息时,判断所述故障类型为操作***发生死锁或死循环;
当所述Uboot的故障监控任务解析所述故障信息的类型为所述***崩溃信息时,判断所述故障类型为操作***崩溃;
当所述Uboot的故障监控任务解析所述故障信息的类型为所述内存泄露信息时,判断所述故障类型为操作***内存泄露。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311828055.7A CN118035030A (zh) | 2023-12-27 | 2023-12-27 | 一种基于Uboot的操作***故障监控方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311828055.7A CN118035030A (zh) | 2023-12-27 | 2023-12-27 | 一种基于Uboot的操作***故障监控方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN118035030A true CN118035030A (zh) | 2024-05-14 |
Family
ID=91003248
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311828055.7A Pending CN118035030A (zh) | 2023-12-27 | 2023-12-27 | 一种基于Uboot的操作***故障监控方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN118035030A (zh) |
-
2023
- 2023-12-27 CN CN202311828055.7A patent/CN118035030A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP2431876B1 (en) | Method and device for exception handling in embedded system | |
CN107122321B (zh) | 硬件修复方法、硬件修复***以及计算机可读取存储装置 | |
US5815651A (en) | Method and apparatus for CPU failure recovery in symmetric multi-processing systems | |
US8726225B2 (en) | Testing of a software system using instrumentation at a logging module | |
US7870443B2 (en) | Method to isolate crash of an embedded multi-threaded application to a shared library call without core dump files or debugger | |
US20060117316A1 (en) | Hardware multithreading systems and methods | |
US8230429B2 (en) | Detecting a deadlock condition by monitoring firmware inactivity during the system IPL process | |
US20120304184A1 (en) | Multi-core processor system, computer product, and control method | |
US20160188243A1 (en) | Memory access protection using processor transactional memory support | |
CN102609324B (zh) | 一种虚拟机死锁后的恢复方法、装置及*** | |
CN113220535A (zh) | 程序异常的处理方法、装置、设备及存储介质 | |
CN105224403B (zh) | 一种中断处理方法及装置 | |
US9864708B2 (en) | Safely discovering secure monitors and hypervisor implementations in systems operable at multiple hierarchical privilege levels | |
JP2008513899A (ja) | コンピュータシステム上でコンピュータプログラムを処理する方法 | |
CN114428733A (zh) | 基于静态程序分析与模糊测试的内核数据竞争检测方法 | |
CN102708015A (zh) | 基于cpu不可屏蔽中断***问题诊断的调试方法 | |
US9535772B2 (en) | Creating a communication channel between different privilege levels using wait-for-event instruction in systems operable at multiple levels hierarchical privilege levels | |
US9092333B2 (en) | Fault isolation with abstracted objects | |
CN115576734B (zh) | 一种多核异构日志存储方法和*** | |
US7509533B1 (en) | Methods and apparatus for testing functionality of processing devices by isolation and testing | |
CN116627702A (zh) | 虚拟机的宕机重启方法及装置 | |
CN118035030A (zh) | 一种基于Uboot的操作***故障监控方法 | |
US20130318310A1 (en) | Processor processing method and processor system | |
Shimada et al. | A lightweight monitoring service for multi-core embedded systems | |
US20180018240A1 (en) | Obtaining state information of threads of a device |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |