参考代码
串口核心层:
drivers/tty/serial/serial_core.c
TTY层:
drivers/tty/tty_io.c
行规程:
drivers/tty/tty_ldisc.c
drivers/tty/n_tty.c
open 功能描述
- 找到tty_driver
分配/设置tty_struct
行规程初始化 - 调用tty_driver->ops->open
源码分析
tty_open
driver = tty_lookup_driver(device, filp, &noctty, &index);//找到tty_driver
tty = tty_driver_lookup_tty(driver, inode, index);//查找tty_struct,第一次open时,肯定为null
tty = tty_init_dev(driver, index);
tty = alloc_tty_struct(driver, idx);//分配/设置tty_struct
retval = tty->ops->open(tty, filp);
uart_open //serial_core.c
retval = uart_startup(tty, state, 0);
retval = uart_port_startup(tty, state, init_hw);
retval = uport->ops->startup(uport); //调用硬件相关的startup函数
1,分配/设置tty_struct
2,初始化行规程
drivers/tty/tty_ldisc.c
drivers/tty/n_tty.c
3,硬件相关的start_up函数
如:kernel\drivers\tty\serial\8250\8250_port.c