How tough life is, how strong you should be!
分类: LINUX
2012-07-03 13:31:25
Tty核心概览:
Tty_core已经由内核给出不需要驱动编写者再次编写。Tty_driver需要驱动编写者去编写,
它通过实现操作函数结构体tty_operations中的成员函数操作硬件。Line discipline为线路规程,它需要驱动编写者编写。当用户空间发来一大堆杂乱无章的数据时,通过线路规程函数的整理使其符合一定的协议(比如ppp或者是蓝牙协议),然后调用tty_operations中的成员函数发送到硬件。
Tty驱动模型建立:
1.分配 tty_driver结构内存。struct tty_driver *alloc_tty_driver(int lines) (lines为该驱动中次设备号的个数)
2.实现操作函数结构体tty_operations中的各成员函数。
3.. 初始化结构Tty_driver的成员,设置Tty_driver的操作函数结构体
Tty_driver->owner =
Tty_driver->driver_name =
Tty_driver->name =
Tty_driver->major =
Tty_driver->minor_start =
Tty_driver->type =
Tty_driver->subtype =
Tty_driver->init_termios =
Tty_driver->init_termios.c_cflag =
Tty_driver->init_termios.c_ispeed =
Tty_driver->flags =
Tty_driver->driver_state =
tty_set_operations(Tty_driver, &tty_operations);
4.int tty_register_driver(struct tty_driver *driver)注册tty驱动。
5. struct device *tty_register_device(struct tty_driver *driver, unsigned index,struct device *device)
注册驱动中的设备在用户空间创建设备节点。以上呈现了一个tty驱动模型。Tty是一类设备,所有tty驱动都是在以上模型的基础上扩展而来。以下串口驱动即是tty驱动的一个具体实现。
在本驱动中重要结构Tty_driver 嵌入结构体uart_driver中。通过调用函数 uart_register_driver(struct uart_driver *drv)
完成了tty驱动模型建立的1,3,4点。tty驱动模型建立的2点在文件serial_core.c中实现。
tty驱动模型建立的5点在文件samsung.c中调用初始化函数
int s3c24xx_serial_probe(struct platform_device *dev,struct s3c24xx_uart_info *info),在该函数中调用函数uart_add_one_port,
在函数uart_add_one_port中调用了函数tty_register_device实现了tty驱动模型建立的第五点。实现了整个
tty驱动模型的建立。
串口驱动常用的数据结构表示如下:
串口驱动uart_driver有多个端口uart_port,每个端口对应着一个uart_state。Circ_buf为环形数据输出缓存。
出口驱动中的各操作函数结构表示: