繁体   English   中英

Linux内核中的tty_tiocmset屏蔽所需的调制解调器信号

[英]tty_tiocmset in linux kernel masks desired modem signal

我在可以配置为DTE / DCE的硬件上运行嵌入式Linux内核。 在名为tty_io.c的文件中的tty / serial驱动程序中,有一个函数tty_tiocmset(),该函数从tty_ioctl中获取位模式以设置/清除特定的调制解调器控制信号。 有趣的是,除了TIOCM_DTR | TIOCM_RTS | TIOCM_OUT1 | TIOCM_OUT2 | TIOCM_LOOP外,tty_tiocmset()函数还屏蔽了所有其他调制解调器信号(此屏蔽显示在下面的代码中)。 但是,如果您查看文档,则似乎应该能够设置/清除所有调制解调器信号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名称,但确实出现在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个输出控制位(除了环回)!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM