到现在为止,我的理解是,只有一个内核日志缓冲区用于printk,并且可以从任何地方调用printk。我试图通过CONFIG_LOG_BUF_SHIFT
来增加日志缓冲区的大小,但是在menuconfig
中我又看到了一个NMI_LOG_BUF_SHIFT
。在网上搜索时,它显示Temporary per-CPU NMI log buffer
。内核中是否有不同的日志缓冲区(比如一个用于中断,另一个用于非中断目的……)。
答案 0 :(得分:1)
在大多数内核上下文(包括中断处理程序)中,printk()均可正常工作。
但是有例外:
printk本身或从那里调用的串行驱动程序的实现
NMI(不可屏蔽中断),它可能在执行printk本身的代码时发生
为了能够从这些环境中进行打印,还有备用缓冲区。它是基于CPU的,因此不需要锁定。预计将使用很少。邮件在安全的上下文中从那里复制到主缓冲区。
在4.10之后,它由CONFIG_PRINTK_SAFE_LOG_BUF_SHIFT控制