kdump怎么知道内核崩溃了?

问题描述 投票:0回答:1

kdump会在系统崩溃后调用kexec启动第二个内核,那么kdump是怎么知道内核崩溃的呢?

在哪里可以找到相关资料或代码?

linux linux-kernel crash coredump crash-dumps
1个回答
0
投票

Kdump 是 Linux 中的一种机制,可以捕获崩溃内核的内存转储并将其保存以供以后分析。它依靠 kexec 机制在系统崩溃后启动第二个内核。

kdump 内核是专门构建的内核,在系统启动时加载到内存中。它被配置为捕获崩溃内核的转储并将其保存到磁盘或网络位置。

当系统崩溃时,kdump 内核被崩溃触发,并从崩溃的内核中接管控制权。然后它执行崩溃内核的内存转储并将其保存到配置的位置。内存转储完成后,kdump 内核使用 kexec 启动一个新内核,接管系统的控制权。

kdump 内核旨在通过以下方式检测崩溃:

  1. NMI 看门狗定时器:kdump 内核使用不可屏蔽中断 (NMI) 看门狗定时器来检测崩溃。如果崩溃的内核陷入无限循环或没有响应,NMI 看门狗定时器将触发一个硬件中断,该中断将被 kdump 内核检测到。
  2. Kdump 内核崩溃:如果kdump 内核本身崩溃,会触发硬件复位,系统启动时固件会检测到。然后固件将重启系统,kdump 内核将再次加载以捕获崩溃内核的内存转储。

kdump的相关代码可以在/kernel/kexec.c和/kernel/kexec_core.c文件下的Linux内核源代码中找到。这些文件包含 kexec 机制的实现,kdump 使用该机制在崩溃后引导第二个内核。 kdump 特定的代码可以在 /kernel/kexec_core.c 文件中找到,其中包含崩溃检测机制的实现和内存转储捕获代码。

© www.soinside.com 2019 - 2024. All rights reserved.