tty系统open流程分析
2017-12-23 15:51
1021 查看
一: Open /dev/XXX
从tty_open 入手分析: open /dev/ttysxx 打开由底层注册的设备节点 /kernel/driver/tty/Tty_io.c static 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_operations 2 open tty_struct->tty_ldisc_ops->open 3 open uart_driver->uart_ops->startup
相关文章推荐
- LDD3之scull--从open系统调用到模块的scull_open执行流程分析
- open系统调用在内核中的流程分析
- open系统调用在内核中的流程分析
- open系统调用在内核中的流程分析
- open系统调用在内核中的流程分析
- [IO系统]05 open流程分析
- Android系统从加电到Home桌面出现流程分析(基于Android-2.3)
- Android 6.0 屏幕旋转系统流程分析
- (一)openwrt make menuconfig流程分析
- android 系统所有的重启关机流程分析
- OpenRTMFP/Cumulus Primer(6)CumulusServer启动流程分析(续2)
- [Android]Android系统启动流程源码分析
- open 系统调用分析
- [RK3288][Android6.0] 系统按键驱动流程分析【转】
- OpenRTMFP/Cumulus Primer(5)CumulusServer启动流程分析(续1)
- Linux系统启动流程分析与关机流程
- 基于rk3288平台android5.1系统的wifi流程分析 ---- 打开热点,作为AP
- Android 5.0 状态栏(SystemUI)系统图标加载流程简单分析
- (一)openwrt make menuconfig流程分析
- watchdog杀死system_server导致系统重启问题分析流程