tty(三)uart框架分析

news2025/1/20 3:04:40

基于linux-3.14.16
重点文件:serial_core.c

一、基本数据结构和接口

在这里插入图片描述
这里显然是导出符号给需要用到uart核心的代码使用的,我们从uart_register_driver和uart_add_one_port来分析,搞清楚uart和tty核心的关系。

二、uart_register_driver

首先分配和2个结构体,struct tty_driver和struct uart_state(struct tty_port),并且struct uart_state的个数和注册的struct uart_driver的nr(这个nr是定义的struct uart_port的个数,即最大支持port个数)个数有关。并且将struct uart_driver关联到struct tty_driver。

主要内容,分配一个tty_driver,分配指定数量的uart_state
在这里插入图片描述

上面提到分配完tty_driver后和uart_driver关联,下面对tty_driver初始化,关联uart_driver,
总结tty_driver和uart_driver彼此相互关联的。

然后对每个struct uart_state的struct tty_port做初始化。
最后注册一个struct tty_driver
在这里插入图片描述

关于struct tty_driver,有几个重要的域:
struct tty_operations uart_ops
struct ktermios tty_std_termios(线路规程,后面分析)

在serial_core.c中定义的tty的操作集,将抽象的tty驱动具象化为一个serial驱动,serial_core.c通过对struct tty_driver的注册做一个封装,简化了实现一个串口驱动的工作。

三、uart_add_one_port

在完成uart_driver的注册之后,将会有这样的数据关系
在这里插入图片描述

调用uart_add_one_port注册uart_port,即是把这个port加入到整个tty系统中,具体位置为tty_driver下的uart_driver下的,以line为下标的uart_state数组元素的uart_port指针中保存(即上图最右边的数据关系)。
在这里插入图片描述
对tty_dirver添加属性文件
在这里插入图片描述

总结:uart_add_one_port执行之前,uart_register_driver之后在struct uart_state中已经有tty_port了,可以理解为,执行uart_add_one_port,是uart层对tty_port的扩展,并且创建了属性文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/719088.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

服务案例|消失的Linux定时清除任务

企业数字化转型,应用软件不断升级,对运行环境的要求也越来越高,CPU、内存等硬件也同步进入升级。当业务运行或备份时,将产生大量历史文件和临时文件,这就是在运维检测中,我们常看到文件每天几个G&#xff0…

软中断通信及signal()解读

目录 软中断通信 signal() 概述 signal()类似的函数 signal()之SIGINT signal()之SIGTERM signal()之SIGALRM signal()之SIGQUIT SIG_IGN使用 软中断通信 进程间通信方式有多种,其中软中断通信是一种常见的方式,它基于信号机制,可…

【mysql】索引存储结构B+树

参考: https://zhuanlan.zhihu.com/p/545113372 https://www.bilibili.com/read/cv18157852 Mysql数据库引擎默认使用InnoDB,使用B树数据结构。 一个表只能有一个聚簇索引,但可以有多个非聚簇索引,也就是多个索引目录提供数据检索…

coord软件的一些操作

文章目录 1. 大地坐标(B,L)转换为平面坐标(X,Y)操作流程示例 2. 大地坐标系下的平面坐标转换(X,Y)为大地坐标(B,L)操作示例 3. 6带坐标…

docker专题系列之十六:安装mycat

由于docker镜像仓库中mycat镜像比较少或相对比较旧,因此一般使用手动制作镜像方式安装部署。下文,良哥通过实验,分别介绍两种方式下如何安装部署mycat。 一、手动制作镜像方式 1.创建镜像 #创建工作目录 mkdir /usr/rdc mkdir /usr/rdc/my…

GOLANG进阶:Viper,Mysql,Swagger,Log

GOLANG从浅入深必须学习的一些工具包 1.Viper: Viper 是一个完整的 Go 应用程序配置解决方案,优势就在于开发项目中你不必去操心配置文件的格式而是让你腾出手来专注于项目的开发。其特性如下: 支持 JSON/TOML/YAML/HCL/envfile/Java proper…

【Java-数据结构】指定ArrayList 数组的大小有利于数据扩容和缩短耗时

关键 “因为扩容操作涉及内存申请和数据搬移&#xff0c;是比较耗时的。所以&#xff0c;如果事先能确定需要存储的数据大小&#xff0c;最好在创建 ArrayList 的时候事先指定数据大小。” 如下代码所示&#xff1a; ArrayList<User> users new ArrayList(10000); fo…

LogicFlow 在HTML中的引入与使用

LogicFlow 在HTML中的引入与使用 LogicFlow的引入与使用&#xff0c;相较于BPMNJS相对容易一些&#xff0c;更加灵活一些&#xff0c;但是扩展代码可能写得更多一些。 示例展示 示例代码 github: https://github.com/iotzzh/origin-examples/blob/main/%E6%B5%81%E7%A8%8B%E5%9…

