linux内核中的tty_tiocmset掩盖了所需的调制解调器信号

时间:2012-05-24 16:54:44

标签: c linux embedded-linux modem tty

我在硬件上运行嵌入式Linux内核,可配置为DTE / DCE。在名为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向下滚动到“调制解调器控制”。

有没有人知道为什么没有RI,CD,CTS,DSR等其他信号存在这个掩码?还有另一种方法可以使用未经修改的驱动程序来控制其他调制解调器信号吗?

1 个答案:

答案 0 :(得分: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端口,并且PC通常被配置(或假设/默认)为DTE。
输入信号不会出现在输出控制寄存器中 当Linux嵌入到DCE端口的设备中时,这可能是一个错误吗? 这些输入信号确实出现在调制解调器状态寄存器中。

  

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

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