我正在尝试调试 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)