2006年12月17日星期日

tty_open和init_dev流程分析

tty_open大致流程
  1. 根据目标设备文件节点inode->i_rdev(device)初始化局部变量 struct tty_driver* driver; int noctty;
  2. init_dev函数初始化设备
  3. 建立从当前进程到目标设备的连接 flip->private_data=tty; 同时,把指向此设备的file结构挂入tty_struct结构中的队列tty_files file_move(flip,&tty->tty_files);
  4. 通过函数指针调用与链路规则相关的open操作
  5. 修改当前进程current 和 tty 相关信息
BTW:根据filp->f_op可能有一个retry_open的过程。
init_dev大致流程:
  1. check wherher we're reopening an exiting tty
  2. 否,alloc_tty_struct() 分配空间
  3. 数据结构初始化 initialize_tty_struct(tty);
  4. 若想打开pty,则还需要建立o_tty(从设备),初始化之并建立主从设备之间的相互连接
  5. 在建立好设备以后,还需要设置若干termios结构,不太明白怎么回事(termios在某种程度上可以看作ldisc的补充,定义对字符的处理和波特率,不过这儿初始化的时候太多的判断了,不太清楚)
  6. 使用相应的链路规则open tty和o_tty(假如存在的话)
  7. 最后是一些错误处理的代码(不在流程里了)

没有评论: