zoukankan      html  css  js  c++  java
  • Linux基础(16)终端与串口编程

    Linux终端编程概念

      每天使用Linux每天都要接触到Bash,使用Bash时似乎永远都让人摸不着头脑的概念就是终端,坐在这台运行着Linux的机器的显示器前面,这个显示器就是终端的输出,而插在机器上的USB键盘或者PS/2键盘就是终端的输入,看来这是一种最直白意义上关于终端的解释。

      但是有的时候,机器上并没有看到显示器或者键盘接口,但是却有一个串口,想操作这台机器想必只能通过这个串口来进行了,这个时候,串口另一端的那台电脑的显示器键盘也叫做终端。除了上述两种意义的终端之外,我们使用的类似SecureCRT这种软件上运行的SSH,Telnet等也算是一种终端程序,只是说它是通过TCP/IP网络而不是通过串口与主机连接的。

      现在可以给终端下一个非严格意义上的定义了,什么是终端?终端就是处理计算机主机输入输出的一套设备,它用来显示主机运算的输出,并且接受主机要求的输入,典型的终端包括显示器键盘套件,打印机打字机套件等。但想要彻底理解终端的概念,还是要从计算机发展历史的角度去寻根溯源

       转自:  https://blog.csdn.net/yazhouren/article/details/78793367


    Linux /dev/里有相应的设备文件接口,用户通过这些接口往底层读写数据,从而进行设备间的相互通信(类似FIFO) , 终端是一种字符型设备,它有多种类型,通常使用tty来简称各种类型的终端设备。

    终端(Terminal):对应着 Linux 上的 /dev/tty 设备,Linux 的多用户登陆就是通过不同的 /dev/tty 设备完成的。

    在Linux系统的设备特殊文件目录/dev/下,终端特殊设备文件一般有以下几种:

    1、串行端口终端( /dev/ttyS[n])(物理串口)

      串行端口终端(Serial Port Terminal)是使用计算机串行端口连接的终端设备。计算机把每个串行端口都看作是一个字符设备。

      有段时间这些串行端口设备通常被称为终端设备,因为那时它的最大用途就是用来连接终端。

      这些串行端口所对应的设备名称是/dev/tts/0(或/dev/ttyS0), /dev/tts/1(或/dev/ttyS1)等,设备号分别是(4,0), (4,1)等,分别对应于DOS系统下的COM1、COM2等。

    若要向一个端口发送数据,可以在命令行上把标准输出重定向到这些特殊文件名上即可!!!!

      例如,在命令行提示符下键入:echo test > /dev/ttyS1会把单词”test”发送到连接在ttyS1(COM2)端口的设备上。可接串口来实验。

    2、伪终端/虚拟终端( /dev/pty)

      SSH等就是虚拟终端, open( /dev/ptmx)就可以创建一个虚拟终端SSH也有此操作

      pts/ptmx(pts/ptmx结合使用,进而实现pty):

          pts(pseudo-terminal slave)是pty的实现方法,与ptmx(pseudo-terminal master)配合使用实现pty。

      伪终端(Pseudo Terminal)是成对的逻辑终端设备(即master和slave设备, 对master的操作会反映到slave上)。

      例如/dev/ptyp3和/dev/ttyp3(或者在设备文件系统中分别是/dev/pty/m3和/dev/pty/s3),它们与实际物理设备并不直接相关!!!!!

    3、控制终端( /dev/tty)

      如果当前进程有控制终端(Controlling Terminal)的话,那么/dev/tty就是当前进程的控制终端的设备特殊文件。可以使用命令”ps -ax”来查看进程与哪个控制终端相连。本机的命令行窗口就是tty

    4、控制台终端( /dev/ttyn,  /dev/console)

      在Linux 系统中,计算机显示器通常被称为控制台终端 (Console)

    转自:  https://www.php.cn/linux-438264.html

    在Linux里查看终端的类型 : sudo cat /proc/tty/drivers 


    串口编程

    串口编程其实就是通过系统提供给应用层的接口(例如 /dev/ttyS)传输数据,经过VFS(虚拟文件系统)传输给串口驱动处理数据

     dev/这些设备文件类似于管道, 往A端写B端读 ,Linux一切皆文件,而所有文件都可以用write和read进行读写操作

    嵌入式也是串口编程的一种, 而他们都绕不开ioctl(), ioctl是设备驱动程序中对设备的I/O通道进行管理的函数。所谓对I/O通道进行管理,就是对设备的一些特性进行控制,例如串口的传输波特率、马达的转速等等。

  • 相关阅读:
    第三方驱动备份与还原
    Greenplum 解决 gpstop -u 指令报错
    yum安装(卸载)本地rpm包的方法(卸载本地安装的greenplum 5.19.rpm)
    Java JUC(java.util.concurrent工具包)
    netty 详解(八)基于 Netty 模拟实现 RPC
    netty 详解(七)netty 自定义协议解决 TCP 粘包和拆包
    netty 详解(六)netty 自定义编码解码器
    netty 详解(五)netty 使用 protobuf 序列化
    netty 详解(四)netty 开发 WebSocket 长连接程序
    netty 详解(三)netty 心跳检测机制案例
  • 原文地址:https://www.cnblogs.com/yxnrh/p/12673901.html
Copyright © 2011-2022 走看看