tty系统open流程分析
发布日期:2021-05-07 13:26:40 浏览次数:21 分类:精选文章

本文共 2070 字,大约阅读时间需要 6 分钟。

一: Open /dev/XXX

从tty_open 入手分析: open  /dev/ttysxx  打开由底层注册的设备节点/kernel/driver/tty/Tty_io.cstatic const struct file_operations tty_fops = {    .llseek     = no_llseek,    .read       = tty_read,    .write      = tty_write,    .poll       = tty_poll,    .unlocked_ioctl = tty_ioctl,    .compat_ioctl   = tty_compat_ioctl,**  .open       = tty_open,    .release    = tty_release,    .fasync     = tty_fasync,};

二:open从用户层到底层分析

static int tty_open(struct inode *inode, struct file *filp){    struct tty_struct *tty;    int noctty, retval;    struct tty_driver *driver = NULL;    int index;1   //从全局 tty_driver链表中查找给定设备的 tty_driver    driver = tty_lookup_driver(device, filp, &noctty, &index);{        static struct tty_driver *get_tty_driver(dev_t device, int *index){            list_for_each_entry(p, &tty_drivers, tty_drivers)         }    }2   //根据获取到的tty_driver初始化一个 tty_struct(可以理解为tty_struct是tty_driver的另一种形式)    tty = tty_init_dev(driver, index, 0){        struct tty_struct *tty;         //分配并初始化一个tty_struct        tty = alloc_tty_struct(driver, idx);{        2.1//设置线程规程,            tty_ldisc_init(tty);         2.2 //初始化等待队列头            init_waitqueue_head(&tty->write_wait);            init_waitqueue_head(&tty->read_wait);        2.3 //tty_struct->ops 指向  tty_driver->ops             tty->driver = driver;            tty->ops = driver->ops;            tty->index = idx;        }        retval = tty_ldisc_setup(tty, tty->link);{        2.4 //调用线路规程的 open            retval = tty_ldisc_open(tty, ld);        }    }3       //调用struct tty_struct tty-> tty_foperation(tty_driver).open    retval = tty->ops->open(tty, filp);{       retval = uart_startup(state, 0);        {           uart_port_startup           {               struct uart_port *uport = state->uart_port;               //最终调用 uart_port->ops->startup               retval = uport->ops->startup(uport);            }       }    }}

三:小结 :

1  open /dev/ttyxxx     1.1  tty_struct->tty_ldisc_ops 绑定到 tty_driver->tty_operations2  open tty_struct->tty_ldisc_ops->open3  open uart_driver->uart_ops->startup
上一篇:Linux 设备驱动并发控制简述
下一篇:tty_ldisc线路规程简述

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2025年04月15日 18时55分27秒