如何在系统崩溃时生成ramdumps?

时间:2017-09-11 05:45:02

标签: android debugging embedded adb embedded-linux

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

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

现在我对生成ramdumps时有点模糊,是在重置之前/之后,还是需要一些其他连接到板上的工具来捕获ramdumps。

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

1 个答案:

答案 0 :(得分:1)

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

想象一下复位后RAM的条件是什么。一般情况下,在重置之前,不要在重置之前转储内存,以便进行内存分析。

详细介绍Linux系统中的RAM转储

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

  1. 当内核崩溃或冻结时,内核支持进入ramdump模式。
  2. 支持boot-loader检测ramdump,等待主机工具启动ramdump并将数据发送给主机。
  3. 可以从设备接收数据并将其保存在主机PC文件系统上的主机工具。
  4. 稍后您还需要支持引导加载程序,它会决定是否进入ramdump模式而不能正常启动Linux。

    崩溃期间产生Ramdump

    内核将调用从ramdump驱动程序注册的内核恐慌通知程序。 Ramdump司机呢,

    1. 调用缓存sycn api以确保ram的所有内容一致。(flush_cache_all(),outer_flush_all())
    2. 将核心寄存器保存到ram
    3. 保存MMU寄存器
    4. 将MAGIC_CRASH写入SRAM regiter。 然后重新启动。现在boot-loader在SRAM寄存器中找到MAGIC_CRASH并转到ramdump模式。
    5. 有关Ramdump Linux inspection的详细信息。

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

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

      一些可以帮助您的工具。

      通过这些列表,您将找到有关(FATKit)Foresnic Analysis toolkit.Foriana等的信息

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