CentOS 7 开启serial console

Note: 这不是把 VGA 的画面重定向到 serial console, 而是在 COM1 开终端, 画面是没法重定向到字符设备的!

  • tty - a native terminal, either kernel-emulated or hardware-implemented;
  • ttys - serial console;
  • pty - Pseudo-terminal service, something emulated by a software like screen or ssh;

了解更多

dmesg |grep 'ttyS[0-9] at'
# 输出
[    0.000000] console [tty0] enabled
[    1.944209] 00:03: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[    1.964880] 00:04: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A

出现以上console enabled表示支持:

  • 一般主板通过IO芯片提供2个serial console1)
  • 对应到 Linux 系统: COM1=ttyS0, COM2=ttyS1

stty -F /dev/ttyS0 speed 115200
stty < /dev/ttyS0
systemctl start getty@ttyS0

同时输出到 ttyS0(COM1) 和 tty0(第1个终端) 和 tty1(第2个终端)

改变的参数会体现在/boot/grub2/grub.cfglinux16所在的行.

4.1 option1

Note: 比起option2, 缺少 grub2 启动菜单的输出.

grubby --update-kernel=ALL --remove-args="rhgb quiet" --args="console=tty0 console=tty1 console=ttyS0,115200n8"

4.2 option2

由于我测试的时候使用的COM2而非COM1,按照网上教程一直不显示GRUB的启动菜单,于是serverfault请教:

编辑 /etc/default/grub

diff -u /etc/default/grub.ori /etc/default/grub
# 输出
@@ -3,6 +3,8 @@
 GRUB_DEFAULT=saved
 GRUB_DISABLE_SUBMENU=true
 GRUB_TERMINAL_OUTPUT="console"
-GRUB_CMDLINE_LINUX="rhgb quiet"
+GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,115200n8"	# OS的输出(COM1),如果是COM2,则ttyS1
 GRUB_DISABLE_RECOVERY="true"
+GRUB_TERMINAL="serial console"								# GRUB自己的输出
+GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"	# GRUB自己的输出,如果是COM2,则--unit=1

完整的配置示例:

GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto console=tty0 console=ttyS0,115200n8"
GRUB_DISABLE_RECOVERY="true"
GRUB_TERMINAL="serial console"
GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,115200"
GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"

重新生成启动项:

# On BIOS-based machines, issue the following command as root:
grub2-mkconfig -o /boot/grub2/grub.cfg
# On UEFI-based machines, issue the following command as root:
grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg

查看开机启动菜单:

grep "^menuentry" /boot/grub2/grub.cfg | cut -d "'" -f2

4.3 检查

cat /boot/grub2/grub.cfg | grep ttyS0
# 重启生效
reboot

重启即可登录,登录方式如下:

  • 协议选择: serial;
  • 端口选择: 根据本机识别的COM来登录;2)
  • 波特率: 115200
  • 数据位: 8
  • 奇偶校验: 无
  • 停止位: 1
  • 数据流控制: 不勾选

相关截图:

虚拟机添加串口设备:

固定格式\\.\pipe\vm

设置Named Pipe TCP Proxy Utility:


然后通过telnet 127.0.0.1 7777就能访问虚拟机的COM输出了:

启动菜单,grub2阶段 bootloader阶段 bootloader阶段,已经可以登录系统..



1)
COM1一般是提供一个DB9/RJ45(网络专用设备)规格的接口,而COM2是在主板上用排线连接出来的
2)
windows可通过设备管理器查看连接的COM几
  • linux/centos7/serial_console.txt
  • 最后更改: 2020/03/05 22:21
  • 由 mrco