基于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的扩展,并且创建了属性文件。
文章详细介绍了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,并阐述了两者之间的交互关系。
488

被折叠的 条评论
为什么被折叠?