SpringBoot2+Vue2实战(十)权限管理

一、父子菜单实现 新建数据库表 sys_menu sys_role 实体类 Role import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName;import java.io.Serializable;import l…

分析入手新项目后前后端的接口调用位置以及sql情况

文章目录 查看前端查看后端sql分析数据库分析作者的话 查看前端 比如我们的userList的一个功能&#xff0c;我们刷新页面后会发现当前页面有很多请求&#xff0c;我们根据请求header和param来分析&#xff0c;当前的“用户列表”接口是哪个请求&#xff0c; 我们填入一个参数…

C++ PCL三维点云物体目标识别

程序示例精选 C PCL三维点云物体目标识别 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<C PCL三维点云物体目标识别>>编写代码&#xff0c;代码整洁&#xff0c;规则&#xff…

web学习--maven--项目管理工具

写在前面&#xff1a; 这学期搞主攻算法去了&#xff0c;web的知识都快忘了。开始复习学习了。 文章目录 maven介绍功能介绍maven安装jar包搜索仓库 pom文件项目介绍父工程依赖管理属性控制可选依赖构建 依赖管理依赖的传递排除依赖可选依赖 maven生命周期分模块开发模块聚合…

《安全软件开发框架(SSDF) 1.1:降低软件漏洞风险的建议》解读(三)

安全软件开发框架SSDF是由美国国家标准与技术研究院发布的关于安全软件开发的一组实践&#xff0c;帮助开发组织减少发布的软件中的漏洞数量&#xff0c;减少利用未检测到或未解决的漏洞的潜在影响&#xff0c;从根本上解决漏洞防止再次发生。本文根据《Secure Software Develo…

【Nginx05】Nginx学习:HTTP核心模块(二)Server

Nginx学习&#xff1a;HTTP核心模块&#xff08;二&#xff09;Server 第一个重要的子模块就是这个 Server 相关的模块。Server 代表服务的意思&#xff0c;其实就是这个 Nginx 的 HTTP 服务端所能提供的服务。或者更直白点说&#xff0c;就是虚拟主机的配置。通过 Server &…

SpringBoot操作Excel实现导入和导出功能(详细讲解+Gitee源码)

前言&#xff1a;在日常的开发中&#xff0c;避免不了操作Excel&#xff0c;比如从系统当中导出一个报表&#xff0c;或者通过解析客户上传的Excel文件进行批量解析数据入库等等&#xff0c;本篇博客主要汇总日常开发中如何使用开源的Apache提供的POI流操作Excel进行导入导出功…

el-dialog 层级问题混乱

使用 element -UI 的弹窗时&#xff0c;一般来说弹窗的层级应该比较高&#xff0c;背景置灰。 下边这个弹窗是正常情况下的&#xff1a; 有时候出现这样的情况&#xff1a; 解决问题&#xff1a; 只需要 在标签里边添加 append-to-body 属性问题就解决了。

WPF TextBox 添加范围验证

WPF TextBox 添加范围验证 添加范围验证&#xff0c;若出现范围错误添加信息捕捉 使用到技术&#xff1a;使用ValidationRules实现范围验证&#xff0c;当范围出现错误时&#xff0c;可以通过触发器Validation.HasErrorTrue设置自定义错误样式。 使用Behavior技术捕捉所有验证…

1-Nginx介绍及安装(源码安装)

1.Nginx介绍 Nginx&#xff08;engine x&#xff09;是一个轻量级、高性能的HTTP和反向代理服务器&#xff0c;也是一个IMAP/POP3/SMTP服务器。 Nginx特点&#xff1a; ->占用内存少 ->并发能力强(3W/S) 2.Nginx安装 2.1.环境 [rootcentos79-3 ~]# cat /etc/redha…

未来网站开发必备:14个让你惊艳的JavaScript Web API!

微信搜索 【大迁世界】, 我会第一时间和你分享前端行业趋势&#xff0c;学习途径等等。 本文 GitHub https://github.com/qq449245884/xiaozhi 已收录&#xff0c;有一线大厂面试完整考点、资料以及我的系列文章。 快来免费体验ChatGpt plus版本的&#xff0c;我们出的钱 体验地…

进制(数制)及进制之间的转换汇总(超详细)

进制是一种表示数字的方法&#xff0c;它决定了数字在数值系统中的位置和权值。常见的进制包括十进制、二进制、八进制和十六进制。 1. 十进制&#xff08;decimal&#xff09;&#xff1a; 十进制是我们日常生活中最常用的进制&#xff0c;使用0-9这10个数字来表示。每一位的…