
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
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2025年04月15日 18时55分27秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Python实验26:计算文件MD5值
2021-05-08
端口探测
2021-05-08
LeetCode:28. 实现 strStr()——————简单
2021-05-08
java 中 private default protected public 范围
2021-05-08
LeetCode:697. 数组的度————简单
2021-05-08
LeetCode:1052. 爱生气的书店老板————中等
2021-05-08
C语言的6大基本数据类型!(学习C语言小白必备!!)
2021-05-08
红黑树学习
2021-05-08
vue中导入导入 Mint-UI的注意事项
2021-05-08
Vue——mock模拟数据的使用
2021-05-08
Nginx配置反向代理与负载均衡
2021-05-08
高阶函数reduce
2021-05-08
Lionheart万汇:布林线双底形态分析技巧
2021-05-08
Lionheart万汇:台积电大幅提升资本开支,2021有望续创辉煌
2021-05-08
Lionheart万汇:新年消费结构中贵金属交易机会
2021-05-08
LHCM万汇:在需求上升中,美国贸易赤字创下历史新高
2021-05-08
线程同步机制和三个线程不安全例子
2021-05-08
Mybatis的入门01
2021-05-08
Vue01常见指令,axios
2021-05-08
Vue路由嵌套刷新后页面没有重新渲染
2021-05-08