没有合适的资源?快使用搜索试试~ 我知道了~
首页linux tty驱动源码分析
linux tty驱动源码分析
需积分: 49 17 下载量 190 浏览量
更新于2023-06-01
评论
收藏 431KB PDF 举报
对linux tty驱动源码进行简要分析,明确tty工作流程,及tty线路规程作用。
资源详情
资源评论
资源推荐
全双工,半双工简单定义:
半双工:使用同一根线传输,既可发送又可以接收数据,但不能同时发送和接收。
全双工:分别由两根同时发送和接收传送,双方都可以在同一时刻进行发送和接收。
所以说串口是否支持全双工也要看具体硬件设计,是按全双工设计,还是半双工设计。不能
单单只问软件有没有这方面功能。
RS232
RS232 使用 12V,0,-12V 电压来表示逻辑,(-12V 表示逻辑 1,12V 表示逻辑 0),全双工,最
少 3 条通信线(RX,TX,GND),因为使用绝对电压表示逻辑,由于干扰,导线电阻等原因,通
讯距离不远,低速时几十米也是可以的。
RS422
RS422,在 RS232 后推出,使用 TLL 差动电平表示逻辑,就是两根的电压差表示逻辑,RS422
定义为全双工的,所以最少要 4 根通信线(一般要还要多拉一根地线),一个驱动器可以驱
动(最多)10 个接收器,通讯距离与通讯速率有关系,一般距离短时可以使用高速率进行
通信,速率低时可以进行较远距离通信,一般可达数百上千米。
RS485
RS485,在 RS422 后推出,绝大部分继承了 422,主要的差别是 RS485 可以是半双工的,而
且一个驱动器的驱动能力至少可以驱动 32 个接收器,当使用阻抗更高的接收器时可以驱动
更多的接收器。所以现在大多数全双工 485 驱动/接收器对都是标:RS422/485 的,因为全
双工 RS485 的驱动/接收器对一定可以用在 RS422 网络,全双工 rs485 与 rs422 基本没区别。
RS232: 相比于 RS485 几点不足
1. 接口的信号电平值较高,易损坏接口电路的芯片,又因为与 TTL 电平不兼容故需使用电
平转换电路方能与 TTL 电路连接。
2. 传输速率较低,在异步传输时,波特率为 20Kbps
3. 传输距离有限,实际上也只能用在 15 米左右
Linux tty 设备驱动简要分析
(一) TTY 层次结构划分图
TTY core
TTY ldisc
TTY device driver
APP layer
Usr space
kernel
图一
(二) tty_core 层主要的结构体和函数
所有 tty 类型的驱动的顶层构架,向应用曾提供了统一的接口,应用层的 read/write 等调用
首先会到达这里。此层由内核实现,代码主要分布在 drivers/char 目录下的 n_tty.c,tty_io.c
等文件中。tty_driver 表示一个具体的 tty 设备的驱动程序,而 tty_struct 表示 tty 设备。
static const struct file_operations tty_fops = {
.llseek = no_llseek,
.read = tty_read,
.write = tty_write,
.poll = tty_poll,
.unlocked_ioctl = tty_ioctl,
.compat_ioctl = tty_compat_ioctl,
.open = tty_open,
.release = tty_release,
.fasync = tty_fasync,
};
struct tty_struct {
int magic;
struct kref kref;
struct tty_driver *driver; /*TTY 驱动*/
const struct tty_operations *ops; /*TTY 操作方法函数集合为应用层
调用提供基本操作接口*/
int index;
/* Protects ldisc changes: Lock tty not pty */
struct mutex ldisc_mutex;
struct tty_ldisc *ldisc; /*TTY 线路规程与 TTY 核心层主要连接接
口
原型 struct tty_ldisc {
struct tty_ldisc_ops *ops;
atomic_t users;
}; */
struct mutex termios_mutex;
spinlock_t ctrl_lock;
/* Termios values are protected by the termios mutex */
struct ktermios *termios, *termios_locked;
struct termiox *termiox; /* May be NULL for unsupported */
char name[64];
struct pid *pgrp; /* Protected by ctrl lock */
struct pid *session;
unsigned long flags;
int count;
struct winsize winsize; /* termios mutex */
unsigned char stopped:1, hw_stopped:1, flow_stopped:1, packet:1;
unsigned char low_latency:1, warned:1;
unsigned char ctrl_status; /* ctrl_lock */
unsigned int receive_room; /* Bytes free for queue */
struct tty_struct *link;
struct fasync_struct *fasync;
struct tty_bufhead buf; /* Locked internally */
int alt_speed; /* For magic substitution of 38400 bps */
wait_queue_head_t write_wait;
wait_queue_head_t read_wait;
struct work_struct hangup_work;
void *disc_data;
void *driver_data;
struct list_head tty_files;
char *read_buf;/*存放驱动上传数据的 buf 首地址*/
int read_cnt;/*read_buf 中当前存放的数据字节数,在 n_tty_receive_buf 函数接收
时增加,在 copy_from_read_buf 函数中读走后减小*/
unsigned char *write_buf;/*write buf 在写的过程中分配与释放*/
int write_cnt;
........................................
剩余13页未读,继续阅读
其实不想懂
- 粉丝: 1
- 资源: 13
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- RTL8188FU-Linux-v5.7.4.2-36687.20200602.tar(20765).gz
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
- SPC统计方法基础知识.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0