我们知道,tty驱动分为3层:tty内核层、tty线路规程层、tty驱动层。
tty内核层函数操作集为:struct file_opertaions; //在tty_io.c中,已由内核实现
tty线路规程层函数操作集为:struct tty_ldisc_ops; //需要我们来实现
tty驱动层函数操作集为:struct tty_operations; //在serial_core.c中,已由内核实现。该操作集没有read函数,有receive_buf函数。
另外,UART驱动的函数操作集为:struct uart_ops; //需要我们来实现
以上4个函数操作集存在层层调用的关系。以write函数为例,函数的调用路径如下:
用户空间write() -> file_operations write() -> tty_ldisc_ops write() -> tty_operations write() -> uart_ops write();
以串口驱动写操作为例,当用户打开串口,调用write()操作后,内核首先会调用tty内核层file_operations