发送 printk 到串口

Dav*_*ave 0 linux tty printk

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

我的主要问题是,当模块/内核崩溃时,最后的 printk 消息会丢失,甚至不会显示,它只是缓冲。

小智 5

在来宾 Linux 内核上

sudo vim /etc/default/grub  
GRUB_CMDLINE_LINUX="console=ttyS1,115200n8 console=tty0 ignore_loglevel"
sudo update-grub  
Run Code Online (Sandbox Code Playgroud)

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


现在在Upstart 系统的控制台 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  
Run Code Online (Sandbox Code Playgroud)

2)要求upstart启动getty

sudo start ttyS1  
Run Code Online (Sandbox Code Playgroud)

对于 Systemd 系统

$ sudo systemctl enable serial-getty@ttyS1.service
$ sudo systemctl start serial-getty@ttyS1.service
$ sudo systemctl daemon-reload
Run Code Online (Sandbox Code Playgroud)