tty核心分析
sirzjp
这个作者很懒,什么都没留下…
展开
-
linux tty core 源码分析(1)
本文以linux 2.6.27内核为基础,阅读tty core 源码并作注解,自己接触时间不长,希望与爱好者共同分享,错误之处还望指正。 linux tty core 是建立在字符设备驱动的基础之上,并为tty类型设备(串口、控制台、虚拟终端)提供一个公用的平台。所以任何一个tty设备驱动的注册都是作为一个字符设备驱动而操作的。下面我们看看代码中是如何处理的:/* 3/2004 jmc: why do these devices exist? *///tty核心默认在内核中实现的字符型tty设备驱动sta原创 2011-01-11 14:29:00 · 4557 阅读 · 0 评论 -
linux tty core 源码分析(3)
前面分析了open操作,现在分析读操作tty_read。tty_read直接调用线路规程中的读操作从tty->read_buf中读取数据到用户空间。其中tty.read_head记录已读数据的起始位置,tty.read_tail记录已读数据的末尾位置,tty.read_cnt记录已读数据的数量。至于所读数据从何而来我们在下一篇中分析,下面看具体代码:/** * tty_read - read method for tty device files * @file: pointer to tty file *原创 2011-01-13 13:20:00 · 3810 阅读 · 1 评论 -
linux tty core 源码分析(2)
//下面对tty_open函数进行分析,open函数的具体操作就是。。。。。/** * tty_open - open a tty device * @inode: inode of device file * @filp: file pointer to tty * * tty_open and tty_release keep up the tty count that contains the * number of opens done on a tty. We cannot use the in原创 2011-01-11 14:50:00 · 3659 阅读 · 1 评论 -
linux tty core 源码分析(4)
上面分析了用户空间从tty读数据的过程,读数据时从tty->read_buf那么tty->read_buf中的数据从而而来呢?这就是我们今天要讨论的问题。tty_struct结构中有个 struct tty_bufhead buf 成员,比如当tty串口中有数据过来时就会产生中断,tty就利用tty.buf中的成员保存中断到来的数据,在合适的机会再用tty_flip_buffer_push类函数把tty->buf中的数据保存到tty->read_buf中去,从而就达到数据来源的效果。具体源码如下:先看看下面原创 2011-01-17 11:32:00 · 4735 阅读 · 0 评论 -
linux tty core 源码分析(6)
使用非阻塞的IO应用程序常调用select类函数,允许进程决定是否可以对一个或多个打开的文件进行非阻塞的读取或者写入该功能的实现就要下面tty_poll操作来实现的。该功能的函数实现有一个关键的数据结构poll_table和一个关键的函数poll_wait对该结构和函数这里不深入解析只知道其功能即可/** * tty_poll - check tty status * @filp: file being polled * @wait: poll wait structures to update * * C原创 2011-01-18 14:38:00 · 2042 阅读 · 0 评论 -
linux tty core 源码分析(8)
tty_ioctl和tty_compat_ioctl都是对设备的控制操作,比较容易理解这里就不做分析,有兴趣的读者可以自己分析。其中tty_compat_ioctl使用在用户空间为32位模式而内核空间为64位模式时将64位转化为32位的操作方式。 剩下的就是最后的操作,当关闭tty设备是调用的tty_release操作,主要是释放前面分配的资费做tty_open的反操作/** * tty_release - vfs callback for close * @inode: in原创 2011-01-20 10:40:00 · 2051 阅读 · 0 评论 -
linux tty core 源码分析(9)
linux tty 核心是构建在标准字符设备驱动之上,提供一系列功能,作为接口为终端类型设备驱动所使用。在前面的分析中我们看到 tty核心控制了通过tty设备的数据流,格式化了这些数据流,所以常规tty驱动的工作不必考虑常规操作方法与用户空间的交互,同时不同的线路规程可以虚拟的插入到任何tty设备上。从前面的各种方法分析上,我们知道tty核心从用户空间得到数据把数据发送到tty线路规程,线路规程驱动把数据传递给tty驱动程序,同时tty设备从硬件那里接收到的数据传递给tty线路规程,线路规程再传原创 2011-01-20 14:59:00 · 3279 阅读 · 0 评论 -
linux tty core 源码分析(5)
tty设备的读操作tty_write首先对读操作的需求做检查,然后调用ldisc->write操作默认即write_chain函数。wrtie_chain通过tty->ops->write或者tty->ops->flush_chars把数据写入到设备中,两者都实现时后者有限。其中write_room函数是用来检测缓存于空间./** * tty_write - write method for tty device file * @file: tty file pointer * @buf: user da原创 2011-01-18 10:35:00 · 2860 阅读 · 1 评论 -
linux tty core 源码分析(7)
套接字和终端通常都具有异步通知机制,即应用程序可以在数据可用的时候接收到一个信号SIGIO而不需要去轮询关注的数据。但是当对于多个数据源时,应用不能区分SIGIO的来源。为了实现异步通知机制,应用程序需要为数据源设置一个属主进程即用fcntl的F_SETOWN来设置属主进程,以及用fcntl的F_SETFL设置FASYNC标志来开启文件的异步通知机制。 终端设备是tty设备的一种,其异步通知机制的实现在驱动中是分布的: 1)首先在F_SETOWN被调用时对filp->owner赋原创 2011-01-19 11:32:00 · 1707 阅读 · 0 评论