将 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
我正在尝试调试 Linux 内核的模块。我听说可以将控制台输出发送到串行端口。我在 vmware 上 运行 Ubuntu,想向主机发送 printk 消息。 我已经设法建立了一个串行连接,并且可以通过键入 echo > simething /dev/ttyS1 向主机发送回显 但是我不知道如何将控制台上的输出发送到 ttyS1。
我的主要问题是,当 module/kernel 崩溃时,最后的 printk 消息丢失,甚至没有显示,它只是缓冲。
尝试使用命令行 'console=ttyS1,<baud>' 启动内核,其中
在客户机上 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