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

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

相关推荐
磊 子16 分钟前
详细讲解一下epoll
linux·io·epoll·io多路复用
周周记笔记1 小时前
【元器件专题】用阻抗等效分析法来分析开关电路
单片机·嵌入式硬件
printfLILEI1 小时前
php中的类与对象以及反序列化
linux·开发语言·php
leoFY1231 小时前
STM32H750配置LAN PHY芯片LAN8742
网络·stm32·嵌入式硬件
iCxhust1 小时前
如何利用iret修改cs ip
汇编·单片机·嵌入式硬件·微机原理·8088单板机
zyl837211 小时前
Docker 使用手册
运维·docker·容器
古月方枘Fry2 小时前
MGRE实验
运维·服务器
叠叠乐2 小时前
redmi k90 pro max 强解BL,刷海外rom, 并刷入sukisu ultra
linux
m0_377108142 小时前
stm32平衡车
stm32·单片机·嵌入式硬件
stolentime2 小时前
FreeDomain 本地开发环境快速搭建指南
运维·服务器·网络