tty概念解析

在Linux系统中,终端是一类字符型设备,它包括多种类型,通常使用tty来简称各种类型的终端设备。

1.串口终端(/dev/ttyS*)

串口终端是使用计算机串口连接的终端设备。Linux把每个串口端口都看作是一个字符设备。这些串口设备所对应的设备名称是/dev/ttySAC0,/dev/ttySAC1...

2.控制台终端(/dev/console)

在Linux系统中,计算机的输出设备通常被称为控制台终端(console),这里特指printk信息输出到的设备。/dev/console是一个虚拟的设备,它需要映射到真正的tty上,比如通过内核启动参数”consle=ttySAC0”就是把console映射到了串口0。

3.虚拟终端(/dev/tty*)

当用户登录时,使用的是虚拟终端。使用ctrl+atl+[F1-F6]组合键,我们就可以切换到tty1,tty1,tty3等上面去。tty1-tty6等称为虚拟终端,而tty0则是当前所使用的虚拟终端的一个别名。

4.三种终端的关联

内核使用printk函数把信息输出到控制台终端上,控制台终端通过关联串口终端把信息输出到实际的硬件上。应用程序把信息输出到虚拟终端上,虚拟终端通过关联串口终端把信息输出到实际的硬件上。

tty架构分析

Linux tty子系统包含:tty核心,tty线路规程和tty驱动。tty核心是对整个tty设备的抽象,对用户提供统一的接口;tty线路规程是对传输数据的格式化;tty驱动则是面向tty设备的硬件驱动。

回溯串口发送流程

回溯是指在最底层逐步返回到最高调用。回溯是在对应的函数中添加dump_stack(),那么在执行该语句时就会把整个函数的调用关系回溯出来。

//tty驱动

[<c018308c>] (s3c24xx_serial_start_tx+0x0/0x64) from [<c017f2ac>] (uart_start+0x68/0x6c)

r5:c3907c02 r4:a0000013

//tty线路规程

[<c017f244>] (uart_start+0x0/0x6c) from [<c017f504>] (uart_flush_chars+0x10/0x14)

r5:c3907c02 r4:00000002

[<c017f4f4>] (uart_flush_chars+0x0/0x14) from [<c016bde8>] (n_tty_write+0x230/0x448)

[<c016bbb8>] (n_tty_write+0x0/0x448) from [<c01693e0>] (tty_write+0x14c/0x244)

//tty核心

[<c0169294>] (tty_write+0x0/0x244) from [<c0169560>] (redirected_tty_write+0x88/0x98)

[<c01694d8>] (redirected_tty_write+0x0/0x98) from [<c009e044>] (vfs_write+0xb4/0xe8)

r9:c39c2000 r8:c00310c8 r7:00000004 r6:c39c3f78 r5:40000000

r4:c3939200

