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. Java 字符编码与解码

    1.字符编码的发展历程 ①.ASCII 码 因为计算机只认识数字,所以我们在计算机里面的一切数据都是以数字来表示,因为英文字符有限,所以规定使用的字节的最高位是 0,每一个字节都是以 0-127 之间 ...

  2. docker 保存 加载(导入 导出镜像

    tensorflow 的docker镜像很大,pull一次由于墙经常失败.其实docker 可以将镜像导出再导入. 保存加载(tensorflow)镜像 1) 查看镜像 docker images 如 ...

  3. Mobiscroll的介绍【一款兼容PC和移动设备的滑动插件】

    Mobiscroll是一个用于触摸设备的日期和时间选择器,它的使用不会改变HTML5.PhoneGap以及混合应用的原生用户体验.作为一款jQuery滑动选择插件,用户可以自定义主题样式,为自己的移动 ...

  4. C语言学生管理系统(原版本)(自编)

    /*系统特色:(大牛勿笑) *颜色提示 *文字提示 *功能 */ #include <stdio.h> #include <stdlib.h> #include <mat ...

  5. Sticky Footer 绝对底部的两种套路

    最近面了好几个前端,工作经验有高有低,居然都不知道绝对底部是什么,也没有人能说出一种实现方式,让我不禁感慨前端领域的良莠不齐 绝对底部,或者说 Sticky Footer,是一种古老且经典的页面效果: ...

  6. 微信小程序开发之选项卡

    选项卡是web开发中经常使用到的一个模块,在小程序中竟然没有,这里参考别人的文章自己做了一个双选项卡 实现思路: 通过绑定swichNav事件来控制currentTab(当前选项卡)和isShow(是 ...

  7. SpringMVC提交数据遭遇基础类型和日期类型报400错误解决方法

    使用SpringMVC开发的时候,页面如果有日期格式的数据,后台接受也是java.util.Date,则报告400错误 .下面是解决方案的演示示例: 这个是实体类,里面createDate就是java ...

  8. HTML5新特性: 自定义属性前缀data-以及dataset的使用

    HTML5规定可以为元素添加非标准的属性,但要添加前缀 data- ,目的是为元素提供与渲染无关的信息,或者提供语义信息.这些属性可以任意添加.随便命名,只要以 data- 开头即可 添加了自定义属性 ...

  9. angular4.0使用sass

    一.为什么选择sass为了更好的管理代码,我们需要可以定义变量,同时可以使用函数的样式工具,比如定义公用color.bg.显然css无法满足需求.现在市面上常用的是sass.less.经过比较,我选择 ...

  10. mysql自连接求累计金额