第14章 Linux终端设备驱动之数据发送和接收

14.4 数据发送和接收

    图 14.3 所示终端设备数据发送和接收过程中的数据流以及函数调用关系。


图 14.3 终端设备数据发送和接收过程中的数据流以及函数调用关系

    用户在有数据发送给终端设备时,通过“write()系统调用 — tty 核心 — 线路规程”的层层调用,最终调用 tty_driver结构体中的 write()函数完成发送。

    因为传输速度和 tty 硬件缓冲区容量的原因,不是所有的写程序要求的字符都可以在调用写函数时被发送,因此写函数应当返回能够发送给硬件的字节数以便用户程序检查是否所有的数据被真正写入。如果在 write()调用期间发生任何错误,一个负的错误码应当被返回。

    tty_driver 的 write()函数接受 3 个参数 tty_struct、发送数据指针及要发送的字节数。

int  (*write)(struct tty_struct * tty, const unsigned char *buf, int count);

    一般首先会通过 tty_struct 的 driver_data 成员得到设备私有信息结构体,然后依次进行必要的硬件操作开始

发送,代码清单 14.6 为 tty_driver 的 write()。

    代码清单 14.6 tty_driver  结构体的 write()成员函数

static int xxx_write(struct tty_struct *tty, const unsigned char *buf, int count)
 {
         /* 获得 tty 设备私有数据 */
         struct xxx_tty *xxx = (struct xxx_tty*)tty->driver_data;
         ...
         /* 开始发送 */
         while (1) {
                 local_irq_save(flags); /*把中断状态保存到flags中,禁止当前处理器上的中断*/
                 c = min_t(int, count, min(SERIAL_XMIT_SIZE - xxx->xmit_cnt - 1,
                 SE

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值