转自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=26807463&id=4186851

Linux 串口、usb转串口驱动分析1

内核版本:2.6.35.6                                                                        荣鹏140319

声明:图和个别段落(我做了小的修改)是直接从网上截取

目标:主要是想对Linux 串口、usb转串口驱动框架有一个整体的把控,因此会忽略某些细节,同时里面涉及到的一些驱动基础,比如字符设备驱动、平台驱动等也不进行详细说明原理。如果有任何错误地方,请指出,谢谢!

一、整体概述

linux下的串口或者usb转串口驱动都是依赖linux内核提供的tty核心、tty线路规划和tty驱动,所以牵涉到很多层次,之所以有这么多层次,肯定是有它们存在意义的。

举例来说,像串口或者usb转串口的驱动,最终可以确定的是以字符设备驱动提供给上层使用,于是tty核心层就对这部分通用的实现进行了封装,但这不是最重要的,最重要的是tty核心层里同时实现了一种数据格式化机制,这就是tty线路规划,这样的好处是可以分别针对不同类设备的线路规划,比如针对终端io的,比如针对网络的ppp还有slip还有蓝牙还有IrDA等,这些的实现不需要考虑底层硬件,也就是说这些串口到具体协议的转换的实现与硬件相分离了,这就是tty核心及tty线路规划存在的目地。

那为什么会有tty驱动层呢? 也许你觉得我们的串口驱动可以直接通过tty核心提供的功能就可以实现了。 这个确实是可以,但是linux内核因为要兼容世界上存在的各种串口设备,所以针对串口额外实现了一个serial核心层,针对usb转串口额外实现了usb-serial核心层,它们就是所谓的tty驱动层。我们的串口或者usb转串口实现就是与tty驱动层打交道,当然串口芯片或者usb转串口芯片有很多种,所以不同的芯片都要有对应的驱动,但是它们都是基于tty驱动层实现,这个是可以肯定的。

所以,我们要写串口驱动,最好还是对这些层次有些了解。

整体框架图如下:
   

这图是直接摘抄网上的。其实,我认为在tty驱动层下还应该有个具体的驱动,比如如果是8250串口控制器芯片,那么应该有个8250的驱动,然后才是硬件。

更准确的图我认为如下图所示:

更详细的如下图所示:

下面摘抄网上的

(1)、tty线程规程

以特殊的方式格式化从一个用户或者硬件收到的数据,这种格式化常常采用一个协议转换的形式,如虚拟终端、PPP、Bluetooth、Ir等。

(2)、tty设备发送数据流程

tty核心从一个用户获取将要发送给一个tty设备的数据,tty核心将数据传递给tty线路规程驱动,接着数据被传递到tty驱动,tty驱动将数据转换为可以发送的硬件格式。

(3)、tty设备接收数据流程

从tty硬件接收到的数据向上交给tty驱动,进入tty线路规程驱动,再进入tty核心,在此被用户获取。尽管tty核心与tty之间的数据传输会经历tty线路规程的转换,但是tty驱动与tty核心之间也可以直接传输数据。

再摘抄2张网上的图:

tty设备的数据流通图:

Linux 串口、usb转串口驱动分析(2-1) 【转】相关推荐

  1. linux下usb转串口驱动分析

    linux下usb转串口驱动分析 分类: linux driver 2012-06-08 15:11 456人阅读 评论(0) 收藏 举报 linux struct interface returni ...

  2. USB转串口驱动分析(一)

    之前追踪代码用的grep命令效率太低了,所以这次下载C代码阅读跳转利器ctags.cscope用于分析代码 因为用的是Centos6.7所以需要用到yum install安装软件 [wuyujun@w ...

  3. USB转串口驱动分析(二)

    在static int __init usb_serial_init(void)里 tty_set_operations(usb_serial_tty_driver, &serial_ops) ...

  4. linux 下串口转usb不能发送数据包,Linux ,USB转串口驱动,没法读到数据

    Linux ,USB转串口驱动,无法读到数据 usb 1-1.1: new full-speed USB device number 5 using ehci-pci usb 1-1.1: New U ...

  5. Linux环境下使用 USB转串口驱动(二)

    minicom是linux下串口通信的软件,它的使用完全依靠键盘的操作,虽然没有"超级终端"那么易用,但是使用习惯之后读者将会体会到它的高效与便利,下面将讲解minicom的安装和 ...

  6. Linux Ubuntu18.04系统 USB转串口驱动安装,查看串口号

    When you plugin your USB-UART converter, and run "> ls /dev/tty*", if you don't see the ...

  7. linux装pl2303驱动下载,Linux下安装USB转串口驱动(PL2303)

    主机:Gentoo Linux 11.2 内核版本:Linux 3.0.6 以前在Ubuntu下USB转串口驱动已经编译进内核,而编译的Gentoo内核没有编译进去,这里将内核中PL2303驱动 co ...

  8. Linux下安装USB转串口驱动(PL2303)

    分类: 嵌入式ARM+Linux 2012-01-11 22:26  2077人阅读  评论(0)  收藏  举报 主机:Gentoo Linux 11.2 内核版本:Linux 3.0.6 原创作品 ...

  9. 银河麒麟 安装PL2303GC USB转串口驱动

    银河麒麟系统,外接一个设备,连接线是USB转串口线,型号是PL2303,直接接到电脑上,系统没有自动加载这个设备,理论上来说应该识别为/dev/ttyUSB0. 进入USB转串口驱动的目录查看: /u ...

  10. CH341SER CH340SER USB转串口驱动

    CH341SER CH340SER USB转串口驱动适用于同型号的设备,这个USB转串口设备我们可能用不到,但是对于专业的开发者来说可能会用到,将设备与电脑连接后安装一下小编提供的USB转串口驱动程序 ...

最新文章

  1. php内容采集系统,第一步、采集规则
  2. java语言提供结构_java学习之语句结构
  3. Linux 第71天 mariadb backup and recovery
  4. synchronized(this)用法
  5. python 的类装饰器
  6. 佳能EOS R5逼出性能怪兽索尼A1,2021佳能如何接招?
  7. 拓端tecdat|R语言用逻辑回归、决策树和随机森林对信贷数据集进行分类预测
  8. Ac.wing 149. 荷马史诗
  9. 2014中秋节,用java为QQ游戏美女找茬写辅助
  10. mysql插入特殊汉字、字符报错
  11. Unity 3D委托entrust
  12. nginx的配置优化及经常使用的超时配置说明
  13. 联盟 (Alliances)
  14. 【Xgen UE】将Xgen制作好的毛发导入UE
  15. PHP单例模式 构造方法
  16. Metricbeat入门案例
  17. 西南知识产权大数据中心落地成都
  18. 计算机图形学复习(自用)
  19. 计算属性,方法与监听器(3-4)
  20. 如何用matlab消除谐波,哈工大 matlab电机学仿真实验消除谐波

热门文章

  1. 【ubuntu操作系统】ubuntu系统下第一个C语言程序
  2. python3及wxpythonGUI多线程防假死与线程消息传递消息(最新)
  3. C#中对txt文件的读写操作
  4. scikit-learn 算法的通用形式
  5. plt.plot绘图
  6. VirtuoZo数字摄影测量(三)——影像匹配、DEM生成和正射影像拼接
  7. ArcGIS 计算挖填方区域和挖填方量
  8. 基于遥感图像的船舶目标识别技术
  9. linux下的用户的管理(创建用户,删除用户)
  10. C/C++二维数组的传参方法总结