[国嵌攻略][127][tty驱动程序架构]的更多相关文章

  1. [国嵌攻略][142][LCD驱动程序架构]

    LCD裸机驱动回顾 1.LCD初始化 1.1.控制器初始化 1.2.端口初始化 1.3.指明了帧缓冲 2.LCD图形显示 2.1.将图形数据写入帧缓冲 Linux帧缓冲体验 把图片转换成开发板屏对应的 ...

  2. [国嵌攻略][163][linux-usb软件系统架构]

    软件系统架构 1.主机端软件架构 USB设备驱动->USB核心->USB主控制器驱动->USB主控制器 2.设备端软件架构 Gadget驱动->Gadget API->U ...

  3. [国嵌攻略][148][MTD系统架构]

    MTD设备概述 Flash在嵌入式系统中是必不可少的,它是bootloader.Linux内核和文件系统的最佳载体.在Linux内核中引入了MTD子系统为NOR Flash和Nand FLash设备提 ...

  4. [国嵌攻略][143][LCD驱动程序分析]

    LCD驱动程序分析 LCD驱动程序代码在/drivers/video/s3c2410fb.c文件中,在该驱动的s3c2410fb_init中注册了平台驱动,该驱动的初始化代码在s3c24xxfc_pr ...

  5. [国嵌攻略][098][Linux内核简介]

    Linux系统架构 1.用户空间:应用程序.C函数库 2.内核空间:系统调用接口.内核.体系结构相关代码 Linux系统利用处理器不同的工作模式,使用其中的两个级别分别来运行Linux内核与应用程序, ...

  6. [国嵌攻略][164][USB驱动程序设计]

    USB驱动模型 1.USB host controller driver(主控器驱动):为USB主控制器提供驱动程序 2.USB core(USB核心):连接USB主控制器驱动和USB设备驱动 3.U ...

  7. [国嵌攻略][159][SPI子系统]

    SPI 子系统架构 1.SPI core核心:用于连接SPI客户驱动和SPI主控制器驱动,并且提供了对应的注册和注销的接口. 2.SPI controller driver主控制器驱动:用来驱动SPI ...

  8. [国嵌攻略][157][SPI总线介绍]

    SPI总线架构 SPI(serial peripheral interface)串行外设接口,是一种高速,全双工,同步的通信总线.采用主从模式(master slave)架构,支持多个slave,一般 ...

  9. [国嵌攻略][155][I2C用户态驱动设计]

    用户态驱动模型 用户态驱动模型首先是一个应用程序,其次是在这个用户程序中通过内核调用来驱动设备. IIC通用驱动代码 IIC通用驱动程序的代码在/drivers/i2c/i2c-dev.c中.一次读操 ...

随机推荐

  1. mysql5.7-Group Replication

    什么是Group Replication 基于组的复制(Group-based Replication)是一种被使用在容错系统中的技术.Replication-group(复制组)是由能够相互通信的多 ...

  2. bzoj 2298: [HAOI2011]problem a

    Description 一次考试共有n个人参加,第i个人说:"有ai个人分数比我高,bi个人分数比我低."问最少有几个人没有说真话(可能有相同的分数) Input 第一行一个整数n ...

  3. w 命令详解

    作用: 用于显示已经登录系统的用户列表, 并显示用户正在执行的指令. 执行这个命令可得知目前登入系统的用户有哪些人, 以及他们正在执行的程序.  单独执行w 命令会显示所有的用户, 您也可指定用户名称 ...

  4. PHP使用ueditor上传配置

    引入 按照ueditor官网demo, 引入好ueditor之后, 默认是不能进行上传操作的 在上传时,在上传时会有如下图提示 配置上传 在editor/php目录下,有一个config.json文件 ...

  5. 通过WebSocket实现一个简单的聊天室功能

    WebSocket WebSocket是一个协议,它是是基于TCP的一种新的网络协议,TCP协议是一种持续性的协议,和HTTP不同的是,它可以在服务器端主动向客户端推送消息.通过这个协议,可以在建立一 ...

  6. 【JavaScript 】for 循环进化史

    ECMAScript 6已经逐渐普及,经过二十多年的改进,很多功能也有了更成熟的语句,比如 for 循环 这篇博客将介绍一下从最初的 for 循环,到 ES6 的 for-of 等四种遍历方法 先定义 ...

  7. LeetCode题目总结(一)

    我的代码在github上,https://github.com/WINTERFELLS/LeetCode-Answers 这里只提供个人的解题思路,不一定是最好的. Problems1-20 寻找两个 ...

  8. SQLServer 查看SQL语句的执行时间

    在MSSQL Server中通过查看SQL语句执行所用的时间,来衡量SQL语句的性能. 通过设置STATISTICS我们可以查看执行SQL时的系统情况.选项有PROFILE,IO ,TIME.介绍如下 ...

  9. [Spark性能调优] 第三章 : Spark 2.1.0 中 Sort-Based Shuffle 产生的内幕

    本課主題 Sorted-Based Shuffle 的诞生和介绍 Shuffle 中六大令人费解的问题 Sorted-Based Shuffle 的排序和源码鉴赏 Shuffle 在运行时的内存管理 ...

  10. c/c++ 贪吃蛇控制台版

    贪吃蛇控制台版(操作系统win7 64位:编译环境gcc, vs2017通过,其它环境未测试 不保证一定通过) 运行效果: #include <iomanip> #include < ...