在我们的项目中,我们从其他团队那里获得了当系统崩溃时产生的垃圾,需要进一步调查。我正在开发一个实用程序,该实用程序将ram的一些特定于板的数据保留在ram中,以后可将其用于调试目的。为了更好地了解将使用我的实用程序的环境/过程,我试图弄清楚这些信息。

到现在为止,我知道将有看门狗运行(软件/硬件),当在特定的超时时间内被喂入时,它将被触发。一旦触发,它将通过一些系统寄存器执行系统复位。

现在,我对何时生成ramdump还是有点不清楚,是在重置之前/之后还是在板上需要连接其他工具以捕获ramdump。

我了解一旦有可用的转储文件,我们就可以运行解析器来提取有用的信息,或者可以在gdb之类的调试器中使用它来进一步分析导致崩溃的状态。

最佳答案

有很多工具可以分析ramdump,换句话说就是物理内存转储。

试想一下,复位后RAM的状态如何。通常,在重置后不转储内存,而是在重置之前进行转储以进行内存分析。



详细了解Linux系统中的RAM转储

根据ramdump的生成,传输和存储方式分为三个部分。


内核崩溃或死机时,内核中的支持进入ramdump模式。
引导加载程序中支持检测ramdump,等待主机工具启动ramdump并将数据发送到主机。
可以从设备接收数据并将其保存在主机PC文件系统上的主机工具。


稍后,您还需要具有引导加载程序支持,它决定是否进入ramdump模式,而不是正常引导Linux。



坠毁期间的Ramdump生成

从ramdump驱动程序注册的内核紧急通知程序将由内核调用。 Ramdump司机做,


调用缓存sycn api以确保ram的所有内容都是一致的。(flush_cache_all(),external_flush_all())
将核心寄存器保存到ram
保存MMU寄存器
将MAGIC_CRASH写入SRAM regiter。
然后重新启动。现在,引导加载程序在SRAM寄存器中找到MAGIC_CRASH并进入ramdump模式。


关于Ramdump Linux inspection的非常详细的信息。



您可以尝试这样的事情

$ cat /proc/[your_pid]/maps and the use gdb to inspect
$ gdb --pid [your_pid]




一些可以帮助您的工具。

浏览这些列表,您将找到有关(FATKit)Foresnic Analysis工具包,Foriana等的信息。


Linux memory analysis tools
How to dump Linux memory?

关于android - 系统崩溃时如何生成垃圾转储?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46148905/

10-10 10:03