2

我正在研究 Linux 上的不同日志记录机制,以防发生内核恐慌 (OOPS)。到目前为止,从我在网络上的搜索中,我已经能够得出以下信息:

  • apanic 是完成工作的旧机制。
  • ram_console/persistent_ram 是一种新机制。

有人可以在这方面启发我以下几点吗?

  • 什么是旧的恐慌机制,在高层次上这是如何工作的?
  • 为什么不推荐使用 apanic 机制,转而支持 ram_console/persistent_ram 机制?
  • 新的 ram_console/persistent_ram 机制带来了哪些优势。
  • ram_console/persistent_ram 在功能上与旧的 apanic 方法有何不同?

我只是在寻找指针和高级答案,从某种意义上说,这是我可以进一步研究机制的方向。我将不胜感激这方面的任何相关信息。

谢谢

4

1 回答 1

5

在下面找到您的一系列问题的答案。

什么是旧的恐慌机制,在高层次上是如何运作的?

它是 Android 用于消息记录的机制。它将日志消息写入 NAND 的 mtd 分区中的某个特定偏移量。内核模块将名为“apanic”的文件导出到“debugfs”。可以使用以下命令将 debugfs 挂载到某个目录。“ mount -t debugfs none /sys/kernel/debug” 需要在 linux 内核上启用 debugfs 配置。有关这方面的更多信息,请参阅下面链接中的源代码。

https://android.googlesource.com/kernel/msm.git/+/android-msm-2.6.35/drivers/misc/apanic.c

为什么不推荐使用 apanic 机制,转而支持 ram_console/persistent_ram 机制?

这个 apanic 驱动程序不是 linux 内核的一部分。它是特定于android的。它在最新版本的 androids 中已被弃用。原因可能是当内核 opps 发生时写入 nand 分区可能不是一个好主意。由于 nand_write 很慢并且写入周期有限。这只是我的看法。但我不确定实际原因。

新的 ram_console/persistent_ram 机制带来了哪些优势?

它也是 android 用来记录控制台消息的一种日志机制。在这里,日志消息进入 RAM 区域。在 persistent_ram 的情况下,日志消息会进入 RAM 的持久内存区域(将被保留)。此驱动程序模块在 proc 目录中创建一个名为“last_kmsg”的文件。如果内核 oops 并停止引导,则可以在下次引导时读取此消息。有关更多信息,请查看以下链接中提供的源代码。

https://android.googlesource.com/kernel/common.git/+/android-3.4/drivers/staging/android/ram_console.c

ram_console/persistent_ram 在功能上与旧的 apanic 方法有何不同?

前者基于 ram,后者基于 mtd。

在最新的实验性 android 源中,我没有找到两者的来源。不知道原因。

https://android.googlesource.com/kernel/common.git/+/experimental/android-3.10-rc5/drivers/staging/android/

希望我澄清了您的疑问。

问候,

尤瓦拉吉

于 2013-08-08T08:00:18.570 回答