tty(三)uart框架分析

文章详细介绍了Linux内核3.14.16版本中serial_core.c文件的重点内容,包括uart驱动的基本数据结构、接口以及注册过程。uart_register_driver函数负责分配和初始化tty_driver和uart_state结构体,并将uart_driver与tty_driver关联。uart_add_one_port函数则将uart_port添加到tty系统中,创建属性文件并完善数据关系。文章探讨了uart层如何扩展tty_port,并阐述了两者之间的交互关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基于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的扩展,并且创建了属性文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值