2012-05-24 34 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