参考代码

串口核心层:
drivers/tty/serial/serial_core.cTTY层:
drivers/tty/tty_io.c行规程:
drivers/tty/tty_ldisc.c
drivers/tty/n_tty.c

read 过程

  1. APP 读:
    使用行规程来读
    无数据时休眠

  2. UART 接收到数据,产生硬件中断
    在中断处理函数中,从硬件上读入数据

  3. 发给行规程
    行规程处理后存入buffer
    唤醒APP
    
  4. APP 在行规程中得到数据

源码解析

drivers/tty/tty_io.c

这里的ld ->ops 是 n_tty.c 文件中的tty_ldisc_N_TTY 结构体,详情见: Uart驱动 open流程

drivers/tty/n_tty.c

当UART 硬件上,有数据产生时,触发中断, 读入 数据并且 发送给行规程,行规程得到数据后,唤醒APP

uart_insert_char(port, lsr, UART_LSR_OE, ch, flag); //将数据插入tty_port 的tty_buffer中
tty_flip_buffer_push(&port->state->port); //通知行规程

UART read过程分析相关推荐

  1. 嵌入式linux启动过程分析,嵌入式Linux裸机开发(二)——S5PV210启动过程分析

    嵌入式Linux裸机开发(二)--S5PV210启动过程分析 一.iROM启动方式简介 友善之臂Smart210开发板的SoC为三星S5PV210,S5PV210采用iROM启动方式进行启动,通过查阅 ...

  2. 嵌入式linux s5pv210,嵌入式Linux裸机开发(二)——S5PV210启动过程分析

    嵌入式Linux裸机开发(二)--S5PV210启动过程分析 一.iROM启动方式简介友善之臂Smart210开发板的SoC为三星S5PV210,S5PV210采用iROM启动方式进行启动,通过查阅三 ...

  3. Linux UART驱动分析及测试

    1.Linux TTY驱动程序框架 Linux TTY驱动程序代码位于/drivers/tty下面.TTY的层次接口包括TTY应用层.TTY文件层.TTY线路规程层.TTY驱动层.TTY设备驱动层.T ...

  4. Linux内核中断号映射过程分析(三)

    1.概述 早期的CPU中断数量较少,中断系统简单,Linux内核可以将硬件中断号直接映射为软件中断号.但随着CPU支持的中断数量越来越多,中断系统也被设计的越来越复杂,一个CPU内部可能包含多个中断控 ...

  5. HarmonyOS镜像,HarmonyOS驱动加载过程分析

    HDF(硬件驱动程序基础)驱动程序框架为驱动器开发人员提供驱动程序框架功能,包括驱动器加载,驱动服务管理和驱动程序消息传递机制.它旨在构建一个统一的驱动器架构平台,为驾驶开发人员提供更准确,更高效的开 ...

  6. 【LM401】USART串口配置过程 uart.c 代码解析

    [LM401]USART串口配置过程 1. 板载资源说明 2.uart.c 串口配置文件修改 2.1接口文件 uart_if.c 2.2整体配置流程 2.2.1初始化串口,分配DMA 2.2.2配置串 ...

  7. UART驱动情景分析-read

    一.源码框架回顾 shell读数据,一开始的时候没有就休眠.数据从串口发送到驱动,驱动接收到中断,驱动读取串口数据,这个数据会传给行规程. 行规程获取到数据后,会回显.按下删除就删除一个字符,按下回车 ...

  8. UART驱动情景分析-write

    一.write过程分析 App写: 使用行规程来写 数据最终存入uart_state->xmit的buffer里 硬件发送: 使用硬件驱动中uart_ops->start_tx开始发送 具 ...

  9. Android窗口管理服务WindowManagerService计算窗口Z轴位置的过程分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8570428 通过前面几篇文章的学习,我们知道了 ...

  10. Android窗口管理服务WindowManagerService计算Activity窗口大小的过程分析

    在Android系统中,Activity窗口的大小是由WindowManagerService服务来计算的.WindowManagerService服务会根据屏幕及其装饰区的大小来决定Activity ...

最新文章

  1. 高校分配男朋友?当专业第一遇到了专业第一......
  2. g++ 编译pybind
  3. Sublime Text 快捷键
  4. 私有属性和方法-伪私有属性和方法
  5. Unity 2017 Game Optimization 读书笔记 Scripting Strategies Part 5
  6. Stream流方法引用
  7. MS SQL入门基础:sql 其它命令
  8. 一段程序结束等待进行下一段程序_c++实战篇(十二),debug调试程序
  9. FireFox nsSessionStore.js 问题报错解决
  10. display:none的进一步理解
  11. oracle比较日期大小函数输出,oracle 日期比较及惯用函数
  12. html页面分页显示问题,HTML分页,显示分页页面内容
  13. 01. Couchbase简介-CouchBase从0到50
  14. 圆桌:满足客人空座需求,准备最少的椅子,合理安排客人入座圆桌
  15. 用JS写一个《俄罗斯方块》小游戏
  16. 数据分区与放置策略解析_数据策略好数据与坏数据
  17. 路由器配置和静态路由
  18. 深度学习-根据日志画loss-acc折线图
  19. 拓展编辑器(八)_重写菜单
  20. OCM实战之RAC集群打补丁

热门文章

  1. C# string 保留数字英文字母
  2. 京东淘宝等电脑网页打不开的解决办法
  3. 实验二 帧中继的基本配置
  4. 身高测量c语言编程,测身高的C语言程序.doc
  5. 黑群晖二合一安装不了套件_家庭NAS部署指南(二)——如何自己动手安装一台黑群晖主机...
  6. 当自己觉得特别迷茫的时候,是怎么走出这个困境的
  7. 环丙沙星大鼠血清白蛋白纳米粒|甲硝唑小麦麦清白蛋白纳米粒|雷替曲塞乳清白蛋白纳米粒(科研级)
  8. 基本矩阵F和本质矩阵E的详细推导
  9. 2020力扣杯团体赛
  10. 第十二周助教心得体会