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设置输出文件

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

相关推荐
HalvmånEver2 小时前
Linux:深入剖析 System V IPC上(进程间通信八)
linux·运维·数据库·c++·system v·管道pipe
EndingCoder2 小时前
泛型类和高级用法
linux·运维·前端·ubuntu·typescript
BIBI20492 小时前
CentOS 7 安装 MongoDB
linux·mongodb·centos·nosql·环境搭建·安装教程·服务器运维
chenzhiyuan20182 小时前
钡铼技术ARMxy系列BL440究竟多适合作为具身机器人核心控制器?
linux
Filotimo_2 小时前
在前端开发中,Jenkins 的作用
运维·jenkins
Better Bench2 小时前
Ubuntu 系统安装 Gym-Fetch-v2以及通过游戏Xbox手柄控制机械臂采集演示数据
ubuntu·游戏·机械臂·fetch·gym·xbox
斯文by累2 小时前
Ubuntu系统上安装Kafka 8.0
linux·ubuntu·kafka
济6172 小时前
linux(第十五期)--蜂鸣器实验-- Ubuntu20.04
linux·运维·服务器
JANGHIGH2 小时前
ipcs命令行工具
运维·服务器