tty(三)uart框架分析

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

一、基本数据结构和接口

tty(三)uart框架分析_第1张图片
这里显然是导出符号给需要用到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(三)uart框架分析_第2张图片

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

然后对每个struct uart_state的struct tty_port做初始化。
最后注册一个struct tty_driver
tty(三)uart框架分析_第3张图片

关于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的注册之后,将会有这样的数据关系
tty(三)uart框架分析_第4张图片

调用uart_add_one_port注册uart_port,即是把这个port加入到整个tty系统中,具体位置为tty_driver下的uart_driver下的,以line为下标的uart_state数组元素的uart_port指针中保存(即上图最右边的数据关系)。
tty(三)uart框架分析_第5张图片
对tty_dirver添加属性文件
tty(三)uart框架分析_第6张图片

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

你可能感兴趣的:(Linux内核和驱动,linux)