zoukankan      html  css  js  c++  java
  • [国嵌攻略][127][tty驱动程序架构]

    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

  • 相关阅读:
    struts2校验器
    Struts2 验证框架 validation.xml 常用的验证规则
    MVC 无法找到资源
    架构设计
    金山西山居初赛第二场 美素数
    K Smallest Sums
    金山游戏编程复赛 连续最大积
    C++大作业之链表实现的高精度加法,减法,和数组实现的高精度乘法。
    POJ 3250 Bad Hair Day
    PoJ2492A Bug's Life并查集
  • 原文地址:https://www.cnblogs.com/d442130165/p/5262537.html
Copyright © 2011-2022 走看看