系统崩溃时如何生成 ramdumps?

How are ramdumps generated on a system crash?

在我们的项目中,我们从其他团队获得 ramdumps,这是在系统崩溃的情况下生成的,需要进一步调查。我正在开发一个实用程序,它将一些特定于板的数据保存在 ram 中,以后可以用于调试目的。为了更好地理解将在其中使用我的实用程序的 environment/process,我试图弄清楚这些信息。

直到现在我知道会有看门狗 运行ning (software/hardware),当在特定的超时持续时间内被喂食时它会被触发。一旦被触发,它将通过一些系统寄存器执行系统复位。

现在我不太清楚 ramdumps 是什么时候生成的,是 before/after 重置,还是需要一些其他工具连接到板子上来捕获 ramdumps。

我知道一旦 ramdumps 可用,我们就可以 运行 解析器来提取有用的信息,或者可以在 gdb 等调试器中使用它来进一步分析导致崩溃的状态。

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

想象一下重置后RAM的状态。通常,您不会在重置后转储内存,而是在重置前进行内存分析,以便进行内存分析。


关于 Linux 系统中 RAM 转储的详细信息

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

  1. 内核中支持当内核崩溃或冻结时进入ramdump模式。
  2. 在boot-loader中支持检测ramdump,等待主机工具启动ramdump并将数据发送到主机。
  3. 一个主机工具,可以从设备接收数据并将其保存在主机 PC 文件系统中。

以后还需要bootloader支持,它决定是否进入ramdump模式而不是正常引导Linux。


崩溃期间生成 Ramdump

内核将调用从 ramdump 驱动程序注册的内核崩溃通知程序。 Ramdump 驱动程序,

  1. 调用cache sycn api 确保ram中的所有内容是连贯的。(flush_cache_all(), outer_flush_all())
  2. 将核心寄存器保存到 ram
  3. 保存 MMU 寄存器
  4. 写入MAGIC_CRASH到SRAM寄存器。 然后重新启动。现在引导加载程序在 SRAM 寄存器中找到 MAGIC_CRASH 并进入 ramdump 模式。

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


你可以在飞行中尝试这样的事情

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

一些可以帮助你的工具。

浏览这些列表,您将找到有关 (FATKit) 取证分析 toolkit.Foriana 等的信息

  1. Linux memory analysis tools
  2. How to dump Linux memory?