2012-05-24 44 views
0

我在可配置为DTE/DCE的硬件上运行嵌入式Linux内核。在一个名为tty_io.c的文件中,tty/serial驱动程序中有一个函数tty_tiocmset(),它从tty_ioctl中取一个位模式来设置/清除特定的调制解调器控制信号。有趣的是,tty_tiocmset()函数屏蔽了除TIOCM_DTR | TIOCM_RTS | TIOCM_OUT1 | TIOCM_OUT2 | TIOCM_LOOP之外的所有其他调制解调器信号(该掩码如下所示)。但是,如果您查看文档,看起来应该能够设置/清除所有调制解调器信号http://www.kernel.org/doc/man-pages/online/pages/man4/tty_ioctl.4.html向下滚动到“调制解调器控制”。tty_tiocmset在Linux内核掩码所需的调制解调器信号

有没有人知道为什么这个面具没有其他信号,如RI,CD,CTS,DSR?还有另一种方式使用未经修改的驱动程序来控制其他调制解调器信号?

回答

0

Linux最初托管在x86 PC平台上,该平台使用8250型UART。调制解调器信号名称OUT1 & OUT2不是EIA/RS-232名称,但确实出现在Western Digital 8250数据表中!针对tty_tiocmset()列出的那5位与8250调制解调器控制寄存器中的5位匹配(通过名称&函数)。任何额外的控制线都必须由逻辑来实现外部8250

有谁只是知道为什么这个面具是不存在的其他信号,如RI,CD,CTS,DSR?

你提到这四个是输入信号到DTE端口,和个人电脑通常配置(或假定/默认值)为DTE。
输入信号不会出现在输出控制寄存器中。
也许这是Linux嵌入到DCE端口的设备中时的错误?
这些输入信号确实出现在调制解调器状态寄存器中。

还有另一种方式使用未经修改的驱动程序来控制其他调制解调器信号?

您可以将OUT1OUT2重映射到需要输出的任何其他DTE信号。
如果您需要为DCE设置端口,则可能必须重新映射所有四条控制线。
对于DCE端口(即调制解调器),通常只有4条输出控制线:DCD,CTS,DSR和RI。并且在8250 MCR中只有4个输出控制位(除了回送)!

+0

谢谢,我对OUT1和OUT2信号感到困惑,但它确实有道理,我可以使用这些信号,并根据DCE的需要重新映射它们。我从来没有看到他们出现在任何司机。由于我的驱动程序将允许uart端口充当dce或dte,我认为将DTE调制解调器信号和OUT信号映射到相应的DCE调制解调器信号是最有意义的。 – user1415608