在下面找到您的一系列问题的答案。
什么是旧的恐慌机制,在高层次上是如何运作的?
它是 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/
希望我澄清了您的疑问。
问候,
尤瓦拉吉