07 linux011字符设备管理

Posted 资质平庸的程序员

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了07 linux011字符设备管理相关的知识,希望对你有一定的参考价值。

1 与字符设备的大体交互过程(如UART)

[1] 写操作
IO 端口指令
   |[0]
   V
 +---+ [1] 命令 +----------+
 |   |--------->|UART控制器|[2] 命令接收与执行 
 |CPU|          |          |
 |   | [3] 中断 |          |
 +---+<---------+----------+
   |[4]
   V
中断处理程序

[2] 读
读一般由字符设备主动发起中断触发CPU调用相应的中断响应函数读取数据。

2 与字符设备交互涉及的抽象层次

linux 0.11 与字符设备的交互抽象到了文件层面。大体过程如下

(1) 文件操作

[1] 打开文件

字符设备也被抽象为一个文件,其i节点在文件系统中被存储。根据根目录或当前目录可搜索到指定文件对应的i节点到缓冲区中。

[2] 读写文件

文件读写的核心是打开文件时所获取到的i节点信息。由该i节点可得到文件所属设备类型及设备编号,从而调用相应类型的读写函数进行读写,如此处的字符设备读写函数。

(2) 字符设备读写

字符设备在内核中有相应的读写队列,这些队列专门用于缓冲字符设备的数据。

[1] 读字符设备,从字符设备读队列中读取数据,读队列中的数据由字符设备读中断响应函数写入。

[2] 写字符设备,向字符设备写队列中写入数据,在写队列中完成写操作或者写满队列时向字符设备发送写中断,待字符设备以写中断方式向CPU反馈可写后,CPU再调用写字符设备中断响应函数完成写操作。

(3) 与字符设备进行交互

所以与块设备交互涉及的抽象层次由上到下有

  +------------+
  |文件操作管理|
  +------------+
        |
        V
   +------------+
   |读写队列管理|
   +------------+
        |
        V
+------------------+
|字符设备的交互流程|
+------------------+

3 理解键盘输入过程

  +------------+
  |  terminal  |
  |------------|
  |UART|network|
  +------------+
        ^
        |写往串口/网口控制器发送给其他设备
        v
    +------+
    |  CPU | to echo +----------+   +-------+
    |======| ------> |video card|-->|monitor|
    |QUEUES|         +----------+   +-------+
    +======+
       ^
       |I/O指令和中断机制
       V
+--------------------------+
|keyboard && its controller|
+--------------------------+

以上是关于07 linux011字符设备管理的主要内容,如果未能解决你的问题,请参考以下文章

06 linux011块设备管理

06 linux011块设备管理

02 linux011内存管理

02 linux011内存管理

10 linux011子进程创建和多进程调度开销分析

10 linux011子进程创建和多进程调度开销分析