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

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

相关推荐
POMAGTOR10 小时前
【5G 通讯 POGOPIN 弹簧顶针连接器解决方案】
网络·嵌入式硬件·5g
牢姐与蒯10 小时前
Linux文件(一).前传之基础IO
linux·运维·服务器
ZLG_zhiyuan10 小时前
测试方案 | 从“000”到“111”,高效完成100BASE-TX以太网眼图测试
单片机·嵌入式硬件
恒锐丰科技林技术员10 小时前
EG1198:120V 宽压内置 MOS 降压 DC‑DC 电源芯片解析
经验分享·嵌入式硬件·硬件工程
码不停蹄Zzz10 小时前
linux驱动程序入门2
linux
ShineWinsu11 小时前
对于MySQL:内置函数的解析
linux·数据库·c++·mysql·面试·函数·查询
万物智能信息科技11 小时前
RK3568 的多路显示移植—【万物智能之开源鸿蒙OpenHarmony系统实战开发系列教程】
linux·开发语言·华为·开源·harmonyos
数字新视界11 小时前
能耗管理系统的综合方案与优化实战解析
嵌入式硬件·物联网·数据中心·数据中心基础设施管理·dcim管理系统
IT菜鸟程11 小时前
Ubuntu 下 apt 版 Nginx 升级为源码编译版本完整操作指南(1.24.0 → 1.30.4 实战)
linux·nginx·ubuntu
深圳市恒锐丰科技杨生11 小时前
EG3525S 推挽 / 半桥 PWM 控制器|屹晶 EGmicro
嵌入式硬件·硬件工程