UBUNTU串口打印终端,X86主机变开发板

前言

本文因笔者使用一台单独的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设置输出文件

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

相关推荐
mzhan0177 小时前
Linux: compare的直观性
java·linux·服务器
原来是猿7 小时前
TCP Server 业务扩展实战:从 Echo 到远程命令执行与词典翻译
linux·运维·服务器
运维老郭7 小时前
K8S 容器独占 CPU(CPU 绑核)最佳实践,解锁极致性能所需的 3 个核心条件及其代价
运维·云原生·kubernetes
香菜农民8 小时前
域名证书管理
运维·docker
剑神一笑8 小时前
Linux awk 命令:文本处理的瑞士军刀
linux·运维·chrome
江湖有缘8 小时前
从零开始:基于Docker Compose的Kener监控面板部署全记录
运维·docker·容器
躺不平的理查德8 小时前
Shell逻辑判断备忘录
运维·服务器·git
月光技术杂谈8 小时前
国内环境下安装 docker-ce 的完整步骤
运维·docker·容器
用户2367829801689 小时前
Linux df 命令深度解析:从磁盘空间监控到 inode 耗尽排查
linux
旧梦吟9 小时前
5.9 电工考试-易错题
stm32·嵌入式硬件