Linux串口和web serial API的基本操作

1,035 阅读3分钟

一、基础知识点

  • Linux中万物皆文件,串口设备在/dev目录下,Linux中的/dev文件目录的全称是device,这个目录包含了所有linux中使用的外部设备,但是不包含外部设备的驱动信息。
  • 串口以/dev/ttyS*的格式显示;
  • USB转串口适配,没有额外驱动,它们会显示为/dev/ttyUSB*,如/dev/ttyUSB0
  • /dev目录文件说明:
    • /dev/hd[a-t]——>IDE设备
    • /dev/sd[a-z]——>SCSI设备
    • /dev/fd[0-7]——>标准软驱
    • /dev/md[0-31]——>软raid设备
    • /dev/loop[0-7]——>本地回环设备
    • /dev/ram[0-15]——>内存
    • /dev/null——>无限数据接收设备,相当于黑洞
    • /dev/zero——>无限零资源
    • /dev/tty[0-63]——>虚拟终端 /dev/ttyUSB*是U转串
    • /dev/ttyS[0-3]——>串口
    • /dev/lp[0-3]——>并口
    • /dev/console——>控制台
    • /dev/fb[0-31]——>framebuffer
    • /dev/cdrom => /dev/hdc
    • /dev/modem => /dev/ttyS[0-9]
    • /dev/pilot => /dev/ttyS[0-9]
    • /dev/random——>随机数设备
    • /dev/urandom——>随机数设备

二、串口命令

1、查看串口名称使用:ls -l /dev/ttyS*,直接用ls或ll也可以。
2、查看串口驱动:cat /proc/tty/drivers/serial
3、查看串口设备:dmesg | grep ttyS*
4、发送:echo “hello” > /dev/tty*
5、读取:cat /dev/tty*
6、读取并保存文件中:cat /dev/ttyUSB0 > file.txt
7、stty命令:修改终端命令行的相关设置。

  • stty 命令说明及使用讲解
  • 显示某个串口参数信息:stty -F /dev/ttyS7 -a
  • 设置某个串口参数信息:stty -F /dev/ttyS7 speed 115200 cs7 -parenb -cstopb  -echo(7位数据位,无校验,1位停止位,无回显)
  • 设置串口参数:stty -F /dev/ttyS0 ispeed 115200 ospeed 115200 cs8
  • stty命令的几项主要选项功能为:
    • 选项parenb使终端进行奇偶校验,-parenb则是禁止校验;
    • 选项cs5、cs6、cs7和cs8分别将字符大小设为5、6、7和8比特;
    • 选项300、600、1200、2400、4800、9600和19200设置波特率;
    • cstopb-cstopb分别设置两个或一个停止位;
    • tabs使系统使用制表符而不是空格序列,因此减少了输出量,选项-tabs仅使用空格,当终端不能正确处理制表符(tab)时应使用该项。

三、权限问题

  • 在Linux中,对于非root用户,默认没有串口设备的读写权限。
  • ls -l /dev/ttyS*可以看到owner 是 root,所属用户组为 dialout
  • 当前用户加入dialout组:sudo usermod -aG dialout $USER
  • 查看是否已添加成功:grep 'dialout' /etc/group

四、虚拟串口

1、安装socat:sudo apt-get install socat
2、两种方式生成虚拟串口:

  • 2.1-直接生成: socat -d -d pty,b115200 pty,b115200
free600@linux-dell-5820T:~$ socat -d -d pty,b115200 pty,b115200
2022/04/18 22:11:23 socat[27763] N PTY is /dev/pts/3
2022/04/18 22:11:23 socat[27763] N PTY is /dev/pts/4
2022/04/18 22:11:23 socat[27763] N starting data transfer loop with FDs [5,5] and [7,7]
  • 2.2-连接到现有串口:socat PTY,link=/dev/ttyS10 PTY,link=/dev/ttyS11
  • 2.3-获取临时权限:sudo chmod 777 /dev/ttyS10

3、使用echo和cat进行测试,要注意权限问题。