tty设备驱动问题--为什么设备会把接收到的数据又发送出去?详细见内

lansesijin 2007-03-23 06:14:19
调试设备时,发现没有对设备发送数据,但设备的接收端总会收到一些数据。

跟踪发现无用数据是linux-2.4.19/drivers/char/serial.c里的rs_put_char函数写进xmit.buf,最后被中断函数发送出去的。
而这些无用数据恰好是从设备接收来的数据。为什么会这样呢?
n_tty.c中似乎有对rs_put_char函数的间接调用,原理是什么呢?rs_put_char原本应该是应用程序调用的啊……迷糊中……

如何让rs_put_char函数只发送应用程序传给设备的数据呢?
望高手指教……

static void rs_put_char(struct tty_struct *tty, unsigned char ch)
{
struct async_struct *info = (struct async_struct *)tty->driver_data;
unsigned long flags;

if (serial_paranoia_check(info, tty->device, "rs_put_char"))
return;

if (!tty || !info->xmit.buf)
return;

save_flags(flags); cli();
if (CIRC_SPACE(info->xmit.head,
info->xmit.tail,
SERIAL_XMIT_SIZE) == 0) {
restore_flags(flags);
return;
}
info->xmit.buf[info->xmit.head] = ch;
info->xmit.head = (info->xmit.head + 1) & (SERIAL_XMIT_SIZE-1);
restore_flags(flags);
}
...全文
260 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
lansesijin 2007-04-02
  • 打赏
  • 举报
回复
谢谢,找到了,把termios结构里的c_lflag变量的ECHO值取消就可以了^_^
tjlgdx2000 2007-03-29
  • 打赏
  • 举报
回复
Linux的串口默认是调试模式的,它就是接到你发出的数据然后回传,设下相应的参数就可以关掉这种模式

4,465

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