前言
本文因笔者使用一台单独的X86主机测试PCIE板卡时发现:来回拔插显示器与鼠标键盘麻烦,使用SSH连接虽暂时免去拔插鼠标键盘显示器,但由于路由器DHCP分配的IP地址可能会变,终究还是免不了拔插鼠标键盘显示器的麻烦。
同样的问题,对于嵌入式开发板就不叫事儿,因为嵌入式开发板可以通过串口连接调试电脑,并通过这个串口暴露终端给调试电脑,即可实现调试电脑与目标板的交互。因此如果把安装有UBUNTU系统的X86主机也变成开发板的模样,问题就迎刃而解了。
另外,此种将目标板终端定向至串口的方式在虚拟机上也有妙用。
1.准备硬件
1.1 串口在主板的何处
虽然当下大多数主板取消了从IO面板引出的串口插座,但主板上的串口插针几乎所有主板还是保留的,如下图所示。
如果使用IO面板带有DB9接口,则直接跳到1.3章节。

1.2 插针转DB9
接下来准备将插针转换为DB9接口的转接线,可参考如下图所示的转接线。

1.3 DB9公口转母口
然后,由于X86主机一般情况下都作为串口的主端因此买到的转接线转换后的DB9插座大概率为公口,由于调试电脑侧同样使用公口且公口之间不能直接连接,因此需要再做一根转接线实现公母口转换的同时反转收发线序,转接线如下图所示。

转接线制作时需要注意如下两个要点:
1.RS232电平不是差分信号,需要GND作为参考平面,因此转接线必须加入地线,因此最少3根线;
2.DB9公头定义中引脚2为RX,引脚3为TX;DB9母头定义中引脚2为TX,引脚3为RX。因此转接线需要反转以适配公头至母头的定义。DB9公头与母头详细的引脚定义如下图。
该转接线使用时无需区分方向,一端插"插针转DB9"的转接线的DB9公头,另一端插调试电脑的串口DB9公头即可。

最后,就可以同连接开发板一样使用调试电脑的DB9公口或RS232转USB线连接调试电脑了。至此硬件准备完毕
2.目标板串口锁定
如果目标板使用主板插针或主板IO面板上的DB9锁定tty很容易,因为从经验而言,不是ttyS0就是ttyS1。测试方式可以使用echo命令打印字符至串口,并在调试电脑上查看是否能收到打印的字符。测试程序如下:
sudo bash -c "echo 'HELLO_TTY' > /dev/ttyS0 "
此时应当看到调试电脑侧的串口打印了HELLO_TTY。如果没有,可以更换ttyS1测试或检查波特率是否正确。可以使用如下命令查看当前波特率:
stty -F /dev/ttyS0 -a
回复如下图所示,可以看到回复中开头就写了波特率。

如果此波特率与调试电脑串口的波特率不符,需要修改,命令如下(以ttyS0串口波特率改为115200为例):
sudo stty -F /dev/ttyS0 115200 cs8 -cstopb -parenb -ixon -crtscts
循环使用上述三个命令即可验证串口号是否正确,且串口是否能够正常收发。做完这一步就可以到最重要的一步了。
3.目标板配置(重要步骤)
注意:所有配置举例均以ttyS0串口,115200波特率为例,实际使用请替换为硬件对应的串口与波特率。
3.1修改配置文件使得内核信息发送至串口
修改/etc/default/grub文件的如下:
bash
GRUB_CMDLINE_LINUX_DEFAULT=""
GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,115200n8"
GRUB_TERMINAL=serial
GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
3.2 令systemd 再开一个登录提示符用于串口登录
sudo systemctl enable serial-getty@ttyS0.service
sudo systemctl start serial-getty@ttyS0.service
进一步地,将串口加入信任列表
sudo sh -c "echo ttyS0 >> /etc/securetty"
3.3转发printk内容至串口
在驱动开发等开发内核状态下的程序时常常会使用printk打印调试信息,且嵌入式板卡也默认会将prink的内容打印到串口。
此步骤修改配置的要点在于配置转发调试信息至串口,并设置可转发到串口消息级别为利于调试的级别。
配置文件为 /etc/systemd/journald.conf
打开找到并修改如下三行
ForwardToConsole=yes #转发至串口的开关
MaxLevelConsole=debug #转发的调试信息的最大级别
TTYPath=/dev/ttyS0 #串口的路径
保存后执行 sudo systemctl restart systemd-journald命令重启服务即可生效。
4.扩展使用
如果UBUNTU安装在VMware虚拟机中,也可使用上述方法实现将串口打印的信息自动转存至主机的文件中。
4.1添加串口
VMware虚拟机默认是没有添加串口的,当然如果已有串口可跳过这一步。

4.2设置输出文件
添加串口后,在设置界面选择"启动时连接",并在"连接"设置中选择"使用输出文件",并指定文件即可。
