转自http://biancheng.dnbcw.info/linux/336240.html

Linux OS的设备驱动有相当经典的抽象思想以及分层思想。与通信世界里面的思想相一致。

一、在Linux os中,一个设备驱动文件是对一个实际设备的抽象,不管这个设备是电脑的外设,还是某段虚拟内存读写设备。在Linux中,打开一个设备驱动文件意味着打开了这个设备。

在TTY设备当中亦是如此(在理解线路规程这一个内容是,我没有把握这个原则)。以下我把LDD3中的内容摘之其中(粗体表示):

tty 驱动从未看见 tty 线路规程. 这个驱动不能直接和线路规程通讯, 它甚至也不知道它存在. 驱动的工作是以硬件能够理解的方式格式化发送给它的数据, 并且从硬件接收数据. tty 线路规程的工作是以特殊的方式格式化从一个用户或者硬件收到的数据. 这种格式化常常采用一个协议转换的形式, 例如 PPP 和 Bluetooth.

我想再重复2点:

  • 1、驱动的作用是接受硬件数据活着发送硬件能够理解的数据至硬件设备(如8N1),并且承担了配置硬件寄存器的任务。
  • 2、线路规程用于格式化在驱动层以上的数据。格式化的作用是让整个设备具有额外的功能。如PPP作为线路规程的时候,将具有鉴权、压缩等功能。当然这里说明一点最最总要的一点:我说上面一句话的时候,所处在的模型是PC通过串口接入网络。因为PPP在OSI模型中作为链路层协议的时候,物理层可以用RS232。一般的串口通信(包括AT命令的发送,单片机裸程序)都不需要PPP协议控制,貌似需要的是Z-MODE等类似流控制(我用过)。

二、关于PPP。

今天在实验室高人的指点下,理解了PPP在Linux下的工作原理。

PPP协议具有鉴权、压缩、纠错等功能。但是这些都是PPP的扩展功能,基本的PPP功能只有纠错、成帧等相当简单的功能。Linux在用户空间创建了守护进程PPPD用于扩展PPP协议当中的压缩、鉴权等扩展功能,而内核模块当中的设备驱动文件/dev/ppp实现了PPP协议中的最基本功能。依然PPP协议处于数据链路层。可以这么说Socket用于收集用户空间的数据加工层TCP/IP数据发给链路层PPP协议发送,而用那总物理层设备,都可以。

[uart]理解线路规程的作用的更多相关文章

  1. [tty与uart]理解线路规程的作用

    转自:http://biancheng.dnbcw.info/linux/336240.html Linux OS的设备驱动有相当经典的抽象思想以及分层思想.与通信世界里面的思想相一致. 一.在Lin ...

  2. Android(Linux)线路规程的使用

        一般来说,车载导航主机都需要外接若干个UART的外设,如支持HFP的蓝牙模块.与原车通信的CAN解码盒模块.u-blox的GPS模块和DVD机芯等.早年使用Telechips TCC8902+ ...

  3. Java并发编程学习笔记 深入理解volatile关键字的作用

    引言:以前只是看过介绍volatile的文章,对其的理解也只是停留在理论的层面上,由于最近在项目当中用到了关于并发方面的技术,所以下定决心深入研究一下java并发方面的知识.网上关于volatile的 ...

  4. 理解Object.defineProperty的作用

    对象是由多个名/值对组成的无序的集合.对象中每个属性对应任意类型的值.定义对象可以使用构造函数或字面量的形式: var obj = new Object; //obj = {} obj.name = ...

  5. Spring理解IOC,DI,AOP作用,概念,理解。

    IOC控制反转:创建实例对象的控制权从代码转换到Spring容器.实际就是在xml中配置.配置对象 实例化对象时,进行强转为自定义类型.默认返回类型是Object强类型. ApplicationCon ...

  6. [转] 理解Object.defineProperty的作用

    对象是由多个名/值对组成的无序的集合.对象中每个属性对应任意类型的值.定义对象可以使用构造函数或字面量的形式: var obj = new Object; //obj = {} obj.name = ...

  7. 《转》理解Object.defineProperty的作用

    对象是由多个名/值对组成的无序的集合.对象中每个属性对应任意类型的值.定义对象可以使用构造函数或字面量的形式: var obj = new Object; //obj = {} obj.name = ...

  8. C#进阶——从应用上理解异步编程的作用(async / await)

    欢迎来到学习摆脱又加深内卷篇 下面是学习异步编程的应用 1.首先,我们建一个winfrom的项目,界面如下: 2.然后先写一个耗时函数: /// <summary> /// 耗时工作 // ...

  9. 简单理解Hash算法的作用

    什么是Hash Hash算法,简称散列算法,也成哈希算法(英译),是将一个大文件映射成一个小串字符.与指纹一样,就是以较短的信息来保证文件的唯一性的标志,这种标志与文件的每一个字节都相关,而且难以找到 ...

随机推荐

  1. iOS 直播推流 - 搭建基于RTMP的本地Nginx服务器

    前端时间,公司要调研直播相关的内容,特地花时间进行了一番调研. 本篇将记录其中的推流篇-本地推理播放测试. 关于Nginx: 配置Nginx以支持HLS.RTMP的推流与拉流,iOS系统使用LFLiv ...

  2. SpringBoot定时器

    使用Component注解注解一个类,这个类就变成了一个组件.组件可以有很多不同的特性,比如Scheduled注解为组件的某个函数添加了定时的特性. @Component public class M ...

  3. JavaScript 设计模式之简介

    一.设计模式概念解读 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.无数实战代码设计经验的总结.使用设计模式是为了让系统代码可重用.可扩展.可解耦.更容易被人 ...

  4. JavaScript 中定义变量时有无var声明的区别

    关于JavaScript中定义变量时有无var声明的区别 var a=5; //正确 a=5; //正确 在javascript中,以上两种方法都是定义变量的正确方法.微软的Script56.CHM中 ...

  5. 【LeetCode】132. Palindrome Partitioning II

    Palindrome Partitioning II  Given a string s, partition s such that every substring of the partition ...

  6. python练习笔记——分解质因数

    分解质因数:输入一个正整数,分解质因数:如输入: 90   则打印: 90 = 2 * 3 * 3 * 5 get_str = input("请输入一个100以内的正整数,以分解质因数:&q ...

  7. 《java设计模式》之责任链模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述责任链(Chain of Responsibility)模式的: 责任链模式是一种对象的行为模式.在责任链模式里,很多对象由每一个对象对其 ...

  8. Android: ListView数据的分批加载 以及 Handle 总结

    这是效果图: activity_main.xml 01 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/ ...

  9. Effective C++:条款33:避免遮掩继承而来的名称

    (一) 以下这段代码: int x; void someFunc() { double x; //local variable std::cin>>x; //read a new valu ...

  10. python 异步编程

    Python 3.5 协程究竟是个啥 Yushneng · Mar 10th, 2016 原文链接 : How the heck does async/await work in Python 3.5 ...