项目起源:
2020.01.20 v1.0.0 影子终端(shadowTerminal)工具的开发来自于实际需求,x86平台下调试网卡驱动,需要查看内核调试信息,但x86平台下内核终端是在显示器上的,屏幕不能滚动显示,当调试信息较多时就看不到前面的打印了,所以需要有方法将系统终端转移到开发主机上。
解决方法:
- 修改系统启动参数,将内核终端映射到串口上。现今的电脑很少再有原生串口了,即便有些台式机有,也是在主板
上并未引出。 - 使用USB转串口或PCI串口,此类串口一般需要系统启动后,加载完驱动,使用特殊操作才能将内核终端映射过来。
- 使用syslog将信息传到外部服务器,需要修改内核或驱动中的打印函数,且一般只能以文件方式读取。
- 给系统增加一个强大的图形显示的终端软件,可以拖动滚动条查看以往信息。
- 将内核终端映射到一个文本文件,再通过ftp下载该文件进行查看。
- 能不能在Telnet下,执行个命令,就把内核终端映射过来呢?通过网络的话,速度快,不限定距离,连接方便。
功能:
- 可以使得内核终端映射到多个设备,且各设备间保持同步状态。
- 映射到内核终端设备可以是,串口,文本文件,和Telnet。
- 不需要改动内核或驱动,部署启动一个内核模块,再执行一条命令即可。
- 完美实现了上面解决方法中的2、5、6。
- 启动后不影响原有终端设备功能,新增加的终端设备如同原有终端设备的影子一样,具有完全相同的状态。
- 原理上除了可以映射内核终端外,其他进程终端(每个进程有各自独立的标准输入输出)也是可以映射的。
应用情景:
- 避免内核终端在显示器上时,查看不全的问题。
- 调试过程中需要暂停终端当前显示内容,以便查看分析。
- 需要同时开启多个内核终端,便于多人协作。
- 在开启多个内核终端时,其中一路可以开启会话日志,将内容保存为文件,其他路可以暂停、关闭等,而互不影响。
- 设备不在身边(比如在隔壁房间),或机箱不便打开,或连接串口终端缺少线缆,接头,USB转串口模块等情况下。
- 黑进同事的设备,给他来个恶作剧。
- 呼叫你隔壁屋沉迷调试bug中的同事,该去吃饭了。
操作方法:
- 到gitlab仓库拉去最新版本shadowTerminal工程源码,shadowTerminal是一个内核模块工程。
- 根据目标板处理器体系结构,导入对应的工作空间,关联base,编译,编译后得到shadowTerminal.ko文件。
- 部署shadowTerminal.ko文件到目标板,并安装:insmod /lib/modules/shadowterminal.ko
安装后只会注册sterminal命令。 - sterminal -help 命令,查看命令帮助信息。
- 在系统默认内核终端中执行 sterminal 命令,无变化;在Telnet终端中执行sterminal命令。会将当前Telnet终端
映射到内核终端。 - sterminal -f /dev/ttyUSB0 -b 115200 -o none 命令, 将串口/dev/ttyUSB0绑定到内核终端,同时设置串口波
特率和帧格式。 - sterminal -f /apps/log命令, 新建普通文件/apps/log绑定到内核终端。
更新记录:
2020.01.20 v1.0.0
- 初始版本,基本实现telnet映射系统终端的功能。
2022.04.24 v1.1.0
- 修正telnet映射连接时出现卡动的问题。
- 解决telnet映射断开时原有命令行无法使用的问题。
下载地址:
目前对外只提供了x86/x64平台的可执行程序下载,内核版本是V1.12.9,shadowTerminal版本是V1.1.0。 shadowTerminal_x86.ko shadowTerminal_x64.ko
翼辉内部人员可在公司内部Git仓库查看及下载源码。
测试截图
当前版本只在x86虚拟机上进行了测试。
模拟显示器下的控制台启动界面。 putty下串口0的命令行启动界面。
SecureCRT下telnet连接的命令行启动界面。
telnet下安装shadowTerminal操作。
telnet下安装映射系统中断操作,注意x86平台下的系统终端在显示器上,不是串口0。映射成功后系统输出都会显示在telnet界面,telnet界面下的输入也是同步到系统终端中,两处命令行是完全同步的。而此时串口0并未映射系统终端,所以是独立不受印象的。
串口0的命令行也可以映射到系统终端,这样3个终端串口就都绑定且同步了。
|