参考自:https://blog.csdn.net/qq_41076734/article/details/116885672
https://www.imooc.com/article/254136
https://blog.csdn.net/u011559046/article/details/118867666
1. 前言
在嵌入式开发中,串口打印是工程师最常用也是最好用的调试方式,所以串口终端软件是一个嵌入式开发者必备的工具,一般我们都习惯使用Windows下的串口终端软件(譬如SecureCRT、Xshell、putty等等),今天我介绍一款Ubuntu下的串口终端软件 minicom。
2. 安装
在Ubuntu终端中输入命令 sudo apt-get install minicom
进行安装。
3. 配置
第一次启动时,在Ubuntu终端中输入 sudo minicom -s
,对minicom进行第一次的配置。
注意:前边一定要加sudo,否则在配置完后会出现 cannot write to /etc/minicom/minirc.dfl 的权限问题!
在弹出的对话框内,选择 Serial port setup 一项,然后按下 a 键,修改为 /dev/ttyUSB0
,然后按下回车; //之所以选择 ttyUSB0,是因为我将串口插到主机上后在 dev 目录下多出来的就是 ttyUSB0
再按 e,修改为 115200 8N1
(波特率:115200,数据位:8,奇偶校验位:N 无,停止位:1),设置传输的比特率等设置,然后按下回车;
再按 f,把 Hardware Flow Control
修改为No,然后按下回车;
再在刚才的主菜单中选择 Save setup as dfl
,保存为默认配置,最后选择Exit from minicom,退出配置菜单。
这个配置过程和内容,与Windows下的串口终端软件的配置没什么区别,就是设置串行端口号、波特率、流控。
注意:非正常关闭minicom,会在/var/lock下创建几个文件LCK*,这几个文件阻止了minicom的运行,将它们删除后即可恢复。
4. 启动
在第三步配置完成并保存的情况下,在终端中执行命令 sudo minicom
来启动minicom,将开发板与电脑用串口线连接起来并上电启动,这时 minicom 界面就会有打印出来。
还可以通过命令 sudo minicom -D /dev/ttyUSB0 -s xr872
在启动minicom时指定端口号和配置文件(需存在 /etc/minicom/minirc.xr872
文件)。
此时会有打印输出,但是没有换行或者没有回显,还需要对minicom进行配置,如下所示:
5. 退出
首先按下CTRL+A,然后输入Z,进入菜单项,按下X键退出minicom。
6. 配置权限
注意:minicom 本身不需要sudo权限,但因为要打开串口设备/dev/xxx ,所以一般会需要使用sudo来启动minicom。
这里我们可以修改下串口设备的权限,这样以后就不用使用sudo了。
方式一:使用命令更改
简单粗暴地使用chmod命令修改
sudo chmod 666 /dev/ttyUSB0
方式二:配置udev规则(推荐)
修改配置文件
sudo vim /etc/udev/rules.d/70-ttyusb.rules
增加一行
KERNEL=="ttyUSB[0-9]*", MODE="0666"
修改后,需要重新插拔设备,以重新生成设备节点。
7. 自动设置设备名
如果日常只用一个设备,设备名固定是 /dev/ttyUSB0
,那每次直接打开minicom即可。
但当你可能需要使用多个串口时,问题就来了,每次需要先查看下设备名
ls /dev/ttyUSB*
再配置下minicom,手工改成这个设备,才能使用。一点都不方便。
这里给出了解决方式:
使用参数指定设备(推荐)
研究mincom的参数后,发现使用 minicom 的 -D 参数可以很简单的实现。
编写脚本 ~/.myminicom.sh
com() {
ports_USB=$(ls /dev/ttyUSB*)
ports_ACM=$(ls /dev/ttyACM*) #arduino
ports="$ports_USB $ports_ACM"
select port in $ports;do
if [ "$port" ]; then
echo "You select the choice '$port'"
minicom -D "$port" "$@"
break
else
echo "Invaild selection"
fi
done
}
在~/.bashrc中引入此函数
echo 'source ~/.myminicom.sh' >> ~/.bashrc
source ~/.bashrc
添加完毕后,可使用 com 命令调用。
使用效果
houxiaoni@houxiaoni-Haier-PC:~$ com
1) /dev/ttyUSB0
2) /dev/ttyUSB1
#?
此时输入数字,选择要的打开的串口设备,回车即可。
8. 自动保存log
让 minicom 自动保存log,可以方便调试。
查看参数,minicom可以使用 -C 参数指定保存log文件。于是完善脚本,自动把log以日期命名,保存到 ~/Log
目录下。
注意,如果保存到 /tmp 目录需谨慎,tmp目录关机即清空,如果想持久保存log,需要修改到其他目录。
com() {
ports_USB=$(ls /dev/ttyUSB*)
ports_ACM=$(ls /dev/ttyACM*) #arduino
ports="$ports_USB $ports_ACM"
datename=$(date +%Y-%m-%d-%H-%M-%S)
select port in $ports;do
if [ "$port" ]; then
echo "You select the choice '$port'"
minicom -D "$port" -C ~/Log/"${port##*/}-$datename".log "$@"
break
else
echo "Invaild selection"
fi
done
}
下面还介绍了两种保存log的方式,这两种方式都需要每次进行设置,不如上面使用脚本的方式便捷。
方法一:
通过如下命令可以使minicom 从系统获取准确的时间保存log
sudo minicom -c on -C Log/com-log-$(date +%Y-%m-%d_%H:%M:%S).log
sudo minicom -D /dev/ttyUSB0 -C Log/com-log-$(date +%Y-%m-%d_%H:%M:%S).log
(指定端口号)
方法二:
首先打开minicom,然后按一下ctrl + a,再按z键,会出现下面这个界面:
看到Capture on/off这个选项,按下L键,会出现下面的窗口:
提示输入一个Capture的文件名,默认就是minicom.cap,上图我做了修改,然后按一下回车,就可以将log信息保存到一个文件中了,这样遇到log相对较多也能抓取完整,也方便我们查看。
9. 更多
(1)暂停输出
Ctrl+A 是mimicom的特殊功能前缀按键,但还有另一个很实用的作用,就是暂停屏幕输出。
在设备开始大量输出log时,基本看不清屏幕内容。此时可以按 Ctrl+A,暂停输出,方便查看所需log。
Ctrl+A 进入特殊功能:
- 按 Z 键:进入设置菜单
- 按 O 键:打开配置选项
- 按 W 键:自动卷屏。当显示的内容超过一行之後,自动将後面的内容换行。这个功能在查看内核的啓动信息时很有用
- 按 C 键:清除屏幕的显示内容
- 按 B 键:浏览minicom的历史显示
- 按 X 键:退出minicom,会提示确认退出
- 按 N 键:可激活时间戳,在每行log前添加当前系统的时间戳
- 按 S 键:可向设备端发送文件
- 按 R 键:可接收文件
(2)打开minicom时间戳
在minicom中,按下 Ctrl+A,再按 N,即可激活时间戳,在每行log前添加当前系统的时间戳。
用于观察启动时间之类的,还是比较方便。
(3)发送接收文件
设备端支持的话,按下 Ctrl+A,再按 S,即可向设备端发送文件。
按 Ctrl+A,再按 R,可接收文件。
(4)自动换行
当你的log中可能存在,单行长度超过屏幕宽度的log时(比如启动时打印的kernel cmdline),可以使用mimicom的自动换行功能。
在启动minicom时加上 -w 选项,或者在minicom中,按 Ctrl+A 再按 W。
(5)更多功能
可以使用 minicom -h 查看,也可在mincon中,按 Ctrl+A 再按 Z 查看。
(6)源码
文中的代码非最新版本,请访问 https://github.com/zqb-all/EasierMinicom 获取带有更多功能的最新版本。
10. 附录
网上提供的其他自动脚本,供以后参考使用。参考:EasierMinicom
com() {
local ports_USB ports_ACM ports datename dev devs dev_count
ports_USB=$(ls /dev/ttyUSB* 2>null | xargs -I {} basename {})
ports_ACM=$(ls /dev/ttyACM* 2>null | xargs -I {} basename {})
ports="$ports_USB $ports_ACM"
#check lock
devs=""
dev_count=0
for dev in ${ports}; do
! ls /run/lock/*"${dev}"* &>/dev/null && {
devs+="${dev} "
((dev_count++))
}
done
[ -z "$devs" ] && echo "No Unlock Devices" && return 0
datename=$(date +%Y%m%d-%H%M%S)
if [ $dev_count -eq 1 ]; then
dev=$devs
else
#select dev to open
echo "Please select one device: (Ctrl+C to abort)"
select dev in $devs; do
if [ "$dev" ]; then
echo "You select the '$dev'"
break
else
echo "Invaild selection"
fi
done
fi
out="/tmp/$(basename ${dev}).$datename.log"
keep_dir="${HOME}/minicom_keep"
minicom $dev -C "${out}" "$@"
[ -f "${out}" ] && {
echo log : "${out}"
read -p "Keep it? [y|N]: " keep
[ "${keep}" = 'Y' -o "${keep}" = 'y' ] && {
read -p "Enter file name > " keep_file_name
[ x"$keep_file_name" = x"" ] && keep_file_name=$(basename "${out}")
mkdir -p "$keep_dir"
cp "${out}" "${keep_dir}/$keep_file_name"
echo "saved in $keep_dir/$keep_file_name"
}
}
read -p "Vim it? [y|N]: " edit_vim
[ "${edit_vim}" = 'Y' -o "${edit_vim}" = 'y' ] && vim "${out}"
}
- 自动检测未锁定的设备,如果有多个则列出给用户选择,如果只有一个则直接使用。
- 默人加载 /etc/minicom/minirc.${dev} 的配置文件。
- 自动保存log到/tmp目录,退出时,询问是否要保存到另外的目录。
使用
echo "source $(pwd)/EasierMinicom.sh" >> ~/.bashrc
source ~/.bashrc
com