日期:2014-05-16  浏览次数:20688 次

tty设备驱动问题--为什么设备会把接收到的数据又发送出去?详细见内
调试设备时,发现没有对设备发送数据,但设备的接收端总会收到一些数据。

跟踪发现无用数据是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);
}


------解决方案--------------------
Linux的串口默认是调试模式的,它就是接到你发出的数据然后回传,设下相应的参数就可以关掉这种模式