C - Linux 内核中的tty_tiocmset掩码所需的调制解调器信号



我在可以配置为DTE/DCE的硬件上运行嵌入式Linux内核。在名为 tty_io.c 的文件中的 tty/串行驱动程序中,有一个函数 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)的情况下存在?还有没有另一种方法可以使用未修改的驱动程序来控制其他调制解调器信号?

Linux 最初托管在 x86 PC 平台上,该平台使用 8250 类型的 UART。调制解调器信号名称OUT1和OUT2不是EIA/RS-232名称,但确实出现在西部数据8250数据表中!列出的这5位tty_tiocmset()匹配(按名称和功能)8250调制解调器控制寄存器中可用的5位。任何额外的控制线都必须通过 8250 外部的逻辑实现。

有没有人知道为什么这个掩码在没有其他信号(如RI,CD,CTS,DSR)的情况下存在?

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

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

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

最新更新