侧边栏壁纸
Linux入门自学网博主等级

每日学一条Linux命令,终成Linux大神

  • 累计撰写 725 篇文章
  • 累计创建 143 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Linux setserial命令详解:如何设置或显示串口的相关信息(附实例教程和注意事项)

Linux setserial命令介绍

Linux setserial命令是用于设置或显示串口的相关信息的程序。串口是一种用于连接计算机和外部设备的接口,如调制解调器、鼠标、打印机等。串口的信息包括使用的I/O端口和IRQ号,以及是否将break键解释为安全注意键等。setserial命令通常与表示串口的设备文件一起使用,如/dev/ttyS0。

Linux setserial命令适用的Linux版本

setserial命令可以在多数Linux发行版(如Debian、Ubuntu、Alpine、Arch Linux、Kali Linux、RedHat/CentOS、Fedora、Raspbian)的主要终端命令解释器(包括bash、zsh、csh、ksh、fish、tcsh)中使用,可以使用以下命令检查是否已经安装:

[linux@bashcommandnotfound.cn ~]$ setserial -V

如果输出类似于:

setserial version 2.17

则说明已经安装了setserial命令。如果输出类似于:

bash: setserial: command not found

则说明没有安装setserial命令,需要使用相应的包管理工具进行安装。例如,在基于Debian的系统中,可以使用以下命令安装:

[linux@bashcommandnotfound.cn ~]$ sudo apt-get install setserial

在基于Red Hat的系统中,可以使用以下命令安装:

[linux@bashcommandnotfound.cn ~]$ sudo yum install setserial

或者:

[linux@bashcommandnotfound.cn ~]$ sudo dnf install setserial

Linux setserial命令的基本语法

setserial命令的基本语法格式如下:

setserial [选项] 设备 [参数]

其中,设备是指要设置或显示的串口设备文件,如/dev/ttyS0。参数是指要设置或显示的串口信息,如port、irq、baud_base等。选项是指用于控制setserial命令行为的一些开关,如-a、-g、-v等。

Linux setserial命令的常用选项说明

setserial命令的常用选项说明如下:

选项说明
-a显示串口的所有信息,包括UART类型、I/O端口、IRQ号、波特率基数、分频器、关闭延迟、关闭等待、自定义分辨率、自定义速度、自定义波特率、自定义分频器、低延迟、跳过测试、自动配置、自动中断、四线模式、Sak、会话锁定、调制解调器控制、XON/XOFF流控、RTS/CTS流控、DTR/DSR流控等。
-b显示串口的摘要信息,包括UART类型、I/O端口、IRQ号、波特率基数、分频器、关闭延迟、关闭等待、自定义分辨率、自定义速度、自定义波特率、自定义分频器等。
-g将参数解释为要显示信息的串口设备列表,而不是要设置信息的串口设备。
-G以命令行参数的形式显示串口的信息,可以用于保存或恢复串口的配置。
-q安静模式,减少输出的信息量。
-v详细模式,增加输出的信息量。
-V显示setserial命令的版本信息并退出。
-z在设置串口信息之前,将所有的标志位清零。

Linux setserial命令的实例

以下是一些使用setserial命令的实例:

显示串口的默认信息

使用setserial命令不带任何选项和参数,可以显示串口的默认信息,如UART类型、I/O端口、IRQ号、波特率基数等。例如:

[linux@bashcommandnotfound.cn ~]$ setserial /dev/ttyS0
/dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4, Flags: spd_normal skip_test

显示串口的所有信息

使用setserial命令带-a选项,可以显示串口的所有信息,包括一些标志位和流控制等。例如:

[linux@bashcommandnotfound.cn ~]$ setserial -a /dev/ttyS0
/dev/ttyS0, Line 0, UART: 16550A, Port: 0x03f8, IRQ: 4
	Baud_base: 115200, close_delay: 50, divisor: 0
	closing_wait: 3000
	Flags: spd_normal skip_test

显示多个串口的信息

使用setserial命令带-g选项,可以显示多个串口的信息,只需要在命令后面列出要显示的串口设备文件即可。例如:

[linux@bashcommandnotfound.cn ~]$ setserial -g /dev/ttyS[0-3]
/dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4
/dev/ttyS1, UART: unknown, Port: 0x02f8, IRQ: 3
/dev/ttyS2, UART: unknown, Port: 0x03e8, IRQ: 4
/dev/ttyS3, UART: unknown, Port: 0x02e8, IRQ: 3

以命令行参数的形式显示串口的信息

使用setserial命令带-G选项,可以以命令行参数的形式显示串口的信息,这样可以方便地将输出重定向到一个文件中,或者作为输入传递给另一个setserial命令。例如:

[linux@bashcommandnotfound.cn ~]$ setserial -G /dev/ttyS0
/dev/ttyS0 uart 16550A port 0x03f8 irq 4 baud_base 115200 spd_normal skip_test

设置串口的波特率基数

使用setserial命令带baud_base参数,可以设置串口的波特率基数,即串口的最大波特率。例如,要将/dev/ttyS0的波特率基数设置为921600,可以使用以下命令:

[linux@bashcommandnotfound.cn ~]$ sudo setserial /dev/ttyS0 baud_base 921600

注意,这里需要使用sudo命令获取超级用户权限,因为设置串口信息是需要特权的操作。

设置串口的分频器

使用setserial命令带divisor参数,可以设置串口的分频器,即用于计算实际波特率的除数。例如,要将/dev/ttyS0的分频器设置为8,可以使用以下命令:

[linux@bashcommandnotfound.cn ~]$ sudo setserial /dev/ttyS0 divisor 8

