LV02-04-终端配置-01-默认终端长度问题

本文主要终端配置——默认终端长度问题相关笔记,若笔记中有错误或者不合适的地方,欢迎批评指正😃。

点击查看使用工具及版本
PC端开发环境 Windows Windows11
Ubuntu Ubuntu20.04.6的64位版本(一开始使用的是16.04版本,后来进行了升级)
VMware® Workstation 17 Pro 17.0.0 build-20800274
终端软件 MobaXterm(Professional Edition v23.0 Build 5042 (license))
Win32DiskImager Win32DiskImager v1.0
Linux开发板环境 Linux开发板 正点原子 i.MX6ULL Linux 阿尔法开发板
uboot NXP官方提供的uboot,NXP提供的版本为uboot-imx-rel_imx_4.1.15_2.1.0_ga(使用的uboot版本为U-Boot 2016.03)
linux内核 linux-4.15(NXP官方提供)
点击查看本文参考资料
分类 网址 说明
官方网站 https://www.arm.com/ ARM官方网站,在这里我们可以找到Cotex-Mx以及ARMVx的一些文档
https://www.nxp.com.cn/ NXP官方网站
https://www.nxpic.org.cn/NXP 官方社区
https://u-boot.readthedocs.io/en/latest/u-boot官网
https://www.kernel.org/linux内核官网
点击查看相关文件下载
分类 网址 说明
NXP https://github.com/nxp-imx NXP imx开发资源GitHub组织,里边会有u-boot和linux内核的仓库
https://elixir.bootlin.com/linux/latest/source 在线阅读linux kernel源码
nxp-imx/linux-imx/releases/tag/rel_imx_4.1.15_2.1.0_ga NXP linux内核仓库tags中的rel_imx_4.1.15_2.1.0_ga
nxp-imx/uboot-imx/releases/tag/rel_imx_4.1.15_2.1.0_ga NXP u-boot仓库tags中的rel_imx_4.1.15_2.1.0_ga
I.MX6ULL i.MX 6ULL Applications Processors for Industrial Products I.MX6ULL 芯片手册(datasheet,可以在线查看)
i.MX 6ULL Applications ProcessorReference Manual I.MX6ULL 参考手册(下载后才能查看,需要登录NXP官网)

一、问题描述

这个问题是使用Mobaxterm连接正点原子 alpha imx6ull开发板的的时候发现的,就是我们链接好串口后,敲一些很长的命令,它不会换行,会出现字符重叠、换行错误的情况, 非常影响使用感受,就像这样:

image-20241018223238406

即便我的终端已经开成了全屏。

二、问题原因

上面的问题是因为终端软件的换行长度与开发板串口终端长度不一致造成的,可在终端软件进行如下配置强制使用相同的换行长度,开发板默认的串口终端行长度为80个字符, 也可以使用命令“stty size”进行查看。

注意如果使用的是ssh连接,那么终端与开发板的行长度是自动适应的,如果强制换行长度还会多此一举。

三、解决办法

1. 解决方式 1——修改Mobaxterm配置

我们打开串口的配置界面,找到字体设置,然后勾选这个强制固定:

../../_images/serial_config.png

然后重新连接串口,就会变成这样:

image-20241018223847523

可以看到确实不会重叠了,但是观感极差。

2. 解决方式2——修改开发板配置

我们打开开发板的/etc/init.d/rcS文件,去掉这两行:

1
2
shopt -s checkwinsize
resize

没有的话就不管了。然后打开环境变量文件/etc/profile,添加如下内容:

1
2
shopt -s checkwinsize
resize

然后在开机的时候会有如下打印:

image-20241018225227302

然后我们再尝试输入超长的命令,就会发现一切正常。

image-20241018225316744

四、相关命令

1. shopt

shopt命令是set命令的一种替代,很多方面都和set命令一样,但它增加了很多选项。通过执行shopt看看都有那些选项与系统的默认值。命令格式如下:

1
shopt [-psu] [optname]

常用选项说明如下:

1
2
3
-p 选项来查看shopt选项的设置
-u 表示关闭一个选项
-s 表示开启一个选项

我们可以在开发板的终端敲一下这个命令:

1
2
3
4
5
6
root@ATK-IMX6U:~# shopt
autocd off
# ......
checkwinsize on
# ......
xpg_echo off

里面一些常见的参数说明如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
cdable_vars   # 如果给cd内置命令的参数不是一个目录,就假设它是一个变量名,变量的值是将要转换到的目录
cdspell # 纠正cd命令中目录名的较小拼写错误.检查的错误包括颠倒顺序的字符,遗漏的字符以及重复的字符.如果找到一处需修改之处,正确的路径将打印出,命令将继续.只用于交互式shell
checkhash # bash在试图执行一个命令前,先在哈希表中寻找,以确定命令是否存在.如果命令不存在,就执行正常的路径搜索
checkwinsize # bash在每个命令后检查窗口大小,如果有必要,就更新LINES和COLUMNS的值
cmdhist # bash试图将一个多行命令的所有行保存在同一个历史项中.这是的多行命令的重新编辑更方便
dotglob # Bash在文件名扩展的结果中包括以点(.)开头的文件名
execfail # 如果一个非交互式shell不能执行指定给exec内置命令作为参数的文件,它不会退出.如果exec失败,一个交互式shell不会退出
expand_aliases # 别名被扩展.缺省为打开
extglob # 打开扩展的模式匹配特性(正常的表达式元字符来自Korn shell的文件名扩展)
histappend # 如果readline正被使用,用户有机会重新编辑一个失败的历史替换
histverify # 如果设置,且readline正被使用,历史替换的结果不会立即传递给shell解释器.而是将结果行装入readline编辑缓冲区中,允许进一步修改
hostcomplete # 如果设置,且readline正被使用,当正在完成一个包含@的词时bash将试图执行主机名补全.缺省为打开
huponexit # 如果设置,当一个交互式登录shell退出时,bash将发送一个SIGHUP(挂起信号)给所有的作业
interactive_comments # 在一个交互式shell中.允许以#开头的词以及同一行中其他的字符被忽略.缺省为打开
lithist # 如果打开,且cmdhist选项也打开,多行命令讲用嵌入的换行符保存到历史中,而无需在可能的地方用分号来分隔
mailwarn # 如果设置,且bash用来检查邮件的文件自从上次检查后已经被访问,将显示消息”The mail in mailfile has been read”
nocaseglob # 如果设置,当执行文件名扩展时,bash在不区分大小写的方式下匹配文件名
nullglob # 如果设置,bash允许没有匹配任何文件的文件名模式扩展成一个空串,而不是他们本身
promptvars # 如果设置,提示串在被扩展后再进行变量和参量扩展.缺省为打开
restricted_shell # 如果shell在受限模式下启动就设置这个选项.该值不能被改变.当执行启动文件时不能复位该选项,允许启动文件发现shell是否受限
shift_verbose # 如果该选项设置,当移动计数超出位置参量个数时,shift内置命令将打印一个错误消息
sourcepath # 如果设置,source内置命令使用PATH的值来寻找作为参数提供的文件的目录.缺省为打开
source # 点(.)的同义词

2. resize

resize命令设置终端机视窗的大小。执行resize指令可设置虚拟终端机的视窗大小。

语法格式:

1
resize [参数]

常用参数:

  • -c 就算用户环境并非C Shell,也用C Shell指令改变视窗大小。

  • -s 设置终端机视窗的垂直高度和水平宽度。

  • -u 就算用户环境并非Bourne Shell,也用Bourne Shell指令改变视窗大小。