将 printk 发送到串口

Send printk to serial

我正在尝试调试 Linux 内核的模块。我听说可以将控制台输出发送到串行端口。我在 vmware 上 运行 Ubuntu,想向主机发送 printk 消息。 我已经设法建立了一个串行连接,并且可以通过键入 echo > simething /dev/ttyS1 向主机发送回显 但是我不知道如何将控制台上的输出发送到 ttyS1。

我的主要问题是,当 module/kernel 崩溃时,最后的 printk 消息丢失,甚至没有显示,它只是缓冲。

尝试使用命令行 'console=ttyS1,<baud>' 启动内核,其中 是您在 VM 设置中为该端口配置的波特率。然后内核将使用 /dev/ttyS1 作为主控制台,这就是 printk 将其所有输出发送到的地方。

在客户机上 Linux 内核

sudo vim /etc/default/grub  
GRUB_CMDLINE_LINUX="console=ttyS1,115200n8 console=tty0 ignore_loglevel"
sudo update-grub  

注意:- 内核参数 "ignore_loglevel" 会将所有内核消息打印到控制台。对调试有用。

现在在控制台 ttyS1 上启用 getty
新贵系统
1) 创建一个名为 /etc/init/ttyS1.conf 的文件,其中包含以下内容:

# ttyS0 - getty
#
# This service maintains a getty on ttyS1 from the point the system is
# started until it is shut down again.

start on stopped rc RUNLEVEL=[12345]
stop on runlevel [!12345]

respawn
exec /sbin/getty -L 115200 ttyS1 vt102  

2) 请新贵启动getty

sudo start ttyS1  

对于 Systemd 系统

$ sudo systemctl enable serial-getty@ttyS1.service
$ sudo systemctl start serial-getty@ttyS1.service
$ sudo systemctl daemon-reload