注意,这里需要使用sudo命令获取超级用户权限,因为设置串口信息是需要特权的操作。

设置串口的数据位、停止位和奇偶校验

使用setserial命令带csN、-parenb和-cstopb参数,可以设置串口的数据位、停止位和奇偶校验。其中,csN表示数据位,N可以是5、6、7或8;-parenb表示不使用奇偶校验;-cstopb表示使用1个停止位。例如,要将/dev/ttyS0的数据位设置为8,不使用奇偶校验,使用1个停止位,可以使用以下命令:

[linux@bashcommandnotfound.cn ~]$ sudo setserial /dev/ttyS0 cs8 -parenb -cstopb

注意,这里需要使用sudo命令获取超级用户权限,因为设置串口信息是需要特权的操作。

设置串口的流控制

使用setserial命令带softcar、xonxoff、rtscts和dtrdsr参数,可以设置串口的流控制。其中,softcar表示使用软件流控制,即使用XON/XOFF字符来控制数据传输;
xonxoff表示使用XON/XOFF流控制,即使用XON/XOFF字符来控制数据传输;rtscts表示使用RTS/CTS流控制,即使用RTS和CTS信号线来控制数据传输;dtrdsr表示使用DTR/DSR流控制,即使用DTR和DSR信号线来控制数据传输。例如,要将/dev/ttyS0的流控制设置为使用RTS/CTS流控制,可以使用以下命令:

[linux@bashcommandnotfound.cn ~]$ sudo setserial /dev/ttyS0 rtscts

注意,这里需要使用sudo命令获取超级用户权限,因为设置串口信息是需要特权的操作。

设置串口的关闭延迟和关闭等待

使用setserial命令带close_delay和closing_wait参数,可以设置串口的关闭延迟和关闭等待。关闭延迟是指在串口关闭后,内核等待多长时间才释放该串口的资源,单位是0.01秒;关闭等待是指在串口关闭后,内核等待多长时间才允许重新打开该串口,单位是0.1秒。例如,要将/dev/ttyS0的关闭延迟设置为100,关闭等待设置为5000,可以使用以下命令:

[linux@bashcommandnotfound.cn ~]$ sudo setserial /dev/ttyS0 close_delay 100 closing_wait 5000

注意,这里需要使用sudo命令获取超级用户权限,因为设置串口信息是需要特权的操作。

设置串口的低延迟模式

使用setserial命令带low_latency参数,可以设置串口的低延迟模式。低延迟模式是指在串口接收到数据后,内核立即通知应用程序,而不是等待一定的时间。这样可以减少串口的响应时间,但也会增加内核的负担。例如,要将/dev/ttyS0的低延迟模式打开,可以使用以下命令:

[linux@bashcommandnotfound.cn ~]$ sudo setserial /dev/ttyS0 low_latency

注意,这里需要使用sudo命令获取超级用户权限,因为设置串口信息是需要特权的操作。

设置串口的安全注意键

使用setserial命令带sak参数,可以设置串口的安全注意键。安全注意键是指在串口上按下break键时,内核会执行一些安全操作,如终止当前进程、重新登录等。这样可以防止串口被恶意使用或攻击。例如,要将/dev/ttyS0的安全注意键打开,可以使用以下命令:

[linux@bashcommandnotfound.cn ~]$ sudo setserial /dev/ttyS0 sak

注意,这里需要使用sudo命令获取超级用户权限,因为设置串口信息是需要特权的操作。

Linux setserial命令的注意事项

使用setserial命令时,需要注意以下几点:

  • setserial命令只能设置或显示串口的硬件信息,不能设置或显示串口的软件信息,如波特率、数据位、停止位、奇偶校验等。要设置或显示串口的软件信息,需要使用stty命令。
  • setserial命令设置的串口信息是临时的,即在重启系统后,串口信息会恢复为默认值。要永久保存串口信息,需要将setserial命令添加到系统启动脚本中,如/etc/rc.local或/etc/rc.d/rc.local等。
  • setserial命令设置的串口信息可能与内核的自动检测结果不一致,导致串口无法正常工作。要避免这种情况,需要在setserial命令前加上-z选项,将所有的标志位清零,或者在内核启动参数中加上noauto选项,禁止内核自动检测串口。
  • setserial命令需要特权操作,因此需要使用sudo命令获取超级用户权限,或者以root用户身份执行。如果没有足够的权限,setserial命令会报错,如:
[linux@bashcommandnotfound.cn ~]$ setserial /dev/ttyS0 baud_base 921600
setserial: cannot open /dev/ttyS0: Permission denied
  • 如果输入的串口设备文件不存在或不正确,setserial命令会报错,如:
[linux@bashcommandnotfound.cn ~]$ setserial /dev/ttyS4
setserial: can't open device "/dev/ttyS4": No such file or directory
  • 如果输入的串口参数不合法或不支持,setserial命令会报错,如:
[linux@bashcommandnotfound.cn ~]$ setserial /dev/ttyS0 cs9
setserial: invalid argument for cs9
  • 如果输入的setserial命令不完整或不正确,setserial命令会报错,如:
[linux@bashcommandnotfound.cn ~]$ setserial -a
setserial: option requires an argument -- 'a'
Usage: setserial [-abqvVWz] device [parameter1 [arg]] ...
  • 如果输入的串口设备文件没有安装setserial命令,setserial命令会报错,如:
[linux@bashcommandnotfound.cn ~]$ setserial /dev/ttyS0
bash: setserial: command not found

此时,需要使用相应的包管理工具进行安装。

0

评论区