我正在开发嵌入式Linux系统(kernel-5.10.24),并且我想尽早获取内核日志,因此我启用了CONFIG_EARLY_PRINTK
内核配置。
当使用U-boot启动内核时,我得到的第一个内核日志不是内核横幅,而是如下,
....
Verifying Checksum ... OK
Uncompressing Kernel Image ... OK
Starting kernel ...
[ 2.243226] printk: console [ttyS0] enabled
[ 2.247565] printk: bootconsole [early0] disabled
......
看来早期的 printk 并没有像我预期的那样工作。
内核命令行如下,
console=ttyS0,115200 loglevel=8 init=/bin/bash root=ubi0:rootfs log_buf_len=32K
内核是否需要任何特定配置才能尽早打印其日志?
答案1
如果您想拥有一个使用内核低级调试功能的早期控制台,请在此处选 Y。添加
earlyprintk
到您的内核参数启用此控制台。
您的内核命令行不包含该earlyprintk
参数。尝试添加一下吗?
另外,用于 ARM 的 Early_printk.c使用printascii()
函数,这似乎受到该CONFIG_DEBUG_UART_FLOW_CONTROL
选项的影响。如果设置了该选项,您的串行控制台电缆是否向嵌入式系统提供 CTS 流控制信号?
似乎没有任何UART初始化代码,因此波特率和其他设置可能仍然是u-boot设置的值。
答案2
感谢 telcoM 分享他的评论,这给了我深入了解 Earlyprintk 内部的提示。
然后,我想通了。
该earlyprintk
驱动程序被硬编码为使用第一个串行控制台,该控制台在我的系统中未连接(它使用另一个串行端口),因此通过更改代码以使用正确的串行端口,earlyprintk
可以按预期工作。
接下来,我将检查是否可以配置串行端口earlyprintk
而不是硬编码。