参考代码
串口核心层:
drivers/tty/serial/serial_core.c
TTY层:
drivers/tty/tty_io.c
行规程:
drivers/tty/tty_ldisc.c
drivers/tty/n_tty.c
流程分析
tty_write
ld->ops->write //调用行规程的write 函数
行规程(n_tty.c) 的 write函数:
在串口核心层的write 函数中,会先把数据存入buffer ,然后启动串口发送数据
uart_write
circ = &state->xmit;
while (1) {
c = CIRC_SPACE_TO_END(circ->head, circ->tail, UART_XMIT_SIZE);
if (count < c)
c = count;
if (c <= 0)
break;
memcpy(circ->buf + circ->head, buf, c);
circ->head = (circ->head + c) & (UART_XMIT_SIZE - 1);
buf += c;
count -= c;
ret += c;
}
__uart_start
port->ops->start_tx(port); //调用具体硬件的start_tx函数,将数据发送出去