11.3. 从控制台端口到终端(或另一台PC)的电缆

RS-232 标准允许但不指定在没有中间调制解调器的情况下互连两台计算机。 需要一种特殊的电缆,称为 “零调制解调器” 电缆。

零调制解调器电缆内的布线取决于所需握手和控制信号。 不同的制造商对此主题有不同的看法,因此不要购买没有接线图的零调制解调器电缆。

Linux 需要正确连接所有流控制和调制解调器控制信号。 零调制解调器电缆的正确接线如图 11-1 所示,另一种替代方案如图 11-2 所示。

Linux 使用 CTSRTS 进行握手,防止计算机超出终端的处理能力,并防止终端超出计算机的处理能力。 如果您要将两台计算机连接在一起,那么如果没有 CTS/RTS 握手,您将无法获得可靠的文件传输。

Linux 使用 DSRDCD 来检测终端是否已连接。 然后它将请求登录。 如果会话已建立并且 DCD 掉线,则 Linux 将注销用户。

Linux 使用 DTR 强制清除链路。 它在用户注销后执行此操作,以释放通信通道。

图 11-1图 11-2 中的任何一种零调制解调器设计都满足 Linux 内核的要求。 当两台计算机都位于远程位置时,图 11-2 可能会略好一些,因为 DSRDCD 的不同状态可用于确定零调制解调器电缆的哪一端出现故障。

所有零调制解调器设计都有一个共同的缺陷。 通过真实调制解调器互连的计算机,在本地计算机断开数据终端就绪状态以重置本地调制解调器后,数据装置就绪状态会掉线一段时间。 大多数软件都旨在适应调制解调器链路和零调制解调器链路之间的这种细微差异。

不正确接线的零调制解调器电缆可能会导致重大的安全风险和可靠性的大幅降低,包括 图 11-3图 11-4图 11-5 中的电缆。

图 11-1。 具有完整状态和握手的零调制解调器电缆

      Signal ground ---------------------- Signal ground

       Receive data ---------------------- Transmit data

      Transmit data ---------------------- Receive data

      Ready to send ---------------------- Clear to send

      Clear to send ---------------------- Ready to send

Data terminal ready -----------------+---- Data carrier detect
                                     |
                                     +---- Data set ready

Data carrier detect ----+----------------- Data terminal ready
                        |
     Data set ready ----+

    Ring indication -- not connected

                          not connected -- Ring indication

图 11-2。 具有完整状态和握手的零调制解调器电缆的变体

      Signal ground ---------------------- Signal ground

       Receive data ---------------------- Transmit data

      Transmit data ---------------------- Receive data

      Ready to send ---------------------- Clear to send

      Clear to send ---------------------- Ready to send

Data terminal ready ----+----------------- Data carrier detect
                        |
     Data set ready ----+

                                     +---- Data set ready
                                     |
Data carrier detect ----+------------+---- Data terminal ready

    Ring indication -- not connected

                          not connected -- Ring indication

遗憾的是,并非所有 Linux 引导加载程序都支持 Linux 操作系统所需的控制信号。 如果您需要向引导加载程序发出命令,则这种奇怪的情况可能会迫使您放弃控制信号和握手。

有两种方法可以禁用 RS-232 握手:软件和硬件。

如果您有调制解调器,那么目前为止最好的技术是通过使用 AT 命令配置调制解调器的软件来禁用控制信号和握手。 这允许在引导加载程序作者纠正他们对串行连接的支持后恢复握手。

对于零调制解调器电缆,最好的方法是在终端仿真软件中禁用握手。

在零调制解调器的最坏情况下,您将需要一根伪造握手和控制信号的电缆。 尽量不要在生产环境中使用这些电缆。

图 11-3。 具有伪造状态和握手的零调制解调器电缆

      Signal ground ---------------------- Signal ground

       Receive data ---------------------- Transmit data

      Transmit data ---------------------- Receive data

Data terminal ready ---+              +--- Data terminal ready
                       |              |
      Clear to send ---+              +--- Clear to send
                       |              |
Data carrier detect ---+              +--- Data terminal ready
                       |              |
     Data set ready ---+              +--- Data set ready

      Ready to send -- not connected

                          not connected -- Ready to send

    Ring indication -- not connected

                          not connected -- Ring indication

如果您对快速的临时解决方案感到满意,也许只是使用串行控制台来获取内核 oops 消息,那么您可以配置一些 getty 程序来忽略 RS-232 状态信号。 例如,mgetty 具有direct选项,位于mgetty.conf。 在这种情况下,只需要三线或两线 RS-232 零调制解调器电缆。

图 11-4。 没有状态或握手的零调制解调器电缆

Signal ground ---------------------- Signal ground

 Receive data ---------------------- Transmit data

Transmit data ---------------------- Receive data

图 11-5。 没有状态或握手的单向零调制解调器电缆

Signal ground ---------------------- Signal ground

Transmit data ---------------------- Receive data

请勿在生产环境中使用这些电缆。