linux tty 之分层结构

本文详细介绍了Linux TTY驱动的三层结构:内核层(tty_core)、线路规程层(line_discipline)和驱动层(tty_driver)。内核层提供统一的应用接口,线路规程层允许自定义实现,驱动层则包含具体的硬件交互。文章通过代码示例阐述了各层的功能,如内核层的file_operations、线路规程层的read/write函数及驱动层的uart操作。
摘要由CSDN通过智能技术生成

  tty驱动在linux中的分层结构:


        如图所示,tty驱动程序分为三层。第一层是内核层(tty_core),主要代码由内核代码实现在tty_io.c中;

第二层为线路规程层(line_discipline),开发者可以自己注册并实现一个线路规程驱动;第三层为驱动层

(tty_driver),这一层主要由内核实现在serial_core.c中。

        这里的tty驱动不包括最底层的硬件驱动,如uart驱动。以uart驱动为例,tty_driver层 需要通过uart_driver

与hardware相连。

        下面我们来分析一下tty驱动程序每一层做的事情。

        1、tty_core

        内核层是所有tty类型驱动的顶层架构,向应用层提供了统一的接口,应用层的open/read/write/ioctl/close

等调用会首先到达这里。此层由内核实现,代码主要在tty_io.c文件中。该层实现了tty设备的file_operations

函数操作集。

        static const struct file_operations tty_fops = {

                .llseek    = no_llseek,

                .read      = tty_read, 

                .write      = tty_write,

                .poll        = tty_poll,

                .unlocked_iockl = tty_ioctl,

                .open      = tty_open,

                .release = tty_release,

                .fasync = tty_fasync,

        };

        1)每个tty类型的驱动注册时都调用tty_register_driver函数

        int tty_register_driver(struct tty_driver *driver)

        {

               ......

                cdev_init(&driver->cdev, &tty_fops);   //字符设备驱动

                ......

        }

        2)在tty_read函数中调用线路规程层的read函数

        static ssize_t tty_read(struct file *file,char __user *buf, siz

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值