问题:关注硬件本身:如何开启串行中断发送字符操作?
1.终端基本数据结构:
每个终端设备都对应有一个tty_struct数据结构,主要用来保存终端设备参数设置、所属的前台进程组ID和字符IO缓冲队列等信息。
struc tty_struct{ struct termios termios; int pgrp; int stopped; void (*write) (struct tty_struct *tty); struct tty_queue read_q; struct tty_queue write_q; struct tty_queue secondary; };
extern tty_struct tty_table[];
|
linux内核使用tty_struct的数组tty_table[]来表示所有的终端设备,如上面代码所示。linux0.11内核共有3个终端设备:一个是控制台设备,另两个是使用系统上两个串行口的串行终端设备。termios 用于对应终端设备的IO属性。
2.控制台终端和串行终端设备:
下面的图很好的说明了控制台终端和串行终端的工作原理:控制台终端由键盘终端处理程序keyboard.s和显示控制程序console.c分别进行管理。它接收上层tty_io.c传递过来的显示字符或控制信息,并控制在主机屏幕上字符的显示,同时控制台把键盘按键产生的代码由keyboard.s传送到tty_io.c中去处理。
串行终端设备则通过rs_io.s与tty_io.c进行交互。
3.终端驱动程序接口:
通常用户用文件系统与设备打交道,每个设备都有一个文件名称。终端驱动程序与系统其他程序的接口函数包括tty_write、tty_read和输入行规则函数copy_to_cooked,这三个函数都在tty_io.c文件中。另外,在tty_ioctl.c中实现了修改终端参数的tty_ioctl函数。
阅读(1549) | 评论(0) | 转发(0) |