linux下进程的tty,Linux下TTY驱动程序分析

3、核心结构体

#include

struct tty_driver {

int magic;  /*幻数,通常被设置为TTY_DRIVER_MAGIC。在alloc_tty_driver函数中被初始化*/

struct kref kref; /* Reference management */

struct cdev cdev;

struct module *owner;/*驱动模块的所有者*/

const char *driver_name;/*驱动程序的名称,在/proc/tty和sysfs中使用*/

const char *name;/*驱动节点的名字*/

int name_base; /*为穿件设备名字而使用的开始编号*/

int major;  /*驱动程序的主设备号*/

int minor_start; /*驱动程序使用的最小次设备号*/

int minor_num; /* number of *possible* devices */

int num;  /*可以分配给驱动程序次设备号的个数*/

short type;  /* type of tty driver */

short subtype; /* subtype of tty driver */

struct ktermios init_termios; /*当被创建时,含有初始值的termios结构*/

int flags;  /*驱动程序标志位*/

struct proc_dir_entry *proc_entry; /*驱动程序的/proc入口结构体*/

struct tty_driver *other; /*指向tty从属设备驱动程序的指针*/

/*

* Pointer to the tty data structures

*/

struct tty_struct **ttys;

struct ktermios **termios;

struct ktermios **termios_locked;

void *driver_state;

/*

* Driver methods

*/

const struct tty_operations *ops;

struct list_head tty_drivers;

};

#include

struct tty_operations {

struct tty_struct * (*lookup)(struct tty_driver *driver,

struct inode *inode, int idx);

int  (*install)(struct tty_driver *driver, struct tty_struct *tty);

void (*remove)(struct tty_driver *driver, struct tty_struct *tty);

int  (*open)(struct tty_struct * tty, struct file * filp);/*open函数*/

void (*close)(struct tty_struct * tty, struct file * filp);/*close函数*/

void (*shutdown)(struct tty_struct *tty);

void (*cleanup)(struct tty_struct *tty);

int  (*write)(struct tty_struct * tty,

const unsigned char *buf, int count);/*write函数*/

int  (*put_char)(struct tty_struct *tty, unsigned char ch);/*单字符写入函数*/

void (*flush_chars)(struct tty_struct *tty);

int  (*write_room)(struct tty_struct *tty);/*检测缓冲区的剩余空间*/

int  (*chars_in_buffer)(struct tty_struct *tty);/*检测包含数据的缓冲区数量*/

int  (*ioctl)(struct tty_struct *tty,

unsigned int cmd, unsigned long arg);/*当设备节点的调用ioctl(2)时,该函数被tty核心调用*/

long (*compat_ioctl)(struct tty_struct *tty,

unsigned int cmd, unsigned long arg);

void (*set_termios)(struct tty_struct *tty, struct ktermios * old);/*改变设备的termios设置*/

void (*throttle)(struct tty_struct * tty);/*当tty核心的输入缓冲区满的时候,调用该函数。

tty驱动程序将试图通知设备,不要再发送更多的字符。*/

void (*unthrottle)(struct tty_struct * tty);/*当tty核心的输入缓冲区被清空是,调用该函数,使能其接受更多的数据*/

void (*stop)(struct tty_struct *tty);/*tty驱动程序将停止向设备发送数据*/

void (*start)(struct tty_struct *tty);/*恢复数据的传送*/

void (*hangup)(struct tty_struct *tty);/*当tty驱动程序挂起tty设备时,调用该函数。此时对任何特定硬件的操作应当被挂起*/

int (*break_ctl)(struct tty_struct *tty, int state);/*中断连接控制函数*/

void (*flush_buffer)(struct tty_struct *tty);/*刷新缓冲区,并丢失里面的数据*/

void (*set_ldisc)(struct tty_struct *tty);/*设置线路规程的函数*/

void (*wait_until_sent)(struct tty_struct *tty, int timeout);/*向硬件发送数据*/

void (*send_xchar)(struct tty_struct *tty, char ch);/*发送X类型的字符函数。要发送的字符放在ch变量中*/

int (*tiocmget)(struct tty_struct *tty);/*获得特定tty设备当前的线路设置*/

int (*tiocmset)(struct tty_struct *tty,

unsigned int set, unsigned int clear);/*为特定的tty设备设置当前线路*/

int (*resize)(struct tty_struct *tty, struct winsize *ws);

int (*set_termiox)(struct tty_struct *tty, struct termiox *tnew);

int (*get_icount)(struct tty_struct *tty,

struct serial_icounter_struct *icount);

#ifdef CONFIG_CONSOLE_POLL

int (*poll_init)(struct tty_driver *driver, int line, char *options);

int (*poll_get_char)(struct tty_driver *driver, int line);

void (*poll_put_char)(struct tty_driver *driver, int line, char ch);

#endif

const struct file_operations *proc_fops;

};0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值